[其他ST产品] 软件复位相关知识小记

[复制链接]
986|18
 楼主| 鱿鱼丝 发表于 2023-9-29 10:48 | 显示全部楼层 |阅读模式
硬件复位

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


194965163af0415e2.png



 楼主| 鱿鱼丝 发表于 2023-9-29 10:48 | 显示全部楼层
软件复位
软件复位库函数:NVIC_SystemReset();
STM32F1XX系列中,复位函数在core_cm3.h文件中:
  1. /**
  2. * [url=home.php?mod=space&uid=247401]@brief[/url]  Initiate a system reset request.
  3. *
  4. * Initiate a system reset request to reset the MCU
  5. */
  6. static __INLINE void NVIC_SystemReset(void)
  7. {
  8.   SCB->AIRCR  = ((0x5FA << SCB_AIRCR_VECTKEY_Pos)      |
  9.                  (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) |
  10.                  SCB_AIRCR_SYSRESETREQ_Msk);                   /* Keep priority group unchanged */
  11.   __DSB();                                                     /* Ensure completion of memory access */              
  12.   while(1);                                                    /* wait until reset */
  13. }
 楼主| 鱿鱼丝 发表于 2023-9-29 10:49 | 显示全部楼层
软件复位
软件复位库函数:NVIC_SystemReset();
STM32F1XX系列中,复位函数在core_cm3.h文件中
  1. /**
  2. * @brief  Initiate a system reset request.
  3. *
  4. * Initiate a system reset request to reset the MCU
  5. */
  6. static __INLINE void NVIC_SystemReset(void)
  7. {
  8.   SCB->AIRCR  = ((0x5FA << SCB_AIRCR_VECTKEY_Pos)      |
  9.                  (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) |
  10.                  SCB_AIRCR_SYSRESETREQ_Msk);                   /* Keep priority group unchanged */
  11.   __DSB();                                                     /* Ensure completion of memory access */              
  12.   while(1);                                                    /* wait until reset */
  13. }
 楼主| 鱿鱼丝 发表于 2023-9-29 10:49 | 显示全部楼层
STM32F4XX系列中,复位函数在core_cm4.h文件中:

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

  13.   for(;;)                                                           /* wait until reset */
  14.   {
  15.     __NOP();
  16.   }
  17. }
 楼主| 鱿鱼丝 发表于 2023-9-29 10:49 | 显示全部楼层
在HAL库中又进行了封装,在stm32f4xx_hal_cortex.c中,调用上面和下面两个函数效果是一样的。
  1. /**
  2.   * @brief  Initiates a system reset request to reset the MCU.
  3.   * @retval None
  4.   */
  5. void HAL_NVIC_SystemReset(void)
  6. {
  7.   /* System Reset */
  8.   NVIC_SystemReset();
  9. }
 楼主| 鱿鱼丝 发表于 2023-9-29 10:51 | 显示全部楼层
禁止可屏蔽中断库函数:__set_FAULTMASK(1);
参考网上一些博主说的,在调用复位函数和真正复位之间还有一段延迟,在这段时间单片机还是可以正常处理中断等程序的,为了避免这种情况,应该把相应的中断都屏蔽掉,这里会用到下面这个中断屏蔽相关的函数;
 楼主| 鱿鱼丝 发表于 2023-9-29 10:51 | 显示全部楼层
可以注意到这些函数名在M3和M4中都是一样的,M3中函数的定义在core_cm3.h中,如下:
  1. /**
  2. * @brief  Set the Fault Mask value
  3. *
  4. * @param  faultMask  faultMask value
  5. *
  6. * Set the fault mask register
  7. */
  8. static __INLINE void __set_FAULTMASK(uint32_t faultMask)
  9. {
  10.   register uint32_t __regFaultMask       __ASM("faultmask");
  11.   __regFaultMask = (faultMask & 1);
  12. }
 楼主| 鱿鱼丝 发表于 2023-9-29 10:52 | 显示全部楼层
在M3的权威指南中可以看到这个寄存器的功能就是禁止所有的可屏蔽中断,如下:
7996865163bd3549f5.png
 楼主| 鱿鱼丝 发表于 2023-9-29 10:52 | 显示全部楼层
总结
所在一般如果需要软复位只要调用上面两个库函数即可:
  1. /*
  2. *函数功能:STM32软复位函数
  3. */
  4. void Stm32_SoftReset(void)
  5. {
  6.    __set_FAULTMASK(1);//禁止所有的可屏蔽中断
  7.    NVIC_SystemReset();//软件复位
  8. }
帛灿灿 发表于 2024-9-11 08:11 | 显示全部楼层

无法提供开关电源所需的脉冲电流
Bblythe 发表于 2024-9-11 09:14 | 显示全部楼层

影响控制IC
周半梅 发表于 2024-9-11 11:10 | 显示全部楼层

电源内部都有四个电流环路
Pulitzer 发表于 2024-9-11 12:13 | 显示全部楼层

作为电路的共同电位参考点
童雨竹 发表于 2024-9-11 14:09 | 显示全部楼层

传送直流信号的引线
Wordsworth 发表于 2024-9-11 15:12 | 显示全部楼层

Buck(或降压)变换器功率部分布局
Clyde011 发表于 2024-9-11 16:15 | 显示全部楼层

减小滤波电容的等效串联电阻(ESR)
公羊子丹 发表于 2024-9-11 17:08 | 显示全部楼层

MinUnit 是一个 用 C 语言编写的极其简单的单元测试框架
万图 发表于 2024-9-11 18:11 | 显示全部楼层

功率开关和整流器的交流电流环路包含非常高的PWM开关电源典型的梯形电流波形
Uriah 发表于 2024-9-11 19:14 | 显示全部楼层

通过电容方式耦合到不同层上邻近的引线上
您需要登录后才可以回帖 登录 | 注册

本版积分规则

47

主题

480

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部