如何設計在stm32中的復位電路?

2021-01-09 電子發燒友
如何設計在stm32中的復位電路?

胡薇 發表於 2018-08-10 11:33:20

說到復位,我們都不會陌生,系統基本都有一個復位按鍵。復位的種類有很多:上電復位、掉電復位、復位引腳復位、看門狗復位、軟體復位等。本文探討的就是在stm32中復位電路如何設計。

STM32介紹

STM32系列基於專為要求高性能、低成本、低功耗的嵌入式應用專門設計的ARMCortex®-M0,M0+,M3, M4和M7內核在STM32F105和STM32F107互連型系列微控制器之前,意法半導體已經推出STM32基本型系列、增強型系列、USB基本型系列、互補型系列;新系列產品沿用增強型系列的72MHz處理頻率。內存包括64KB到256KB快閃記憶體和 20KB到64KB嵌入式SRAM。

新系列採用LQFP64、LQFP100和LFBGA100三種封裝,不同的封裝保持引腳排列一致性,結合STM32平臺的設計理念,開發人員通過選擇產品可重新優化功能、存儲器、性能和引腳數量,以最小的硬體變化來滿足個性化的應用需求。

stm32復位電路設計

復位電路的作用是為了是系統恢復到初始狀態的,單片機的復位方式也是存在好幾種的:上電復位,系統復位,備份區域復位

上電復位:其產生的條件是,當系統上電、掉電,以及系統從待機模式返回時,發生電源復位。電源復位能夠復位除了備份區域寄存器之外的所有寄存器的狀態。

系統復位:以下任一事件發生時,均能產生一個系統復位:

1. NRST引腳上的低電平(外部復位)

2. 窗口看門狗計數終止(WWDG復位)

3. 獨立看門狗計數終止(IWDG復位)

4. 軟體復位(SW復位)

5. 低功耗管理復位

系統復位能夠復位除時鐘控制寄存器CRS中的復位標誌和備份區域中的寄存器之外的所有寄存器。

備份區域復位:對於備份區域的復位,一種是在軟體復位的時候設定備份區域控制寄存器中的對應位產生的;另一種是當電源和電池都掉電又重新上電時產生的。

平常我們常用的復位方式有兩種,一種是NRST引腳的低電平復位,通過按鍵復位電路給這個引腳一個低電平,讓系統完成復位,另一種大家都知道,那就是上電復位了,有時候是復位電路莫名失效了,有時是剛啟動的時候,雖然用的沒有按鍵復位電路多,不過也算是很常用的一種復位方式了。按鍵復位電路直接給圖了,網上的講解可能把這電路圖都講爛了,我就不費口舌了。

電容充電時間計算:T = 1.1RC = 1.1 * 10000 * 0.0000001 = 0.0011s = 1.1ms

STM32 內核復位 與 系統復位

內核復位與系統復位的區別

本文說的內核是指處理器內核,也就是MPU(Microprocessor Unit)。比如STM32F103,其內核就是Cortex-M3內核。

而這裡的系統就是包含內核和外設,也就是MCU(Microcontroller Unit),對於STM32F103來說,就是Cortex-M3內核+各種外設接口。

內核復位:只復位Cortex-M3處理器,而不復位外設如GPIO、TIM、USART、SPI等的寄存器。

系統復位:即復位Cortex-M3處理器,又復位外設寄存器。

因此,我們常說的復位一般指的是系統復位。

內核復位與系統復位的函數原始碼

本文以Cortex-M3(STM32F103)為例來說明,其他晶片類似。

編寫了4個復位函數,內核復位(C語言)、內核復位(彙編)和系統復位(C語言)、系統復位(彙編):

void NVIC_CoreReset(void); //內核復位(C語言)

void NVIC_CoreReset_a(void); //內核復位(彙編)

void NVIC_SystemReset(void); //系統復位(C語言)

void NVIC_SystemReset_a(void); //系統復位(彙編)

在ST官方庫中的core_cm3.h文件中已經提供了NVIC_SystemReset的C語言原始碼。

Cortex-M3允許由軟體觸發復位序列,用於特殊的調試或維護。在Cortex-M3中,有兩種方法可以實現自我復位。

第一種方法:置位 NVIC 中應用程式中斷與復位控制寄存器(AIRCR)的 VECTRESET 位(位偏移:0)。

