前些天寫程序的時(shí)候,需要做一個(gè)自動(dòng)復(fù)位的功能,也就是當(dāng)收到外部通訊設(shè)備復(fù)位指令時(shí),主設(shè)備立刻執(zhí)行復(fù)位操作。當(dāng)時(shí)是想到的用看門狗實(shí)現(xiàn)。但是覺得似乎不太妥當(dāng),因?yàn)榭撮T狗的復(fù)位是需要一定的時(shí)間。而在這段時(shí)間內(nèi)系統(tǒng)還是處于正常運(yùn)行當(dāng)中,而且所有中斷都會(huì)正常響應(yīng)。這恰好與要實(shí)現(xiàn)的功能南轅北轍。需求是當(dāng)收到復(fù)位指令時(shí),系統(tǒng)停止執(zhí)行后面的所有操作,包含中斷響應(yīng)。所以看門狗無法實(shí)現(xiàn)。
我用的是STM32F103芯片,了解這顆芯片能用來復(fù)位的只有5種,外部復(fù)位、獨(dú)立/窗口看門狗、軟件復(fù)位功耗管理。看來我能用的也就只有軟件復(fù)位了。但是我查了所有STM32F103芯片相關(guān)的資料,還是沒有找到具體的實(shí)現(xiàn)方法,最多是提到過這種復(fù)位寄存器SYSRESETRQ位。不過功夫不負(fù)有心人,我還是找到了線索,STM32F103芯片手冊(cè)中提到這種復(fù)位屬于內(nèi)核部分,于是我翻看了cortex-m3內(nèi)核相關(guān)書藉才找到,在此分享一下,表達(dá)一個(gè)喜悅之情。
共有兩種實(shí)現(xiàn)方法,具體方法實(shí)現(xiàn)如下: CM3允許由軟件觸發(fā)復(fù)位序列。
第一種方法,是通過置位NVIC中應(yīng)用程序中斷與復(fù)位控制寄存器(AIRCR)的VECTRESET位(位偏移:0),如下所示:
LDR R0, =0XE000ED0C ;NVIC AIRCR address
LDR R1, =0X05FA0001 ;置位VECTRESET位,前面的0X5FA是訪問鑰匙、 STR R1, [R0] ;觸發(fā)復(fù)位序列 deadloop
B deadloop ;該死循環(huán)保證后面的指令不可能被執(zhí)行到
這種復(fù)位的作用范圍覆蓋了整個(gè)CM3微控制器中,除了調(diào)試邏輯之外的所有角落,但是它不會(huì)影響到CM3微控制器處部的電路,所以單片機(jī)上的各片上外設(shè)和其他電路都不受到影響。
復(fù)位的第二種方法,置位同一個(gè)寄存器中的SYSRESETREQ位,這種復(fù)位則是會(huì)波及整個(gè)芯片上的電路:它會(huì)使CM3微控制器把送往系統(tǒng)復(fù)位發(fā)生器的請(qǐng)求線置為有效。但是,系統(tǒng)復(fù)位發(fā)生器不是CM3的一部分,而是芯片廠商實(shí)現(xiàn)的,因此,不同的芯片對(duì)此復(fù)位的響應(yīng)也不同。因此讀者需要認(rèn)真 參閱該芯片的規(guī)格書,明白發(fā)生片內(nèi)復(fù)位時(shí),各外設(shè)和功能模塊都會(huì)回到什么狀態(tài),或者有哪些功能模塊受到影響(比如,STM32系列有后備存儲(chǔ)區(qū),該區(qū)就被特殊對(duì)待)。SYSRESETRQ的使用代碼如下面代碼段演示: LDR R0, =0XE000ED0C NVIC AIRCR address
LDR R1, =0X05FA0004 置位SYSRESETRQ,前面的0X05FA是訪問鑰匙 STR R1, [R0] ;觸發(fā)復(fù)位序列 deadloop
B deadloop ;該死循環(huán)保證后面的指令不會(huì)被執(zhí)行到
這里要注意一個(gè)問題:從SYSRESETRQ被置為有效,到復(fù)位發(fā)生器執(zhí)行復(fù)位命令,往往會(huì)有一個(gè)延時(shí)。在些延時(shí)期間內(nèi),處理器仍然可以響應(yīng)中斷請(qǐng)求。但我們的本意往往是要讓此次執(zhí)行到此為止,不要再執(zhí)行任何操作。所以,最好在發(fā)出復(fù)位請(qǐng)求前,先把FAULTMASK置位。
這兩種方法都是對(duì)CM3內(nèi)核寄存器直接操作的,調(diào)試的時(shí)候可以試試看,不過正常情況下,沒事不要瞎玩兒啊!
上一篇:一則STM32f103莫名反復(fù)復(fù)位的經(jīng)驗(yàn)記錄
下一篇:STM32F10xxx支持三種復(fù)位
推薦閱讀
史海拾趣
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- 意法半導(dǎo)體推出用于匹配遠(yuǎn)距離無線微控制器STM32WL33的集成的匹配濾波芯片
- ESP32開發(fā)板連接TFT顯示屏ST7789跳坑記
- 如何讓ESP32支持analogWrite函數(shù)
- LGVL配合FreeType為可變字體設(shè)置字重-ESP32篇
- 使用樹莓派進(jìn)行 ESP32 Jtag 調(diào)試
- ESP32怎么在SPIFFS里面存儲(chǔ)html,css,js文件,以及網(wǎng)頁和arduino的通訊
- ESP32 freeRTOS使用測(cè)試
- API調(diào)用小記(Touchdesigner和ESP32)
- 關(guān)于ESP32/8266使用async-mqtt-client庫的一些基本介紹
- 座椅、天窗、電動(dòng)尾門應(yīng)用 國(guó)產(chǎn)車規(guī)級(jí)高壓霍爾效應(yīng)傳感器推薦
- 突發(fā)!又一車企車機(jī)“崩了”
- 寧德時(shí)代為陳立泉院士頒發(fā)“卓越貢獻(xiàn)獎(jiǎng)”
- 一文速覽吉利雷神 AI 電混 2.0 發(fā)布會(huì)重點(diǎn)
- 2025年1-4月ADAS供應(yīng)商裝機(jī)量排行榜:頭部集中與國(guó)產(chǎn)突圍并存
- 國(guó)內(nèi)飛行汽車無線通信測(cè)試成功,通信安全新突破
- SPAD席卷車載激光雷達(dá)市場(chǎng)
- 大聯(lián)大品佳集團(tuán)推出基于Microchip和ams OSRAM產(chǎn)品的10Base-T1S萬級(jí)像素大燈方案
- 哈曼推出采用三星Neo QLED技術(shù)的全新顯示屏
- Syntiant推出超低功耗汽車AI創(chuàng)新技術(shù) 提升車輛安全性和用戶體驗(yàn)
- 羅姆有獎(jiǎng)直播|從0到1,帶你了解電機(jī)及其驅(qū)動(dòng) 開始報(bào)名啦~
- 省錢、省心的購買租賃方案,讓您不再為預(yù)算煩惱!
- Discover mmWave 走進(jìn) TI 毫米波雷達(dá)世界 快速獲得設(shè)計(jì)技能
- 嵌入式Rust修煉營(yíng):動(dòng)手寫串口燒錄工具和MCU例程,Rust達(dá)人Hunter直播帶你入門Rust
- EEWorld 芯積分兌換年度回饋來襲~多種賺積分捷徑曝光+禮品兌換劇透
- 有獎(jiǎng)直播:艾邁斯歐司朗智慧農(nóng)業(yè)與植物照明
- ADI有獎(jiǎng)下載活動(dòng)之7 可編程邏輯控制器(PLCs)解決方案
- 開發(fā)板芯幣競(jìng)拍,每日一款!今日競(jìng)拍開發(fā)板:大黃蜂開發(fā)板
- ADI有獎(jiǎng)下載活動(dòng)之13升級(jí)版ADI電機(jī)控制解決方案—伺服控制
- CES首日:汽車廠商“爭(zhēng)奇斗艷”拼智能 健康檢測(cè)機(jī)器人受熱捧
- 甘肅:力爭(zhēng)實(shí)現(xiàn)到2020年光伏用戶側(cè)平價(jià)上網(wǎng)
- SMA領(lǐng)跑全球光伏逆變器市場(chǎng)
- 我國(guó)服務(wù)機(jī)器人產(chǎn)業(yè)面臨較大機(jī)遇和可發(fā)展空間
- 天津眾推科技研發(fā)出智能電話機(jī)器人,未來電銷會(huì)被機(jī)器人代替嗎
- STM32F4設(shè)置系統(tǒng)時(shí)鐘源為內(nèi)部HSI
- STM32嵌入式開發(fā)學(xué)習(xí)筆記(一)
- 學(xué)習(xí)下stm32 配置 HSI作為系統(tǒng)時(shí)鐘,但意義不大,一般不這樣
- stm32f103學(xué)習(xí)筆記——關(guān)鍵字extern、static、const
- 京東回應(yīng)神舟起訴:相信法律會(huì)公正解決