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
+关注
关注
2239文章
10673浏览量
348770 -
中断处理
+关注
关注
0文章
92浏览量
10891 -
复位电路
+关注
关注
13文章
308浏览量
44277 -
stm32f1
+关注
关注
1文章
53浏览量
12038 -
HAL库
+关注
关注
1文章
112浏览量
5878
发布评论请先 登录
相关推荐
半导体材料那些事
好像***最近去英国还专程看了华为英国公司的石墨烯研究,搞得国内好多石墨烯材料的股票大涨,连石墨烯内裤都跟着炒作起来了~~小编也顺应潮流聊聊半导体材料那些事吧。
发表于 07-29 06:40
stm32复位电路工作原理
stm32复位电路工作原理 相信大家对复位电路已经很熟悉了,复位电路是一种用来使电路恢复到起始状态的电路设备,这次我们来讨论一下stm32
【STM32学习笔记】技巧2 - STM32的复位类型及区别
最近在项目的时候需要判别STM32的复位类型,网上这部分资料也有许多大神进行总结。但是感觉不是特别深入,因此,小编参考参考了STM32的参考手册进行详细总结了一下。1、STM32的三种
发表于 01-17 12:54
•10次下载
stm32软复位 内核复位和系统复位
内核复位:它会使STM32内核(Cortex-M)进行复位,而不会影响其外设,如GPIO、TIM、USART、SPI等这些寄存器的复位。
评论