[其他产品] 晶振没起振,程序卡在启动阶段

[复制链接]
7|0
happypcb 发表于 2026-9-16 15:57 | 显示全部楼层 |阅读模式
用RA2L1做第一个项目的时候,板子焊好,连上调试器,e2 studio能识别到芯片,烧了个点灯程序进去,LED死活不亮。供电量了,3.3V正常。复位引脚也量了,高电平。烧录口也能连上。该查的都查了,一切都正常,就是程序不跑。
用调试器单步跟,发现程序卡在系统初始化函数里一个while循环出不来。它在等一个标志位置1,那个标志一直没动静。上网搜,论坛里有人说是晶振问题,有人说是配置字问题,还有人说可能是芯片坏了。挨个试了一遍,换晶振、改配置字、甚至换了一片芯片,都没用。
最后用示波器点了晶振引脚,发现根本没有波形。这才把方向转到时钟配置上。FSP的Clock页面里,外部晶振频率默认是20MHz,板子上焊的是8MHz。改了晶振频率重新生成代码之后,波形出来了,程序也跑了。就这一个数字没对上,卡了整整两天。
后来发现配置字里还有个类似的坑。FSP的Clock页面改了晶振频率之后,配置字里还有一项相关的选项需要手动改,藏在配置字页面的角落里。如果这里忘了改,程序还是起不来。现在每次换晶振型号,我会检查三个地方:Clock页面里的频率、配置字里的频率、实际焊在板子上的频率,三个地方一致了才烧。
从那以后,时钟配置上我养成了几个习惯。
第一,启动阶段加超时。等晶振稳定的while循环不能无限等下去,加一个计数器,超过一定次数还没等到就跳到备用方案,用内部RC先跑起来,同时通过串口或LED报错,至少让设备能启动,方便排查问题。
第二,时钟切换加校验。切换之前先确认目标时钟源已经稳定,切换之后再读一下状态寄存器,确认切换成功。有一次切换代码写错了,系统时钟切到了一个不存在的源上,程序直接跑飞。后来加了校验,切换失败就自动切回内部RC,至少不会卡死。
第三,关键的时钟监控使能。有些芯片有时钟失效检测功能,外部晶振停了之后会自动切换到内部时钟,同时产生一个中断。这个功能在工业现场很有用,晶振受振动或者温度影响停振的时候,系统不会直接挂掉,还能维持基本功能并报警。
时钟这个东西,平时跑得好好的时候感觉不到它的存在,一出问题就是系统级的。启动阶段卡死、通信波特率不对、定时器不准,很多奇怪的现象最后查下去都是时钟配置的问题。把时钟配好、加好容错,后面能省很多排查时间。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

1931

主题

8552

帖子

3

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