STM8S使用AWU无法唤醒的问题的解决过程

最近使用STM8S005做一个项目, 想达到进入Halt状态然后定时唤醒, 查看了一下文档, 发现可以用自动唤醒功能AWU来做. 于是有了如下代码: 

AWU_APR = 0x3E; 	//64分频
AWU_TBR = 0x0F; 	//32秒唤醒
CLK_PCKENR2 |= (0x04); 	/* AWU与主时钟连接 */   
AWU_CSR |= 0x10;    //使能自动唤醒

CLK_ICKR |= 0x08;  	// 打开内部低速时钟源   
while(0x10 != CLK_ICKR & 0x10);                // 等待时钟源信号稳定     

halt();

发现进入Halt状态了, 可等了30多秒后, 没有发现起来呀(我是用LED灯来指示的, LED只在初始化的时候设置, 没有看到LED灯亮, 那就表示没有起来), 百思不得其解, 疯狂google, 才发现自己犯了一个错误: 我以为AWU唤醒后, 会自动复位, 其实它不会复位, 而是进入了中断, 如果没有清除中断, 那么就一直在中断了... 见google来的类似问题:stm8的awu自动唤醒问题

真是经验主义害死人呀.


找到问题那就好办了, 在中断方法中添加看门狗来复位一下(当然, 你也可以根据你的需求来处理这种情况)

@far @interrupt void AWU_IRQHandler(void)
{
    WWDG_CR=0xbf;
}
记得修改中断向量表里面的AWU方法名称为
AWU_IRQHandler
就好


PS: 在做AWU的时候还遇到了无法切换到LSI的问题(我一开始以为需要将时钟切换至LSI, AWU才能起作用, 后来发现不是, 无论怎么说, 无法切换到LSI也算是学习到一点东西)

原来LSI需要在选项字节中配置的, 默认LSI不激活的, 又是Google:

STM8S内部时钟切换失败问题的解决方案


同时, 在Google过程中, 又学习到AWU和WWDG配合使用来做低功耗的一种方案:

STM8S AWU与WWD配合


收获良多. 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值