
我使用的是STM32F051,使用J-flash烧录完固件文件后,按键复位(NRST脚)后程序总是卡在Delay(),调试发现原来是systick的中断没有。但是如果烧录完固件后重新上电的话程序就可以正常运行。这是什么原因呢?有没有大神 /*systick初始化*/ void Systick_Init(void) { if (SysTick_Config(SystemCoreClock / 1000))//1ºÁÃë { /* Capture error */ while(1) {} } } /*systick中断函数,其实就是调用TimingDelay_Decrement,对TimingDelay做减 发现使用按键复位后,这个中断服务函数一直没有进入*/ void SysTick_Handler(void) { TimingDelay_Decrement(); } void TimingDelay_Decrement(void) { if (TimingDelay != 0x00) { TimingDelay--; } } /*延时函数*/ void Delay(__IO uint32_t nTime) { TimingDelay = nTime; while(TimingDelay != 0) {}; } int main(void) { …… Delay(300); …… } |
第二,有些上电状态绑定引脚的状态寄存器也是不会在nRST时重置的,这些状态只在上电时保存一次,例如网络phy芯片的MII或RMII方式的选择,或者有些MCU启动方式的配置脚等,例如系统更新完程序,希望重启,若变更了启动位置岂不是乱套了。
所以,nRST信号就是为了在保存一定信息状态的情况下使系统的大部分寄存器(包括PC指针)重置。