嵌入式技术william hill官网
直播中

麻酱

8年用户 1226经验值
擅长:MEMS/传感技术
私信 关注
[问答]

LOGD和rt_kprintf函数这两个打印函数在按键中断函数中无法输出到shell是怎么回事

PM组件,被按键中断唤醒后,立即进入按键中断函数,在按键中断函数中有LOGD和rt_kprintf函数,这两个打印函数在按键中断函数中无法输出到shell。

的确是进入了DEEP,按键能唤醒,按键唤醒中断函数中的LED亮灭正常,就是rt_kprintf输出到shell没有输出,而rt_pm_notify_set设置的进入和退出deepsleep的打印函数都正常输出。

另外还有个问题,进入DEEP唤醒后第一时间是执行按键中断函数,还是先执行RT_PM_EXIT_SLEEP回调函数,实测是先执行按键中断函数。

回帖(2)

马祥

2022-8-12 11:04:13
单片机进入 DEEP SLEEP(停止模式)后若由中断唤醒,先进入中断,退出中断服务程序后,接着执行 WFI 指令后的程序;若由事件唤醒,直接接着执行 WFE 后的程序。唤醒后,STM32 将使用 HSI RC 振荡器作为系统时钟。
因为唤醒后的系统时钟不是使用的 HSE 倍频后的时钟,对于 STM32F1xx 来说此时的系统时钟不是 72MHz,所以串口的波特率在唤醒后需要重新进行配置才能使串口正常输出,在 PM 组件中有函数 uart_console_reconfig() 实现了串口重新配置的功能。
举报

王芳

2022-8-12 11:04:22
退出唤醒,应该先初始化好时钟,如果直接去执行中断,确认下 全局屏蔽中断的操作是否失效引起的
举报

更多回帖

发帖
×
20
完善资料,
赚取积分