打印
[应用相关]

STM32F051的NRST引脚复位和重新上电的区别是什么?

[复制链接]
1266|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
elephant00|  楼主 | 2021-6-4 14:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我使用的是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);
    ……
}

使用特权

评论回复
沙发
probedog| | 2021-6-4 15:01 | 只看该作者

STM32里有很多复位源。鉴于你反馈的情况,怀疑你烧录过程中有做读保护操作,在调试器连接的情况下,若要再次运行程序的话,需要做上电复位才行。关于这点,请你确认下。

使用特权

评论回复
板凳
classroom| | 2021-6-4 15:02 | 只看该作者
芯片内有些调试部分的功能控制未必受到复位脚控制,这些部分是内核部分(ARM公司定制),所以重新上电才能恢复。比如说芯片的低功耗模式,如果在调试模式下测试的电流是偏大很多的,只有断开调试,重新上电才能测出真实的功耗。

使用特权

评论回复
地板
laocuo1142| | 2021-6-4 15:03 | 只看该作者

从未遇见过,即便Jflash烧写后,按复位按键也是跳到向量中断表的初始位置的。感觉你的程序有问题。

使用特权

评论回复
5
flycamelaaa| | 2021-6-4 15:03 | 只看该作者

第一,引脚电平复位MCU并不是会把所有的寄存器重置为初始状态,若是全部重置了一些复位前的重要信息是没办法保存的,比如说实时时钟模块中的寄存器,若复位就重置了岂不是每次都得调时间吗?
第二,有些上电状态绑定引脚的状态寄存器也是不会在nRST时重置的,这些状态只在上电时保存一次,例如网络phy芯片的MII或RMII方式的选择,或者有些MCU启动方式的配置脚等,例如系统更新完程序,希望重启,若变更了启动位置岂不是乱套了。
所以,nRST信号就是为了在保存一定信息状态的情况下使系统的大部分寄存器(包括PC指针)重置

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

966

主题

2953

帖子

7

粉丝