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
+關注
關注
2266文章
10871瀏覽量
354796 -
中斷處理
+關注
關注
0文章
94瀏覽量
10958 -
復位電路
+關注
關注
13文章
322瀏覽量
44536 -
stm32f1
+關注
關注
1文章
56瀏覽量
12184 -
HAL庫
+關注
關注
1文章
114瀏覽量
6174
發布評論請先 登錄
相關推薦
stm32復位電路工作原理
stm32復位電路工作原理 相信大家對復位電路已經很熟悉了,復位電路是一種用來使電路恢復到起始狀態的電路設備,這次我們來討論一下stm32
舵機控制那些事(附STM32代碼!?。。?/a>
舵機控制那些事(附STM32代碼?。。。?/div>
發表于 12-08 18:51
?49次下載
STM32復位來源、以及系統和內核復位區別
每一塊STM32中都有這么一個RCC復位和時鐘控制模塊。STM32的復位為三類:系統復位、電源復位
發表于 02-10 10:30
?6次下載
談談復位那些事
復位信號幾乎是除了時鐘信號外最常用的信號了,幾乎所有數字系統在上電的時候都會進行復位,這樣才能保持設計者確定該系統的系統模式的狀態,以便于更好的進行電子設計,并且在任意時刻,確保使用者總能對電路系統進行復位,使電路從初始的狀態開
stm32軟復位 內核復位和系統復位
內核復位:它會使STM32內核(Cortex-M)進行復位,而不會影響其外設,如GPIO、TIM、USART、SPI等這些寄存器的復位。
STM32復位電路用復位芯片和阻容復位電路區別
STM32是一款廣泛使用的微控制器,其復位電路設計對于系統的穩定性和可靠性至關重要。本文將詳細介紹STM32復位電路中使用復位芯片和阻容
評論