STM32之option bytes踩坑记录
最近在做一个stm32项目,用的盗版jlink调试,突然某次下完程序,stm32竟然开始无限重启了,量了一下复位脚,发现有周期性的重启脉冲输出,一开始我以为是硬件坏了,重新焊了一套硬件,发现新焊的是好的,但是原来那块板子,检查来检查去感觉也不像是硬件和程序的问题。
后来我查了一些资料,想到去检查复位后的RCC_CSR寄存器,这里会标识系统是由哪个信号引发的reset,看了以后才发现是由于看门狗引起的,但是看门狗我软件上都一直没开过,感觉非常奇怪。
后来查了些资料才发现:
STM32的独立看门狗可以是硬件使能或软件使能,硬件使能是通过option bytes配置,软件使能是通过软件设置寄存器位配置。
硬件使能的看门狗,在系统上电之后就开始工作,一旦开始工作就没有办法让它停止工作;而软件使能的看门狗,只有在设置了相应的寄存器位后才能开始工作,一旦开始工作,只有系统复位才能让它停止工作。 如果启用了硬件使能,必须通过擦除相应的选择字节位关闭硬件看门狗功能,这时看门狗的功能可以通过软件使能。 |
原来那么高端的,竟然还有option bytes这种东西,再查阅了一些关于option bytes资料:
STM32 的 Flash information block 部分,包含有特殊的选项字节,可以用于系统配置等信息, 其中还有两个有效字节(实际四个字节,两个是校验字节)的用户自定义数据字节。用ST-LINK可以直接配置这些特殊的配置位。
原来如此,STM32也有类似51/AVR之类的熔丝位,但是一般来说平时手动设置会比较少,所以不太注意这一点,用ST-LINK Utility可以直接使用ST-LINK来配置熔丝位:
打开以后界面如下:
可以看到WDG_SW位被清零了,这个位如果清零,看门狗上电就会由硬件使能,且关不掉,而另一块板子,这个配置位是置1的。我这里把WDG_SW位勾选上,然后写入,无限自动重启问题就解决了。看来盗版jlink确实容易用出问题来,能用正版还是尽量用正版吧。