[STM32L4] 假设系统使用HSE(8MHz)作为主时钟源。。。。。。

[复制链接]
 楼主| duo点 发表于 2025-7-10 19:27 | 显示全部楼层 |阅读模式
假设系统使用HSE(8MHz)作为主时钟源,进入Stop模式时切换为HSI(16MHz)以降低功耗。唤醒后需驱动USART(波特率115200)通信,若时钟源未正确恢复会导致什么具体问题?如何修复?
公羊子丹 发表于 2025-7-27 07:23 | 显示全部楼层
如果唤醒后时钟没切回HSE,USART还是用HSI计算波特率,误差大了就会通信失败,特别115200这种速率很敏感。
周半梅 发表于 2025-7-27 07:23 | 显示全部楼层
我之前就是波特率异常,一查发现系统还是跑在HSI上,USART的时钟源和原来对不上了。
帛灿灿 发表于 2025-7-27 07:24 | 显示全部楼层
有时候 STM32唤醒回来不会自动切回原来的 HSE,需要手动等它稳定再切换,不然会跑飞。
童雨竹 发表于 2025-7-27 07:25 | 显示全部楼层
USART 在 CubeMX 里默认用的是 PCLK1,得确认 RCC 设置那一块时钟恢复过程有没有处理好。
万图 发表于 2025-7-27 07:26 | 显示全部楼层
你可以在唤醒中断或HAL_InitTick后加一段手动判断并切换到 HSE 的代码,确保切换成功。
Wordsworth 发表于 2025-7-27 07:28 | 显示全部楼层
建议在切换回HSE后再Init USART,或者干脆先 DeInit 再重新Init一下,保证串口参数是正确的。
Bblythe 发表于 2025-7-27 07:30 | 显示全部楼层
用示波器抓TX引脚会发现数据波形扭曲,这是时钟错了以后波特率变形的典型现象。
Pulitzer 发表于 2025-7-27 07:31 | 显示全部楼层
如果你用的是HAL库,注意 Stop模式唤醒后的 SystemClock_Config() 函数要能重设所有外设时钟。
Uriah 发表于 2025-7-27 07:32 | 显示全部楼层
有些工程里干脆切成HSI运行到底,虽然精度差点,但稳定,不用每次唤醒都担心切换时序问题。
Clyde011 发表于 2025-7-27 07:32 | 显示全部楼层
最好加个时钟恢复等待,比如 while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET); 确保HSE稳定再切回来。
小夏天的大西瓜 发表于 2025-7-27 22:32 | 显示全部楼层
其实重要的是唤醒后处理
您需要登录后才可以回帖 登录 | 注册

本版积分规则

498

主题

2088

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部

498

主题

2088

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部