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)注
2270文章
10900瀏覽量
356003 -
中斷處理
+關(guān)注
關(guān)注
0文章
94瀏覽量
10976 -
復(fù)位電路
+關(guān)注
關(guān)注
13文章
322瀏覽量
44594 -
stm32f1
+關(guān)注
關(guān)注
1文章
56瀏覽量
12206 -
HAL庫
+關(guān)注
關(guān)注
1文章
121瀏覽量
6235
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論