你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
y369369 提问时间:2021-5-27 11:01 / 未解决
我使用的是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);
    ……
}

收藏 评论4 发布时间:2021-5-27 11:01

举报

4个回答
STMCU-管管 回答时间:2021-5-27 11:10:16
第一,引脚电平复位MCU并不是会把所有的寄存器重置为初始状态,若是全部重置了一些复位前的重要信息是没办法保存的,比如说实时时钟模块中的寄存器,若复位就重置了岂不是每次都得调时间吗?
第二,有些上电状态绑定引脚的状态寄存器也是不会在nRST时重置的,这些状态只在上电时保存一次,例如网络phy芯片的MII或RMII方式的选择,或者有些MCU启动方式的配置脚等,例如系统更新完程序,希望重启,若变更了启动位置岂不是乱套了。
所以,nRST信号就是为了在保存一定信息状态的情况下使系统的大部分寄存器(包括PC指针)重置。
xmshao 回答时间:2021-5-27 12:05:37
STM32里有很多复位源。鉴于你反馈的情况,怀疑你烧录过程中有做读保护操作,在调试器连接的情况下,若要再次运行程序的话,需要做上电复位才行。关于这点,请你确认下。
butterflyspring 回答时间:2021-5-27 17:10:19
芯片内有些调试部分的功能控制未必受到复位脚控制,这些部分是内核部分(ARM公司定制),所以重新上电才能恢复。比如说芯片的低功耗模式,如果在调试模式下测试的电流是偏大很多的,只有断开调试,重新上电才能测出真实的功耗。
胤幻1988 回答时间:2021-5-30 20:55:05
从未遇见过,即便Jflash烧写后,按复位按键也是跳到向量中断表的初始位置的。感觉你的程序有问题。
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版