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

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

3天内不再提示

关于STM32复位的那些事

冬至子 来源:阿伟玩电子 作者:Aweil 2023-11-24 15:23 次阅读

1. 硬件复位

硬件复位电路如下图,直接将RESET引脚拉低即可,如下:

图片

2. 软件复位

软件复位库函数:

NVIC_SystemReset();

STM32F1XX系列中,复位函数在core_cm3.h文件中:

/**
 * @brief  Initiate a system reset request.
 *
 * Initiate a system reset request to reset the MCU
 */static __INLINE void NVIC_SystemReset(void){
  SCB- >AIRCR  = ((0x5FA < < SCB_AIRCR_VECTKEY_Pos)      | 
                 (SCB- >AIRCR & SCB_AIRCR_PRIGROUP_Msk) | 
                 SCB_AIRCR_SYSRESETREQ_Msk);                   /* Keep priority group unchanged */
  __DSB();                                                     /* Ensure completion of memory access */              
  while(1);                                                    /* wait until reset */}

STM32F4XX系列中,复位函数在core_cm4.h文件中:

/**
  brief   System Reset
  details Initiates a system reset request to reset the MCU.
 */__STATIC_INLINE void NVIC_SystemReset(void){
  __DSB();                                                          /* Ensure all outstanding memory accesses included
                                                                       buffered write are completed before reset */
  SCB- >AIRCR  = (uint32_t)((0x5FAUL < < SCB_AIRCR_VECTKEY_Pos)    |
                           (SCB- >AIRCR & SCB_AIRCR_PRIGROUP_Msk) |
                            SCB_AIRCR_SYSRESETREQ_Msk    );         /* Keep priority group unchanged */
  __DSB();                                                          /* Ensure completion of memory access */

  for(;;)                                                           /* wait until reset */
  {
    __NOP();
  }}

在HAL库中又进行了封装,在stm32f4xx_hal_cortex.c中,调用上面和下面两个函数效果是一样的。

/**
  * @brief  Initiates a system reset request to reset the MCU.
  * @retval None
  */void HAL_NVIC_SystemReset(void){
  /* System Reset */
  NVIC_SystemReset();}

禁止可屏蔽中断库函数:

__set_FAULTMASK(1);

参考网上一些博主说的,在调用复位函数和真正复位之间还有一段延迟,在这段时间单片机还是可以正常处理中断等程序的,为了避免这种情况,应该把相应的中断都屏蔽掉,这里会用到下面这个中断屏蔽相关的函数;

可以注意到这些函数名在M3和M4中都是一样的,M3中函数的定义在core_cm3.h中,如下:

/**
 * @brief  Set the Fault Mask value
 *
 * @param  faultMask  faultMask value
 *
 * Set the fault mask register
 */static __INLINE void __set_FAULTMASK(uint32_t faultMask){
  register uint32_t __regFaultMask       __ASM("faultmask");
  __regFaultMask = (faultMask & 1);}

在M3的权威指南中可以看到这个寄存器的功能就是禁止所有的 可屏蔽中断 ,如下:

图片

总结

所以一般如果需要软复位只要调用上面两个库函数即可:

/*
 *函数功能:STM32软复位函数
 */
 void Stm32_SoftReset(void)
 {
   __set_FAULTMASK(1);//禁止所有的可屏蔽中断
   NVIC_SystemReset();//软件复位
 }
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • STM32
    +关注

    关注

    2264

    文章

    10852

    浏览量

    354100
  • 中断处理
    +关注

    关注

    0

    文章

    94

    浏览量

    10945
  • 复位电路
    +关注

    关注

    13

    文章

    320

    浏览量

    44496
  • stm32f1
    +关注

    关注

    1

    文章

    56

    浏览量

    12157
  • HAL库
    +关注

    关注

    1

    文章

    114

    浏览量

    6133
