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

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

3天内不再提示

CM3(STM32) 内核复位与系统复位区别及应用

黄工的嵌入式技术圈 来源:黄工的嵌入式技术圈 2020-03-20 09:43 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

Ⅰ写在前面

某些系统允许复位,但对外设又有特殊要求:某一个IO状态不能因为复位而改变,某一个定时器计数器不能改变等。

例子:我一个A系统通过一个IO控制另一个B系统的电源,而这个IO置高时才开启B系统的电源。

正常工作过程中,B系统只有收到A系统关机命令任务才会进行关机(也就是说不能掉电关机),而A系统在工作过程中有复位的需求。

这个时候如果我使用常规的引脚复位,就会使IO置低,不符合要求,就需要使用到本文说到的内核复位。

Ⅱ关于复位

说到复位,我们都不会陌生,学习时,开发板上基本都有一个复位按键。

复位的种类有很多:上电复位、掉电复位、复位引脚复位、看门狗复位、软件复位等。

上面说的复位按键,也就是对应复位引脚复位;而本文说的内核复位与系统复位是属于软件复位。

Ⅲ内核与系统复位区别

本文说的内核是指处理器内核,拿STM32F1处理器来说,STM32F1的内核就是Cortex-M3内核,而这里的系统就是包含内核和外设整个一起。

内核复位:它会使Cortex-M3进行复位,而不会影响其外设,如GPIO、TIM、USART、SPI等这些寄存器的复位。

系统复位:这个复位会使整个芯片的所有电路都进行复位,我们查看寄存器手册时,会发现某某某寄存器复位值等于多少。

因此,我们常说的复位一般指的就是系统复位。

Ⅳ内核与系统复位应用及代码分析

本文拿CM3(STM32F1)进行举例说明,其他芯片类似。在下一节提供源代码工程供大家参考学习。

本文提供的复位函数分:内核和系统复位、C语言汇编共四个版本(在一个工程),主要讲解其4个函数。

void NVIC_CoreReset(void);

void NVIC_CoreReset_a(void);

void NVIC_SysReset(void);

void NVIC_SysReset_a(void);

本章节内容可以参照Cotrex-M3权威指南中,Cotrex-M3其他特性章节下的自复位控制(软件复位)。中文版位于第13张,英文版位于第14张。

同时结合core_cm3.h源代码,其中系统复位中的C语言版就是core_cm3.h里面的源代码。

1.NVIC_CoreReset内核复位

CM3 允许由软件触发复位序列,用于特殊的调试或维护目的。在CM3中,有两种方法可以执行自我复位。第一种方法,是通过置位 NVIC 中应用程序中断与复位控制寄存器(AIRCR)的VECTRESET 位(位偏移:0)。

这种复位的作用范围覆盖了整个CM3处理器中,除了调试逻辑之外的所有角落,但是它不会影响到 CM3 处理器外部的任何电路,所以单片机上的各片上外设和其它电路都不受影响。

C语言版函数:

voidNVIC_CoreReset(void)

{

__DSB();

//置位VECTRESET

SCB->AIRCR = ((0x5FA << SCB_AIRCR_VECTKEY_Pos)      |

(SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) |

SCB_AIRCR_VECTRESET_Msk);

__DSB();

while(1);

}

汇编版函数:

__asm void NVIC_CoreReset_a(void)

{

LDR R0, =0xE000ED0C

LDR R1, =0x05FA0001 //置位VECTRESET

STR R1, [R0]

deadloop_Core

B deadloop_Core

}

内核主要注意:SCB_AIRCR_VECTRESET_Msk和LDR R1, =0x05FA0001,它是和系统复位唯一的区别。

2.NVIC_SysReset系统复位

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

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

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

C语言版函数:

void NVIC_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这两位。

C语言版本的代码和core_cm3.h中NVIC_SystemReset函数相似。对的这个函数就是系统复位函数,而我们的内核复位只是简单修改了一下。

3.main函数应用

Main函数中主要以LED1和LED2两个IO来说明。

LED1作为"标志灯": 上电"标志"置为高;

LED2作为指示灯:看从内核启动改变状态没有。

请在main函数中应用不同的配置进行测试:

#if 0 /* 内核复位 */

NVIC_CoreReset();

// NVIC_CoreReset_a();

#else /* 系统复位 */

NVIC_SysReset();

// NVIC_SysReset_a();

#endif

Ⅴ下载

Cotrex-M3权威指南:

http://pan.baidu.com/s/1mhQYa1q

本文讲解的源代码工程(STM32F103ZE(Keil)_Reset):

http://pan.baidu.com/s/1hskScba