NVIC_CoreReset內核復位

這種復位的作用範圍覆蓋了整個Cortex-M3處理器,除了調試邏輯之外的所有角落,但是它不會影響到Cortex-M3處理器外部的任何電路,所以STM32上的各片上外設和其它電路都不受影響。

編寫的NVIC_CoreReset函數C語言源碼:

staTIc __INLINE void NVIC_CoreReset(void)

{

__DSB();

//置位VECTRESET

SCB-》AIRCR = ((0x5FA 《《 SCB_AIRCR_VECTKEY_Pos) |

(SCB-》AIRCR & SCB_AIRCR_PRIGROUP_Msk) |

SCB_AIRCR_VECTRESET_Msk);

__DSB();

while(1);

}彙編版函數源碼:

__asm void NVIC_CoreReset_a(void)

{

LDR R0, =0xE000ED0C

LDR R1, =0x05FA0001 //置位VECTRESET

STR R1, [R0]

deadloop_Core

B deadloop_Core

}

內核復位主要注意:SCB_AIRCR_VECTRESET_Msk和LDR R1, =0x05FA0001,這是和系統復位唯一的區別。

第二種方法:置位 NVIC 中應用程式中斷與復位控制寄存器(AIRCR)的 SYSRESETREQ位(位偏移:2)。

NVIC_SysReset系統復位

系統復位是置位同一個寄存器中的SYSRESETREQ位。這種復位則會波及整個晶片上的電路:它會使Cortex-M3處理器把送往系統復位發生器的請求線置為有效。但是系統復位發生器不是Cortex-M3的一部分,而是由晶片廠商實現,因此不同的晶片對此復位的響應也不同。因此,讀者需要認真參閱晶片規格書,明白當發生片內復位時,各外設和功能模塊都會回到什麼樣的初始狀態,或者有哪些功能模塊不受影響(比如,STM32系列的晶片有後備存儲區,該區就被特殊對待)。

大多數情況下,復位發生器在響應 SYSRESETREQ 時,它也會同時把Cortex-M3處理器的系統復位信號(SYSRESETn)置為有效。通常,SYSRESETREQ不應復位調試邏輯。

這裡有一個要注意的問題:從SYSRESETREQ被置為有效到復位發生器執行復位命令,往往會有一個延時。在此延時期間,處理器仍然可以響應中斷請求。但我們的本意往往是要讓此次執行到此為止,不要再做任何其它事情了。所以,最好在發出復位請求前,先把FAULTMASK置位。可以採用下列彙編語句:__disable_fault_irq();。

core_cm3.h中提供的NVIC_SystemReset函數C語言源碼:

staTIc __INLINE void NVIC_SystemReset(void)

{

SCB->AIRCR = ((0x5FA << SCB_AIRCR_VECTKEY_Pos) |

(SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) |

SCB_AIRCR_SYSRESETREQ_Msk);

__DSB(); /* Ensure compleTIon of memory access /

while(1); /* wait unTIl reset */

}

彙編版函數:

__asm void NVIC_SysReset_a(void)

{

LDR R0, =0xE000ED0C

LDR R1, =0x05FA0004

STR R1, [R0]

deadloop_Sys

B deadloop_Sys

}

結語

某些系統允許復位,但對外設又有特殊要求:某一個IO狀態不能因為復位而改變,某一個定時器計數器不能改變等。例子:A系統通過一個IO控制B系統的電源,而這個IO置高時才開啟B系統的電源。

正常工作過程中,B系統只有收到A系統關機命令任務才會進行關機(也就是說不能掉電關機),而A系統在工作過程中有復位的需求。

這個時候如果使用常規的復位方式,就會復位IO,不符合要求。如果有一種方式只復位內核而不復位外設就好了。

關於stm32復位電路相關介紹就到這了,希望通過本文能讓你對stm32復位電路有更深的認識,如有不足之處還望海涵。

打開APP閱讀更多精彩內容

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容圖片侵權或者其他問題,請聯繫本站作侵刪。 侵權投訴