收藏 人收藏

    评论

    相关推荐

    关于GPS定位的那些不看肯定后悔

    关于GPS定位的那些不看肯定后悔
    发表于 09-26 07:11

    深入了解电路噪声的那些

    模拟电子的相关知识学习教材资料——深入了解电路噪声的那些
    发表于 09-27 15:19 0次下载

    关于 STM32 时钟配置的那些

    关于STM32时钟配置的那些
    的头像 发表于 03-08 12:06 5792次阅读

    stm32复位电路工作原理

    stm32复位电路工作原理 相信大家对复位电路已经很熟悉了,复位电路是一种用来使电路恢复到起始状态的电路设备,这次我们来讨论一下stm32
    的头像 发表于 08-07 11:59 3.8w次阅读

    舵机控制那些(附STM32代码!!!)

    舵机控制那些(附STM32代码!!!)
    发表于 12-08 18:51 49次下载
    舵机控制<b class='flag-5'>那些</b><b class='flag-5'>事</b>(附<b class='flag-5'>STM32</b>代码!!!)

    STM32复位来源、以及系统和内核复位区别

    每一块STM32中都有这么一个RCC复位和时钟控制模块。STM32复位为三类:系统复位、电源复位
    发表于 02-10 10:30 6次下载
    <b class='flag-5'>STM32</b><b class='flag-5'>复位</b>来源、以及系统和内核<b class='flag-5'>复位</b>区别

    浅析stm32复位电路方法

    说到复位,我们都不会陌生,系统基本都有一个复位按键。复位的种类有很多:上电复位、掉电复位复位
    发表于 02-11 15:10 45次下载
    浅析<b class='flag-5'>stm32</b><b class='flag-5'>复位</b>电路方法

    stm32复位电路设计

    stm32复位电路设计
    发表于 06-26 09:26 8次下载

    STM32芯片的那些系统级复位功能

    我们知道,STM32芯片里有很多系统级的复位,比方上电复位、欠压复位、看门狗复位、软件复位
    的头像 发表于 10-19 09:06 4980次阅读

    谈谈复位那些

    复位信号几乎是除了时钟信号外最常用的信号了,几乎所有数字系统在上电的时候都会进行复位,这样才能保持设计者确定该系统的系统模式的状态,以便于更好的进行电子设计,并且在任意时刻,确保使用者总能对电路系统进行复位,使电路从初始的状态开
    的头像 发表于 06-02 15:11 1877次阅读
    谈谈<b class='flag-5'>复位</b><b class='flag-5'>那些</b><b class='flag-5'>事</b>

    stm32复位电路如何设计

    1,描述   说到复位,我们都不会陌生,系统基本都有一个复位按键。复位的种类有很多:上电复位、掉电复位
    的头像 发表于 06-22 09:06 2331次阅读

    stm32复位 内核复位和系统复位

    内核复位:它会使STM32内核(Cortex-M)进行复位,而不会影响其外设,如GPIO、TIM、USART、SPI等这些寄存器的复位
    的头像 发表于 08-01 17:21 4544次阅读

    关于MLCC(多层陶瓷电容)替代Film Cap (薄膜电容)的那些

    关于MLCC(多层陶瓷电容)替代Film Cap (薄膜电容)的那些
    的头像 发表于 12-04 17:35 1779次阅读
    有<b class='flag-5'>关于</b>MLCC(多层陶瓷电容)替代Film Cap (薄膜电容)的<b class='flag-5'>那些</b><b class='flag-5'>事</b>

    STM32复位电路用复位芯片和阻容复位电路区别

    STM32是一款广泛使用的微控制器,其复位电路设计对于系统的稳定性和可靠性至关重要。本文将详细介绍STM32复位电路中使用复位芯片和阻容
    的头像 发表于 08-06 10:26 856次阅读

    京准时钟科普:关于北斗卫星同步时钟的那些

    京准时钟科普:关于北斗卫星同步时钟的那些
    的头像 发表于 10-29 09:28 120次阅读
    京准时钟科普:<b class='flag-5'>关于</b>北斗卫星同步时钟的<b class='flag-5'>那些</b><b class='flag-5'>事</b>?