[STM32F1] 无外部高速时钟时 HSE_RDY 被意外置位

[复制链接]
1033|10
 楼主| 我喜欢打游戏 发表于 2021-11-8 16:06 | 显示全部楼层 |阅读模式
前言
问题由客户提出, 用户发现在 STM32F103 器件上。 用户在产品中使能了 IWDG, 在使用过程中发现当
MCU 被复位后, 有时程序跑不下去; 跟踪代码发现程序死在轮询 PLL_RDY 处。 用户反馈说用的就是
ST 库中的范例代码,怀疑 STM32F103 有设计问题  

 楼主| 我喜欢打游戏 发表于 2021-11-8 16:08 | 显示全部楼层
调研
排查硬件供电无问题, 用示波器测量 NRST 发现复位信号正常, 用 STM32CubeMX 生成最小系统代码
( 时钟配置
+IWDG)反复验证, 未发现此问题, 开始怀疑用户代码。
客户声称开发是基于
ST 提供的 SPL 库中自带的 demo, 使用 SPL 中的范例代码加上 IWDG 复位,确
实可以复现此问题: 通过调试器跟踪代码发现问题发生时
HSE_RDY 位被异常置位( 用户平台无外挂
高速时钟源)
通过分析代码,发现
SPL 库在设置时钟时会直接使能 HSE,在复位若干次后 HSE_RDY 位会被置位,
从而导致程序(
HSEStatus) 按照 HSE 来进行接下来的时钟配置。 而 SPL 中的 demo 是跑在
STM32F1 评估板上,而评估板自带高速时钟源, 故没有此问题。  

866936188da8def747.png
 楼主| 我喜欢打游戏 发表于 2021-11-8 16:10 | 显示全部楼层
结论
MCU 复位后 HSE_ON 默认是无效, 反复对其进行使能操作会导致 MCU 内部的噪声积累,造成时
钟检测电路误判,并由寄存器反映出来。
- STM32F103 来说,一旦 HSE_RDY 被置位,只要不断电,无论如何复位 HSE_RDY 都不会
被清除(即使失能
HSE_ON  

- 对 STM32F030 单片机进行类似操作, 也会发现同样问题,不同之处在于在 HSE_RDY 被置位
后复位 MCU, HSE_RDY 位会被清除,但是一旦 HSE_ON 被置位, HSE_RDY 同样会被置位


 楼主| 我喜欢打游戏 发表于 2021-11-8 16:12 | 显示全部楼层
- 对 STM32F030 单片机进行类似操作, 也会发现同样问题,不同之处在于在 HSE_RDY 被置位
后复位 MCU, HSE_RDY 位会被清除,但是一旦 HSE_ON 被置位, HSE_RDY 同样会被置位  

 楼主| 我喜欢打游戏 发表于 2021-11-8 16:14 | 显示全部楼层
建议
1 要了解 HSE_RDY 位是用来检测是否有外部时钟存在的必要条件, 而非充分条件
2 在使用 STM32 时,一定要按照硬件设计对软件做出修改,切勿图省事而造成问题  

磨砂 发表于 2021-12-4 11:52 | 显示全部楼层
很不喜欢用看门狗
晓伍 发表于 2021-12-4 11:53 | 显示全部楼层
是不是喂狗有问题啊
八层楼 发表于 2021-12-4 11:53 | 显示全部楼层
还是对单片机不够了解啊
观海 发表于 2021-12-4 11:55 | 显示全部楼层
HSE_RDY 位是用来设置什么的呢
tpgf 发表于 2021-12-4 11:55 | 显示全部楼层
IWDG是什么标志位啊
guanjiaer 发表于 2021-12-4 11:57 | 显示全部楼层
内部的噪声是如何产生的呢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

80

主题

626

帖子

1

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