STM32F103 低功耗STOP模式无法唤醒。
各位大佬,帮忙看一下,我有个程序,STM32F103C8T6,想用RTC的闹钟唤醒STOP模式,却不成功。测试进STOP模式前,RTC能够正常中断的,进了之后就不能够唤醒了。进STOP前用下面的计算式记录各寄存器:
(((PWR->CR & 0x00000100) >> 8 )<<0) |
(((RCC->BDCR & 0x00008000) >> 15)<<1) |
(((RCC->BDCR & 0x00000300) >> 8)<<2)|
(((RCC->BDCR & 0x00000002) >> 1)<<4)|
(((RTC->CRH & 0x00000002) >> 1)<<5)|
(((RTC->CRL & 0x00000002) >> 1)<<6)|
(((RTC->CRL & 0x00000001))<<7)|
(((EXTI->IMR & 0x00020000) >> 17)<<8)|
(((EXTI->EMR & 0x00020000) >> 17 )<<9)|
(((EXTI->PR & 0x00020000) >> 17)<<10)|
(((NVIC->ISER & 0x00000200) >> 9 )<<11)|
(((NVIC->ISER & 0x00000008) >> 3 )<<12)
这个值记录下来是0x1137。RTC的ALRH/L寄存器和CNTH/L寄存器也记录过,进STOP前确实CNT小,在STOP里长时间后确实比ALRH/L大了,而且比较时间是在正常的计数的。
发现在STOP状态里,RTC虽然在继续计数,但是原本能够产生的闹钟中断标记ALRF和秒标记SECF都不再产生了。请问这是什么原因,还需要查哪些寄存器的设置?
最好谁提供一个RTC唤醒STOP的小例子可以让我比对一下寄存器。 在STOP模式下,RTC的时钟源是否正确配置,并且是否在STOP模式下保持运行? EXTI的RTC唤醒线是否配置正确,NVIC中的中断是否使能。 LSE是否启用且稳定。 检查NVIC中RTC全局中断是否使能,并且优先级设置正确。 在进入STOP模式前,是否清除了所有相关的中断标志,以避免残留标志导致问题。 可能因LSE晶振在低功耗模式下频率漂移或停振。 手动清除RTC_CRL的ALRF和SECF标志,以及EXTI_PR的PR20位 若LSE晶振存在温漂,可启用STM32的RTC温度补偿功能,或通过软件算法动态调整闹钟时间。 用最新的HAL库或标准外设 duo点 发表于 2025-11-20 16:51
在STOP模式下,RTC的时钟源是否正确配置,并且是否在STOP模式下保持运行?
保持运行的,用的LSE,通过强制停止程序,可以看到RTC计数器确实运行了对应的时间。 powerantone 发表于 2025-11-20 16:53
在进入STOP模式前,是否清除了所有相关的中断标志,以避免残留标志导致问题。 ...
清除了的。
现在是看到RTC模块本身的寄存器中断标记ALRF在STOP模式下就不会置起来了。而在STOP模式之外可以正常置了很多次的。 flycamelaaa 发表于 2025-11-20 17:52
EXTI的RTC唤醒线是否配置正确,NVIC中的中断是否使能。
都配置了的。 是不是山寨的103 EXTI line硬件唤醒能好用么,软件唤醒估计容易程序跑飞 观望
页:
[1]