提示:如果网盘链接失效,可以微信公众号“底部菜单”查看更新链接。

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

    关注

    4

    文章

    1436

    浏览量

    42491
  • STM32
    +关注

    关注

    2305

    文章

    11121

    浏览量

    371170
  • 复位
    +关注

    关注

    0

    文章

    179

    浏览量

    24968
  • 定时器计数器

    关注

    0

    文章

    3

    浏览量

    1135
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    用于稳定电源设计的复位IC应用实例

    现代电子设备正面临电压波动、浪涌电压以及输入电源不稳定等问题。如果缺乏适当的电压监测与复位保护功能,系统可能会出现误动作、异常复位,甚至导致硬件损坏。
    的头像 发表于 12-08 09:41 268次阅读
    用于稳定电源设计的<b class='flag-5'>复位</b>IC应用实例

    揭秘RESET复位键:引脚设计如何支撑硬件系统的重启通路

    RESET复位键在电子设备中承担着重启通路的核心角色,当系统因软件故障、硬件冲突或电源波动陷入异常时,它能通过硬件层面的强制复位,使设备快速脱离故障状态。这一功能的实现基于引脚功能与硬件设计的深度
    的头像 发表于 11-28 15:18 42次阅读
    揭秘RESET<b class='flag-5'>复位</b>键:引脚设计如何支撑硬件<b class='flag-5'>系统</b>的重启通路

    CPU的几种复位方式适合哪些场景?

    1、上电复位 适用场景:系统首次上电或电源以外断电后重新上电时; 2、看门狗复位 适用场景:虚脱程序运行异常,如陷入死循环或长时间无响应时; 3、软件
    发表于 11-27 07:56

    GraniStudio:轴复位例程

    1.文件运行 导入工程 双击运行桌面GraniStudio.exe。 通过引导界面导入轴复位例程,点击导入按钮。 打开轴复位运动例程所在路径,选中轴复位运动.gsp文件,点击打开,完成导入。 2.
    的头像 发表于 08-22 16:05 479次阅读
    GraniStudio:轴<b class='flag-5'>复位</b>例程

    GraniStudio零代码平台轴复位算子支持多少个轴同时复位,有哪些回零模式?

    GraniStudio平台在轴复位的功能上未对同时复位的轴数进行硬性限制,理论上支持任意数量轴同步复位,需要考虑的是在做多轴同步复位时要评估机械安全风险,建议提前确认机械在多轴同时
    的头像 发表于 07-07 18:02 485次阅读
    GraniStudio零代码平台轴<b class='flag-5'>复位</b>算子支持多少个轴同时<b class='flag-5'>复位</b>,有哪些回零模式?

    复位电路的核心功能和主要类型

    复位电路(Reset Circuit) 是数字系统中的关键功能模块,用于确保设备在上电、电压波动或异常状态下可靠复位至初始状态。其设计直接影响系统的稳定性和抗干扰能力。
    的头像 发表于 06-30 14:24 907次阅读
    <b class='flag-5'>复位</b>电路的核心功能和主要类型

    LM3724系列 低功率电压监控和复位IC,带手动复位功能数据手册

    LM3722/LM3723/LM3724 微处理器监控电路可监控电源 在微处理器和数字系统中。它们在上电期间为微处理器提供复位, 掉电、掉电条件和手动复位。 LM3722/LM3723
    的头像 发表于 04-12 11:11 786次阅读
    LM3724系列 低功率电压监控和<b class='flag-5'>复位</b>IC,带手动<b class='flag-5'>复位</b>功能数据手册

    MCP809系列 /3 引脚复位 IC数据手册

    MCP809/810 微处理器监控电路可用于监控微处理器和数字系统中的电源。它们在上电、掉电和掉电情况下为微处理器提供复位。 MCP809/810 的功能是监控 V~抄送~supply
    的头像 发表于 04-12 10:55 962次阅读
    MCP809系列  /<b class='flag-5'>3</b> 引脚<b class='flag-5'>复位</b> IC数据手册

    TPS3840-Q1 具有手动复位和可编程复位时间延迟的汽车高输入电压监控器数据手册

    当 VDD 上的电压降至负电压阈值 (V 以下) 时,复位输出信号被置位 ~它-~ ) 或当手动复位被拉至低逻辑 (V ~MR_L~ ).当 V 时 reset 信号被清除~DD 系列~上升到 V
    的头像 发表于 04-10 11:20 648次阅读
    TPS3840-Q1 具有手动<b class='flag-5'>复位</b>和可编程<b class='flag-5'>复位</b>时间延迟的汽车高输入电压监控器数据手册

    TPS3870-Q1 具有延时和手动复位功能的汽车级高精度过压复位 IC数据手册

    TPS3870-Q1 器件是一款集成过压 (OV) 监控器或复位 IC,采用业界最小的 6 引脚 DSE 封装。这款高精度电压监控器非常适合在低电压电源轨上工作且具有窄裕量电源容差的系统。低阈值迟滞
    的头像 发表于 04-10 11:09 526次阅读
    TPS3870-Q1 具有延时和手动<b class='flag-5'>复位</b>功能的汽车级高精度过压<b class='flag-5'>复位</b> IC数据手册

    TLV840系列 具有可调复位时间延迟和手动复位功能的低压监控器数据手册

    TLV840 系列电压监控器或复位 IC 可在高电压水平下工作,同时在整个 VDD 和温度范围内保持极低的静态电流。TLV840 提供低功耗、高精度和低传播延迟 (t p_HL = 30 μs
    的头像 发表于 04-10 10:17 682次阅读
    TLV840系列 具有可调<b class='flag-5'>复位</b>时间延迟和手动<b class='flag-5'>复位</b>功能的低压监控器数据手册

    RT1170EVKB如何设置CM7和CM4内核来实现它们自己的看门狗外设?

    7 使用 WDOG1 进行系统复位,那么 CM4 的看门狗应该如何设置以防止意外的代码执行故障?CM4 应该使用 WDOG3/4 还是其他
    发表于 03-17 07:03

    复位电路的作用、控制方式和类型

    复位电路也是数字逻辑设计中常用的电路,不管是 FPGA 还是 ASIC 设计,都会涉及到复位,一般 FPGA或者 ASIC 的复位需要我们自己设计复位方案。
    的头像 发表于 03-12 13:54 3539次阅读
    <b class='flag-5'>复位</b>电路的作用、控制方式和类型

    AN-686: 实现I²C复位

    电子发烧友网站提供《AN-686: 实现I²C复位.pdf》资料免费下载
    发表于 01-15 16:26 0次下载
    AN-686: 实现I²C<b class='flag-5'>复位</b>

    EE-64:设置复位时的模式引脚

    电子发烧友网站提供《EE-64:设置复位时的模式引脚.pdf》资料免费下载
    发表于 01-14 15:14 0次下载
    EE-64:设置<b class='flag-5'>复位</b>时的模式引脚