www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 公眾號精選 > strongerHuang

搞單片機開發(fā)的小伙伴應(yīng)該都遇到過MCU復(fù)位的情況,可能看似什么都正常,但單片機就是容易復(fù)位,到底什么原因呢?


每一塊處理器都有復(fù)位的功能,不同處理器復(fù)位的類型可能有差異,引起復(fù)位的原因也可能有多種。


STM32的復(fù)位功能非常強大,可通過軟件、硬件和一些事件觸發(fā)系統(tǒng)復(fù)位,而且通過其復(fù)位狀態(tài)標志可分析復(fù)位原因。該部分位于STM32的RCC(Reset and Clock Control)模塊。


STM32 復(fù)位介紹


對于STM32來說,復(fù)位通常分為三種類型:系統(tǒng)復(fù)位、電源復(fù)位和備份域復(fù)位。本文結(jié)合STM32F4描述系統(tǒng)和電源復(fù)位的內(nèi)容。


1. 系統(tǒng)復(fù)位

除了RCC的復(fù)位標志和備份域中的寄存器外,系統(tǒng)復(fù)位會將其它全部寄存器都復(fù)位為復(fù)位值。


產(chǎn)生系統(tǒng)復(fù)位事件:

  • NRST 引腳低電平
  • 窗口看門狗計數(shù)結(jié)束
  • 獨立看門狗計數(shù)結(jié)束
  • 軟件復(fù)位
  • 低功耗管理復(fù)位

2. 電源復(fù)位除備份域內(nèi)的寄存器以外,電源復(fù)位會將其它全部寄存器設(shè)置為復(fù)位值。
產(chǎn)生電源復(fù)位條件:
  • 上電/掉電復(fù)位或欠壓復(fù)位
  • 在退出待機模式時

注:份域具有特定的復(fù)位,其復(fù)位僅作用于備份域本身(本文暫不講述備份域復(fù)位)。


3. 復(fù)位電路簡圖



由上圖可以看出來,NRST引腳、看門狗等各種事件最終都能引起系統(tǒng)復(fù)位。


STM32 內(nèi)核和系統(tǒng)復(fù)位


上章節(jié)站在STM32整體層面講述了產(chǎn)生復(fù)位的多種事件,本章節(jié)進一步描述STM32的內(nèi)核和系統(tǒng)復(fù)位。


STM32由內(nèi)核(如:Cortex-M4)和各種片內(nèi)外設(shè)(如UART)資源組成,其中軟件復(fù)位可指定是內(nèi)核復(fù)位還是系統(tǒng)復(fù)位。


(圖片來源網(wǎng)絡(luò))



1. 內(nèi)核復(fù)位

Cortex-M內(nèi)核文檔中大概有這樣的描述:通過設(shè)置 NVIC 中應(yīng)用程序中斷與復(fù)位控制寄存器(AIRCR)的VECTRESET 位,可只復(fù)位處理器內(nèi)核而不復(fù)位其它片上設(shè)施。


也就是說,這樣操作只復(fù)位Cortex-M內(nèi)核,不會復(fù)位UART這些片內(nèi)外設(shè)。


內(nèi)核復(fù)位函數(shù)(參考內(nèi)核代碼修改而來

void NVIC_CoreReset(void){ __DSB(); SCB->AIRCR  = ((0x5FA << SCB_AIRCR_VECTKEY_Pos) | (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | SCB_AIRCR_VECTRESET_Msk);       //置位 VECTRESET __DSB(); while(1) { __NOP(); }}


2. 系統(tǒng)復(fù)位

軟件復(fù)位中的系統(tǒng)復(fù)位操作的寄存器位(SYSRESETREQ)不同,復(fù)位的對象為整個芯片(除后備區(qū)域。


系統(tǒng)復(fù)位函數(shù)

void NVIC_SysReset(void){ __DSB(); SCB->AIRCR  = ((0x5FA << SCB_AIRCR_VECTKEY_Pos) |  (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) |  SCB_AIRCR_SYSRESETREQ_Msk);     //置位 SYSRESETREQ __DSB(); while(1) { __NOP(); }}


STM32 復(fù)位來源


為了方便軟件工程師調(diào)試和查找(復(fù)位)問題,STM32設(shè)計有個狀態(tài)寄存器保存了各種復(fù)位來源的狀態(tài)。


如下圖所示(具體請查閱參考手冊):



STM32 引起異常復(fù)位的原因


上面講述了引起復(fù)位的事件有多種,本章節(jié)將結(jié)合實際應(yīng)用,描述常見引起復(fù)位的原因及解決辦法。


原因一:NRST引腳電平被拉低引起復(fù)位

有些特殊環(huán)境,特別是大型工廠,外界或內(nèi)部會使電源產(chǎn)生干擾信號,使STM32的NRST引腳電平被拉低,從而導(dǎo)致系統(tǒng)復(fù)位。


分析原因:NRST引腳電平拉低20us就會引起系統(tǒng)復(fù)位,電源上一個紋波,或者外部靜電都會引起電源被拉低20us。


解決辦法:電源濾波、使用隔離電源、添加屏蔽措施等。


原因二:欠壓引起復(fù)位

有些產(chǎn)品在設(shè)計之初沒有綜合計算負載(與STM32同電源,因負載過大,使其欠壓,從而導(dǎo)致復(fù)位。


分析原因:STM32除了上電和掉電復(fù)位之外,絕大部分STM32還有一個欠壓復(fù)位,當(dāng)電源電壓 (VDD) 降至所選 VBOR 閾值以下時,芯片將復(fù)位。


解決辦法:選擇負載更大的電源、通過軟件配置合理的欠壓值VBOR。


原因三:數(shù)字、模擬電源地壓差引起復(fù)位

有工程師將VSS 和 VSSA之間使用一個幾歐,甚至幾十歐的電阻連接,有時候(有大電流經(jīng)過地線)就會因為電源地的壓差導(dǎo)致芯片(電源)復(fù)位。


分析原因:我們比較關(guān)注 VDD 和 VDDA 的關(guān)系,但忽略了 VSSA 和 VSS 壓差需要小于 50mV這一點(具體可以看數(shù)據(jù)手冊)。如果有大電流的情況,則會引起電源地存在壓差。


解決辦法:盡量使用完全連接地的方式處理,比如0歐電阻,或者隔離電源。


原因四:看門狗超時喂狗引起復(fù)位

有不少工程師設(shè)計低功耗產(chǎn)品時,使用了看門狗,但是他們往往忘記了芯片睡眠模式不能停止喂狗,從而導(dǎo)致看門狗復(fù)位。


分析原因:STM32進入睡眠之后,看門狗依然繼續(xù)在工作,如果不及時喂狗,芯片會產(chǎn)生看門狗復(fù)位。


解決辦法:進入睡眠之前設(shè)置更長的喂狗時間,同時不定期喚醒芯片進行喂狗。

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
關(guān)閉