STM32F4由于RST引脚外接上拉电阻导致NVIC_SystemReset()函数软件复位失效
[复制链接]
本帖最后由 通宵敲代码 于 2022-1-22 01:49 编辑
手头有个项目需要用STM32F4芯片做个验证,功能不是很复杂,
于是随手抄起了之前画的F411的核心板,板子是仿的WeAct的,原理图兼容。
验证过程中一切顺利,唯独在调用HAL_NVIC_SystemReset()函数,执行软件复位时,系统卡死了。
先附上函数内容,
__STATIC_INLINE void NVIC_SystemReset(void)
{
__DSB();
SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) |
(SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) |
SCB_AIRCR_SYSRESETREQ_Msk );
__DSB();
for(;;)
{
__NOP();
}
}
这就奇怪了,板子是之前用过的,硬件也没问题,硬件复位之后也会正常运行程序,
软件也仅仅是重置了复位寄存器,并没有复杂的操作,总不至于HAL库出问题了吧。
于是我尝试直接自己写复位寄存器,就一条赋值语句,总不至于还出错吧。
SCB->AIRCR = 0x05FA0004;
结果还是打脸了,看起来不是软件的问题。
来来回回折腾了半个多小时,查来查去,突然发现板子上复位引脚的上拉电阻焊上了。。。难道
用过STM32芯片的应该都知道,F1的复位引脚是没有内不上拉电阻的,所以默认都是接一个10K的电阻到VCC,
而从ARM M4内核以后,复位引脚内部都会集成一个上拉电阻,外部只需要接一个100nF的复位电容即可!!
难道是这个原因??
有了猜想就去验证一下,就是我上网百度了一下,发现遇到这个坑的还不止我一个,而且不光是F4芯片
找到了问题就验证一下,上老铁拆电阻,之后再次上电测试,软件复位终于正常了,多次测试都没问题;
这时候突然想到前边似乎有看到过这个说法,有人给出过这样的提醒,雨后回去扒拉了下浏览记录,果然
然后我从网上搜一个下WeAct官方板子的照片,果然这个上拉电阻没有焊接
官方给的原理图上也有标注,还是我大意了。
|