解决STM8S103K3T6打开BEEP功能遇到的无法操作BEEP_CSR的问题

最近项目用到了STM8S103K3T6的beep功能,调试时遇到了无法更改寄存器BEEP_CSR的值的问题,造成无法开启beep功能;网上一搜全是提到OPTION BYTE的设置问题,不管用IAR或者stvp烧写前设置,还是在程序中操作FLASH通过软件方式改变OPTION BYTE,都没有作用,自己翻看最新版的手册,里面讲的也是前后冲突,英文版的也是
言归正传,项目中就是在PD4脚接的无源蜂鸣器,没什么问题;手册中也可能为了兼容多个型号说的不够详细,前后冲突

在这里插入图片描述
在手册DocID15441 Rev 13的第4.9章说要设置op(option data简写)的ARF7位,打开复用

在这里插入图片描述
但是在第8.1章又说AFR7是保留位,无作用,在第八章中也没找到关于beep的设置位

在这里插入图片描述
在RM0016 rev14的beep介绍也很简单,只有一个寄存器,时钟树上提到了CKAWUSEL OPTION bit,实际测试打开也没作用
在这里插入图片描述
这里提到如果开启beep功能硬件会自动使能LSI,所以OP应该不用管,而且设置流程中也没提到设置OP的要求
在这里插入图片描述
实际调试中遇到的问题是,不管用库函数还是直接操作寄存器都不能更改BEEP_CSR的值,始终是0x1F;这样相当于没有配置beep功能,肯定不会响的,后来在仿真过程中看到,LSI始终是禁用的状态,设置了OP还是没有启用,后面仔细查找,看到程序中在初始化CLK的时候,为了降低功耗把未用的外围时钟关掉了,其中有AWU的,和LSI有关系,屏蔽掉就可以操作BEEP_CSR寄存器了
在这里插入图片描述
问题是解决了,但是不明白为什么AWU会影响BEEP,从主时钟树上也没看出来,也没有beep的时钟走向描述
在这里插入图片描述
两个AWU的时钟,其中一路来自Fmaster,按说初始化程序中关的是这一路,不应该影响啊
在这里插入图片描述
不明白
正确设置开启BEEP并使用LSI的条件是:
1)OPTION字节设置保持默认,即CKAWUSEL为0,选择LSI
2)程序里面CLK_PCKENR2寄存器的PCKEN22设为1,即保持与Fmaster的连接
后续测试发现如果要使用HSE驱动BEEP,第1条OPTION里的CKAWUSEL要置1,且第2条也要同时置1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值