1. 硬件復(fù)位
硬件復(fù)位電路如下圖,直接將RESET引腳拉低即可,如下:

2. 軟件復(fù)位
軟件復(fù)位庫函數(shù):
NVIC_SystemReset();
STM32F1XX系列中,復(fù)位函數(shù)在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系列中,復(fù)位函數(shù)在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庫中又進(jìn)行了封裝,在stm32f4xx_hal_cortex.c中,調(diào)用上面和下面兩個(gè)函數(shù)效果是一樣的。
/**
* @brief Initiates a system reset request to reset the MCU.
* @retval None
*/void HAL_NVIC_SystemReset(void){
/* System Reset */
NVIC_SystemReset();}
禁止可屏蔽中斷庫函數(shù):
__set_FAULTMASK(1);
參考網(wǎng)上一些博主說的,在調(diào)用復(fù)位函數(shù)和真正復(fù)位之間還有一段延遲,在這段時(shí)間單片機(jī)還是可以正常處理中斷等程序的,為了避免這種情況,應(yīng)該把相應(yīng)的中斷都屏蔽掉,這里會(huì)用到下面這個(gè)中斷屏蔽相關(guān)的函數(shù);
可以注意到這些函數(shù)名在M3和M4中都是一樣的,M3中函數(shù)的定義在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的權(quán)威指南中可以看到這個(gè)寄存器的功能就是禁止所有的 可屏蔽中斷 ,如下:

總結(jié)
所以一般如果需要軟復(fù)位只要調(diào)用上面兩個(gè)庫函數(shù)即可:
/*
*函數(shù)功能:STM32軟復(fù)位函數(shù)
*/
void Stm32_SoftReset(void)
{
__set_FAULTMASK(1);//禁止所有的可屏蔽中斷
NVIC_SystemReset();//軟件復(fù)位
}
-
STM32
+關(guān)注
關(guān)注
2309文章
11162瀏覽量
373417 -
中斷處理
+關(guān)注
關(guān)注
0文章
96瀏覽量
11480 -
復(fù)位電路
+關(guān)注
關(guān)注
13文章
332瀏覽量
45863 -
stm32f1
+關(guān)注
關(guān)注
1文章
60瀏覽量
12935 -
HAL庫
+關(guān)注
關(guān)注
1文章
121瀏覽量
7630
發(fā)布評(píng)論請(qǐng)先 登錄
stm32復(fù)位電路工作原理
STM32復(fù)位來源、以及系統(tǒng)和內(nèi)核復(fù)位區(qū)別
淺析stm32復(fù)位電路方法
STM32芯片的那些系統(tǒng)級(jí)復(fù)位功能
談?wù)?b class='flag-5'>復(fù)位那些事
關(guān)于STM32復(fù)位的那些事
評(píng)論