完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
使用freertos系统,单片机是STM32wb55,进入stop模式后,通过定时器每隔1分钟自动唤醒一次。HW_TS_Create 创建定时器,HW_TS_Start启动定时, 最后在定时器处理函数里面进行唤醒操作。发现机器运行1天或2天,或3,5天时间,出现死机,是什么原因造成的呢?使用freertos系统自带的vPortSuppressticksAndSleep函数(Tickless idle/low power functionality),生成代码时此函数已经有完整功能。使用的时自定义模式:#define configUSE_TICKLESS_IDLE 2目前推测是是反复HW_TS_Start,和HW_TS_Stop 造成。代码思路是进入stop模式前,调用HW_TS_Start函数,开启定时器中断,当隔1分钟时,进入定时器中断处理函数造成异常。
检查下。 |
|
相关推荐
2个回答
|
|
提醒两点供参考:
第一点,检查下代码每次唤醒后时钟配置是否完成,保证其可靠完成。 必要时可以做些标志检查或延时。 第二点,好好琢磨下有关中断的抢占逻辑,程序是否会发生互斥性地死锁; 旁人不太可能比你还清晰你的程序流程,自己好好检查下。 |
|
|
|
该问题可能是由于反复启动和停止定时器导致的,可以尝试以下解决方案:
1. 确保定时器只被启动一次:在进入stop模式前,使用一个全局变量来记录定时器是否已经被启动,只有当定时器未启动时才调用HW_TS_Start函数启动定时器。 2. 确保定时器在进入stop模式前已经停止:在进入stop模式前,使用HW_TS_Stop函数停止定时器。 3. 检查定时器处理函数中的唤醒操作是否正确:确认在定时器处理函数中正确调用Freertos的任务唤醒函数,例如xSemaphoreGiveFromISR或xTaskNotifyFromISR,以保证任务能够正确唤醒。 4. 确保使用了正确的低功耗模式:在进入stop模式前,确保选择了适当的低功耗模式,例如STOP0模式。 5. 检查其他可能导致死机的原因:除了上述问题,还应该检查其他可能导致死机的原因,例如内存溢出、中断处理函数的问题等。 请注意,在调试过程中,可以使用调试器进行单步调试或使用日志输出来帮助定位具体导致死机的原因。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1780 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1621 浏览 1 评论
1081 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
728 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1679 浏览 2 评论
1938浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
732浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
570浏览 3评论
596浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
557浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 06:57 , Processed in 1.041453 second(s), Total 83, Slave 66 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号