相關焦點

  • 單片機復位電路原理是什麼 單片機復位電路有哪些?
    復位電路,顧名思義,是一種使電路恢復到起始狀態的的設備。那麼問題來了,單片機為什麼需要復位電路呢?單片機復位電路原理是什麼呢?單片機復位電路有哪些種呢?相同之處在於它們都用於使儀器回到起始狀態;不同之處在於,計算機清零按鍵的啟動手段為手動式,而復位電路有三種啟動手段可供選擇,其一是在電路通電時刻立即進行復位操作,其二是在需要復位時手動操作,其三是根據程序或電路運行的需要自動進行操作。對於單片機而言,復位功能是必須存在的,因為單片機的每一次啟動都需要復位,以使CPU及系統各個部件都處於初始狀態,並從初始狀態開始進行工作。
  • STM32學習—如何選擇各個電路部分的主要晶片
    STM32學習—如何選擇各個電路部分的主要晶片 李倩 發表於 2018-03-27 09:59:30 電路設計的基本過程一般是這樣的:需求分析——元件選型——原理圖設計——PCB設計——焊接調試。
  • STM32復位來源,Cotrex-M系統與內核復位區別
    | strongerHuang微信公眾號 | 嵌入式專欄最近有朋友問了些關於STM32復位的問題,今天結合前面文章再次總結一下復位相關知識。在STM32RCC模塊中,有這麼一個寄存器:控制/狀態寄存器 (RCC_CSR):這個寄存器就會記錄各種復位的狀態,我們直接讀取這個寄存器(庫函數有讀寄存器接口)就能知道是什麼引起的復位。
  • 單片機復位電路原理是腫麼樣的呢???
    導讀:復位電路,顧名思義,是一種使電路恢復到起始狀態的的設備。那麼問題來了,單片機為什麼需要復位電路呢?單片機復位電路原理是什麼呢?單片機復位電路有哪些種呢?
  • 劉堅強電子元器件電路基礎,電容復位電路,電子電路,看懂電路圖
    復位電路概述大家都知道,復位信號是驅動控制電路工作的必需條件之一,這個為微處理器提供復位信號的復位電路有的由復位晶片組成,也有的是由電容等分立元件組成。電容復位電路實物我們這節課學習的電容復位電路,說的就是由電容等元件組成的復位電路,通過電容的充放電來產生復位信號。U401是主控晶片(如圖2-7-1所示)。
  • 朋友遇到一個電路,單片機復位就關機的問題,我這樣修改了電路
    朋友在設計電路時,遇到這樣一個問題。電路在工作時,單片機復位後,電路就斷電關機,需要重新長按鍵才能開機。但是這不是他想要的,他設計的目的是,長按按鍵開關機,單片機復位時,電路不能斷電關機。開關機電路如下所示。 分析上圖的電路工作原理。
  • RC電路用作晶片復位電路原理
    通過復位引腳對晶片(如STM32103)進行復位要滿足兩點[具體要求以晶片的手冊為準]:保持足夠長的時間(具體時間可查看其手冊)Figure3. RC電路用於復位電路圖[1]當3.3v電源加到圖示位置時,RC電路導通,nRST與地的電位差為電容與地的電位差。
  • avr單片機和stm32區別與優缺點分析
    在avr中,沒有像51系列的數據指針DPTR,而是由X(由 R26、R27組成)、Y(由R28、R29組成)、Z(由R30、R31組成)三個16位的寄存器來完成數據指針的功能(相當於有三組DPTR),而且 還能作後增量或先減量等的運行,而在51系列中,所有的邏輯運算都必須在A中進行;而avr卻可以在任兩個寄存器之間進行,省去了在A中的來回折騰,這些 都比51系列出色些   2. avr
  • stm32與pic單片機比較_哪個好
    6-64KB的SRAM存儲器   3、時鐘、復位和電源管理:2.0-3.6V的電源供電和I/O接口的驅動電壓。POR、PDR和可編程的電壓探測器(PVD)。4-16MHz的晶振。內嵌出廠前調校的8MHz RC振蕩電路。內部40 kHz的RC振蕩電路。用於CPU時鐘的PLL。帶校準用於RTC的32kHz的晶振   4、調試模式:串行調試(SWD)和JTAG接口。
  • 單片機高電平和低電平復位電路
    對初學51單片機的人來說,可能不太能理解復位電路,復位電路有高電平復位和低電平復位兩種,C51是高電平復位,現在一般的MCU都是低電平復位。 左圖是高電平復位,右圖是低電平復位。
  • 單片機最小系統解析(電源、晶振和復位電路)
    我們在學習過程中,很多指標都是直接用的概念指標,比如我們說 +5 V 代表1,GND 代表0等等。但在實際電路中的電壓值並不是完全精準的,那這些指標允許範圍是什麼呢?隨著我們所學的內容不斷增多,大家要慢慢培養一種閱讀數據手冊的能力。
  • ucosii在stm32上的移植詳解1
    3.8 復位序列 0x00000000 MSP初值 0x00000004 PC初值 復位向量chapter7 異常7.1 異常類型 分為系統異常(編號1-15)和外部中斷(大於15)7.2 優先級 CM3支持3個固定的高優先級和多達256級的可編程優先級。
  • 同步異步復位與亞穩態可靠性設計
    異步復位相比同步復位:  1. 通常情況下(已知復位信號與時鐘的關係),最大的缺點在於異步復位導致設計變成了異步時序電路,如果復位信號出現毛刺,將會導致觸發器的誤動作,影響設計的穩定性。  2. 同時,如果復位信號與時鐘關係不確定,將會導致亞穩態情況的出現。下面先給出一個例子,然後就亞穩態進行重點討論。
  • 可用於智慧型手機和平板電腦設計中的硬體智能復位方案
    為了能否延伸待機時間,內置電池的設計變得越來越普及。這是因為鋰電池的一半體積是由其結構件所佔據的,如果電池內置於智慧型手機和平板電腦機身中,就可以節省鋰電池的結構件體積,從而在相同乃至更大的體積上大大提高電池的容量。如此一來,電池的容量確實得到了大幅度增加,伴隨著也產生了一個新的問題——如果智慧型手機和平板電腦在應用過程中發生軟體系統卡機的情況,如何進行系統的復位操作?
  • stm32 USART 串口通信操作寄存器+庫函數
    stm32的最多可以提供5路串口,有分數波特率發生器、支持同步單線通信和半雙工單線通信、具有DMA等。使用USART時,stm32的I/O口經RS232電平轉換電路 和電腦的串口連接。串口使用只需要開始串口時鐘,設置相應的I/O口模式,配置波特率、數據位長度、奇偶校驗位等信息就可以使用了。
  • LED智能照明系統電路模塊設計 —電路圖天天讀(73)
    隧道照明中心控制器硬體設計   硬體設計的任務是根據系統的設計要求,在所選定的微處理器晶片和其他元器件的基礎上,設計出系統的電路原理圖,還包括結構設計、印製板設計等。在設計完成後進行試驗,以便對其不合理的部分進行修正,並最終確定硬體設計方案和完成印製電路板。
  • 電路設計中如何防止靜電放電?
    這是一種電路設計挑戰,因為需要保證系統承受住ESD的衝擊,之後仍能正常工作,更好的情況是經過ESD事件後不發生用戶可覺察的故障。 與人們的常識相反,設計人員完全可以讓系統在經過ESD事件後不發生故障並仍能繼續運行。將這個目標謹記在心,下面讓我們更好地理解ESD衝擊時到底發生了什麼,然後介紹如何設計正確的系統架構來應對ESD。
  • STM32單片機的PSAM卡驅動模塊設計
    硬體設計  2.1 PSAM卡電路設計  2.1.1 PSAM卡電源切換模塊  ISO7816 協議裡規定2種使用較多的,PSAM卡的類別(A類、B類),A類需要提供5 V電壓,B類需要提供3V電壓,為了保證對於兩種類別卡的兼容性,要求設計的讀寫器,可以提供選擇5V或者3 V的電壓。於是本論文設計了如圖2所示的電源切換模塊。
  • wifi神器ESP8266自動下載電路設計
    ESP8266在燒寫程序時也需要手動設置模式,STM32的ISP自動下載電路都有了,那麼ESP8266有沒有自動下載電路呢?答案是有的。下面來分析。 自動下載電路設計 ESP8266下載過程中發現每次都需要去設置GPIO0的狀態,如何實現自動給實現GPIO0電平狀態的切換呢?看下面的電路。
  • FPGA設計的高速FIFO電路技術
    本文主要介紹高速FIFO電路在數據採集系統中的應用,相關電路主要有高速A/D轉換器、FPGA、SDRAM存儲器等。圖1為本方案的結構框圖。在大容量高速採集系統項目的開發過程中,FPGA作為可編程邏輯器件,設計靈活、可操作性強,是高速數字電路設計的核心器件。