0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

NVIC_SysReset系统复位

5RJg_mcuworld 来源:YXQ 2019-07-31 16:12 次阅读

系统复位是置位同一个寄存器中的 SYSRESETREQ 位。这种复位则会波及整个芯片上的电路:它会使 CM3 处理器把送往系统复位发生器的请求线置为有效。但是系统复位发生器不是CM3的一部分,而是由芯片厂商实现,因此不同的芯片对此复位的响应也不同。因此,读者需要认真参阅该芯片规格书,明白当发生片内复位时,各外设和功能模块都会回到什么样的初始状态,或者有哪些功能模块不受影响(比如, STM32系列的芯片有后备存储区,该区就被特殊对待)。

大多数情况下,复位发生器在响应 SYSRESETREQ 时,它也会同时把 CM3 处理器的系统复位信号(SYSRESETn)置为有效。通常, SYSRESETREQ 不应复位调试逻辑。

这里有一个要注意的问题:从 SYSRESETREQ 被置为有效,到复位发生器执行复位命令,往往会有一个延时。在此延时期间,处理器仍然可以响应中断请求。但我们的本意往往是要让此次执行到此为止,不要再做任何其它事情了。所以,最好在发出复位请求前,先把FAULTMASK置位。因此,我在提供源代码中有这么一句:__set_FAULTMASK(1);,也就是置位FAULTMASK。

C语言版函数:

voidNVIC_SysReset(void){  __DSB();  SCB->AIRCR  = ((0x5FA << SCB_AIRCR_VECTKEY_Pos)      |                 (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) |                 SCB_AIRCR_SYSRESETREQ_Msk);  __DSB();  while(1);}

汇编版函数:

__asm void NVIC_SysReset_a(void){  LDR R0, =0xE000ED0C  LDR R1, =0x05FA0004  STR R1, [R0]deadloop_Sys  B deadloop_Sys}

内核复位与系统源代码和相近,差异在于SYSRESETREQ和SYSRESETREQ这两位。

关于复位的知识,在实际项目中应用的比较多。

可以结合上面提供例程理解,以及结合Cortex-M手册理解。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    19281

    浏览量

    229789
  • 复位电路
    +关注

    关注

    13

    文章

    322

    浏览量

    44593

原文标题:31个惊艳的数据可视化作品,让你感受“数据之美”!

文章出处:【微信号:mcuworld,微信公众号:嵌入式资讯精选】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    系统复位的特殊处理

    复位就是复位撤离,系统复位就是复位结束了系统准备开始工作。
    的头像 发表于 11-28 12:20 1000次阅读
    <b class='flag-5'>系统</b>解<b class='flag-5'>复位</b>的特殊处理

    复位那些小事—系统复位的特殊处理

    复位就是复位撤离,系统复位就是复位结束了系统准备开始工作。
    的头像 发表于 12-04 15:25 1741次阅读
    <b class='flag-5'>复位</b>那些小事—<b class='flag-5'>系统</b>解<b class='flag-5'>复位</b>的特殊处理

    STM32F303调用NVIC_SystemReset函数软件复位失败的原因?怎么解决?

    在对APP进行升级完成后希望自动软件复位重启,但调用NVIC_SystemReset函数后一直在for循环。这里的软件复位原理不确定是否是内部控制NRST管脚复位。若是,则可能因外部电
    发表于 04-02 06:52

    STM32 HAL_NVIC_SystemReset()死机的原因?

    一直使用HAL_NVIC_SystemReset()进行系统复位,最近程序升级,在执行到HAL_NVIC_SystemReset()时系统
    发表于 04-09 07:41

    Ch579 NVIC_SystemReset()函数不复位怎么解决?

    在使用CH579,做项目,即将完工,内存升级了一下,即占用RAM比之前版本多了1K;导致升级后的程序,执行NVIC_SystemReset()函数后CPU ,不复位,重新上电也不工作。请问,有什么好办法?
    发表于 09-08 06:09

    华大单片机怎么用NVIC_SystemReset()软复位

    华大HC32F003单片机可以直接调用NVIC_SystemReset()进行软复位吗,如何确保复位成功,目前发现有时候不能正常复位
    发表于 09-27 06:09

    NVIC_CoreReset内核复位

    关于复位的知识,在实际项目中应用的比较多。
    的头像 发表于 07-31 16:07 3.4w次阅读

    STM32F1单片机软件复位

    基于标准外设库V3.5.0。__set_FAULTMASK(1); //关中断NVIC_SystemReset(); //复位先关中断,然后复位,不要问为什么。
    发表于 11-19 11:36 0次下载
    STM32F1单片机软件<b class='flag-5'>复位</b>

    基于STM32L4的NVIC中断系统

    STM32L4基于Cortex-M4架构,内部有一个嵌套中断向量控制器(NVIC)来管理异常,并将优先级最高的异常提交给CPU处理。异常的编号范围是1~255,其中编号1~15被归为系统异常(如
    发表于 12-04 14:06 12次下载
    基于STM32L4的<b class='flag-5'>NVIC</b>中断<b class='flag-5'>系统</b>

    STM32学习笔记(五)---NVIC

    STM32学习笔记(五)—NVIC文章目录STM32学习笔记(五)---NVIC一、NVIC简介二、中断优先级优先级定义优先级分组三、中断编程F407在内核水平上搭载了一个异常响应系统
    发表于 12-04 18:51 16次下载
    STM32学习笔记(五)---<b class='flag-5'>NVIC</b>

    STM32 NVIC相关库函数解析

    一、中断优先级分组函数:1)相关寄存器实际上,STM32的中断优先级只用到高4位,如下图所示:void NVIC_PriorityGroupConfig(uint32_t
    发表于 12-04 20:36 7次下载
    STM32 <b class='flag-5'>NVIC</b>相关库函数解析

    NVIC_SystemReset使用及系统复位

    NVIC_SystemReset:STM32中NVIC_SystemReset()函数的作用?什么时候用?STM32软件复位有两种方式(1)方式一: NVIC_SystemReset(
    发表于 12-08 11:36 11次下载
    <b class='flag-5'>NVIC</b>_SystemReset使用及<b class='flag-5'>系统</b><b class='flag-5'>复位</b>

    STM32软件复位

    的 core_cm3.h 文件里 直接提供了 系统复位的函数 static __INLINE void NVIC_SystemReset(void){ SCB-&amp;gt;AIRCR = ((0x5F...
    发表于 12-08 11:51 2次下载
    STM32软件<b class='flag-5'>复位</b>

    STM32F1----NVIC

    1.NVIC初始化流程配置中断优先级分组void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);建立
    发表于 01-17 09:37 6次下载
    STM32F1----<b class='flag-5'>NVIC</b>

    GD32 MCU电源复位系统复位有什么区别

    GD32 MCU的复位分为电源复位系统复位,电源复位又称为冷复位,相较于
    的头像 发表于 02-02 09:37 1508次阅读
    GD32 MCU电源<b class='flag-5'>复位</b>和<b class='flag-5'>系统</b><b class='flag-5'>复位</b>有什么区别