0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學(xué)習在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區
會(huì )員中心
創(chuàng )作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內不再提示

關(guān)于STM32復位的那些事

冬至子 ? 來(lái)源:阿偉玩電子 ? 作者:Aweil ? 2023-11-24 15:23 ? 次閱讀

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庫中又進(jìn)行了封裝,在stm32f4xx_hal_cortex.c中,調用上面和下面兩個(gè)函數效果是一樣的。

/**
  * @brief  Initiates a system reset request to reset the MCU.
  * @retval None
  */void HAL_NVIC_SystemReset(void){
  /* System Reset */
  NVIC_SystemReset();}

禁止可屏蔽中斷庫函數:

__set_FAULTMASK(1);

參考網(wǎng)上一些博主說(shuō)的,在調用復位函數和真正復位之間還有一段延遲,在這段時(shí)間單片機還是可以正常處理中斷等程序的,為了避免這種情況,應該把相應的中斷都屏蔽掉,這里會(huì )用到下面這個(gè)中斷屏蔽相關(guān)的函數;

可以注意到這些函數名在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的權威指南中可以看到這個(gè)寄存器的功能就是禁止所有的 可屏蔽中斷 ,如下:

圖片

總結

所以一般如果需要軟復位只要調用上面兩個(gè)庫函數即可:

/*
 *函數功能:STM32軟復位函數
 */
 void Stm32_SoftReset(void)
 {
   __set_FAULTMASK(1);//禁止所有的可屏蔽中斷
   NVIC_SystemReset();//軟件復位
 }
聲明:本文內容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權轉載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習之用,如有內容侵權或者其他違規問(wèn)題,請聯(lián)系本站處理。 舉報投訴
  • STM32
    +關(guān)注

    關(guān)注

    2247

    文章

    10693

    瀏覽量

    349920
  • 中斷處理
    +關(guān)注

    關(guān)注

    0

    文章

    94

    瀏覽量

    10908
  • 復位電路
    +關(guān)注

    關(guān)注

    13

    文章

    308

    瀏覽量

    44361
  • stm32f1
    +關(guān)注

    關(guān)注

    1

    文章

    54

    瀏覽量

    12089
  • HAL庫
    +關(guān)注

    關(guān)注

    1

    文章

    112

    瀏覽量

    5941
收藏 人收藏

    評論

    相關(guān)推薦

    半導體材料那些

    好像***最近去英國還專(zhuān)程看了華為英國公司的石墨烯研究,搞得國內好多石墨烯材料的股票大漲,連石墨烯內褲都跟著(zhù)炒作起來(lái)了~~小編也順應潮流聊聊半導體材料那些吧。
    發(fā)表于 07-29 06:40

    關(guān)于GPS定位的那些不看肯定后悔

    關(guān)于GPS定位的那些不看肯定后悔
    發(fā)表于 09-26 07:11

    STM32F7與STM32F4的復位序列比較

    STM32F7與STM32F4的復位序列比較
    發(fā)表于 12-08 11:52 ?0次下載

    STM32復位來(lái)源 以及系統和內核復位區別

    STM32復位來(lái)源、以及系統和內核復位區別
    的頭像 發(fā)表于 02-28 17:13 ?7300次閱讀

    關(guān)于 STM32 時(shí)鐘配置的那些

    關(guān)于STM32時(shí)鐘配置的那些
    的頭像 發(fā)表于 03-08 12:06 ?5547次閱讀

    CM3(STM32) 內核復位與系統復位區別及應用

    CM3(STM32)內核復位與系統復位區別及應用
    的頭像 發(fā)表于 03-20 09:43 ?4435次閱讀
    CM3(<b class='flag-5'>STM32</b>) 內核<b class='flag-5'>復位</b>與系統<b class='flag-5'>復位</b>區別及應用

    stm32復位電路工作原理

    stm32復位電路工作原理 相信大家對復位電路已經(jīng)很熟悉了,復位電路是一種用來(lái)使電路恢復到起始狀態(tài)的電路設備,這次我們來(lái)討論一下stm32
    的頭像 發(fā)表于 08-07 11:59 ?3.7w次閱讀

    STM32復位電路

    **STM32復位電路**
    發(fā)表于 12-24 19:28 ?24次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>復位</b>電路

    STM32學(xué)習筆記】技巧2 - STM32復位類(lèi)型及區別

    最近在項目的時(shí)候需要判別STM32復位類(lèi)型,網(wǎng)上這部分資料也有許多大神進(jìn)行總結。但是感覺(jué)不是特別深入,因此,小編參考參考了STM32的參考手冊進(jìn)行詳細總結了一下。1、STM32的三種
    發(fā)表于 01-17 12:54 ?10次下載
    【<b class='flag-5'>STM32</b>學(xué)習筆記】技巧2 - <b class='flag-5'>STM32</b>的<b class='flag-5'>復位</b>類(lèi)型及區別

    STM32復位來(lái)源、以及系統和內核復位區別

    每一塊STM32中都有這么一個(gè)RCC復位和時(shí)鐘控制模塊。STM32復位為三類(lèi):系統復位、電源復位
    發(fā)表于 02-10 10:30 ?6次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>復位</b>來(lái)源、以及系統和內核<b class='flag-5'>復位</b>區別

    淺析stm32復位電路方法

    說(shuō)到復位,我們都不會(huì )陌生,系統基本都有一個(gè)復位按鍵。復位的種類(lèi)有很多:上電復位、掉電復位、復位
    發(fā)表于 02-11 15:10 ?45次下載
    淺析<b class='flag-5'>stm32</b><b class='flag-5'>復位</b>電路方法

    stm32復位電路設計

    stm32復位電路設計
    發(fā)表于 06-26 09:26 ?8次下載

    STM32芯片的那些系統級復位功能

    我們知道,STM32芯片里有很多系統級的復位,比方上電復位、欠壓復位、看門(mén)狗復位、軟件復位、
    的頭像 發(fā)表于 10-19 09:06 ?4413次閱讀

    stm32復位電路如何設計

    1,描述 ? 說(shuō)到復位,我們都不會(huì )陌生,系統基本都有一個(gè)復位按鍵。復位的種類(lèi)有很多:上電復位、掉電復位、
    的頭像 發(fā)表于 06-22 09:06 ?1861次閱讀

    stm32復位 內核復位和系統復位

    內核復位:它會(huì )使STM32內核(Cortex-M)進(jìn)行復位,而不會(huì )影響其外設,如GPIO、TIM、USART、SPI等這些寄存器的復位。
    的頭像 發(fā)表于 08-01 17:21 ?3668次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看