引言
有客戶反映,STM32G071RBT6 在使用 STM32CubeProgrammer 燒錄完程序后只能運(yùn)行一次,復(fù)位后,程序無(wú)法運(yùn)行,如果掉電后重新上電,程序恢復(fù)正常。
問(wèn)題描述
根據(jù)客戶描述,該問(wèn)題可通過(guò)以下步驟復(fù)現(xiàn):
2.1. 測(cè)試代碼的功能流程圖
準(zhǔn)備測(cè)試代碼 App1 和 App2:
![“STM32G0](https://file1.elecfans.com/web2/M00/A4/A3/wKgaomUD7UuAcdYtAAC6SBmpLpU213.png)
![“STM32G0](https://file1.elecfans.com/web2/M00/A3/36/wKgZomUD7U2AL_IHAACTi1YlxyE967.png)
2.2. 問(wèn)題復(fù)現(xiàn)步驟
操作步驟
(1) 在 STM32CubeProgrammer 中下載
應(yīng)用程序 App1(如圖 3),并設(shè)置 RDP=1(如圖 4);然后斷開(kāi) STM32CubeProgrammer 的連接,板子斷電后重新上電;
![“STM32G0](https://file1.elecfans.com/web2/M00/A4/A3/wKgaomUD7U-AN1xNAAN_4GG3Co0862.png)
![“STM32G0](https://file1.elecfans.com/web2/M00/A4/A3/wKgaomUD7VCACPPzAAJcTGYpi4o317.png)
(2) 根據(jù) log 提示(如圖 5),按下用戶按鍵,板子會(huì)在 RDP 降級(jí)的過(guò)程中,產(chǎn)生全片擦除的動(dòng)作,等待 10s,確保芯片擦除完成后從板子再斷電并重新上電;
![“STM32G0](https://file1.elecfans.com/web2/M00/A3/36/wKgZomUD7VGAYt9pAALNqtYZQpg163.png)
(3) 使用 STM32CubeProgrammer 重新連接板子,在下載界面選中“Run afterprogramming”后,下載應(yīng)用程序 App2(如圖 6),下載完成后,可以看到板子執(zhí)行閃燈的效果,并從 App2 的 log 信息可知,此時(shí)的 empty check 位被置起(如圖 7)。
![“STM32G0](https://file1.elecfans.com/web2/M00/A3/36/wKgZomUD7VOAFsTzAAICEcIF2gw733.png)
![“STM32G0](https://file1.elecfans.com/web2/M00/A4/A3/wKgaomUD7VWAKaIjAAF0hl0yJdY672.png)
(4) 在不斷電的情況下,如果直接按下外部復(fù)位按鈕,程序?qū)⒊霈F(xiàn)無(wú)法執(zhí)行的現(xiàn)象。
問(wèn)題解決
通過(guò)問(wèn)題的復(fù)現(xiàn),我們注意到,程序無(wú)法正常運(yùn)行時(shí),實(shí)際進(jìn)入了內(nèi)置的 ISP 程序,即內(nèi)置的 bootloader 程序。為什么會(huì)進(jìn)入 bootloader 呢?在 G0 的參考手冊(cè)中,我們注意到 empty check 的描述如下:
![“STM32G0](https://file1.elecfans.com/web2/M00/A3/36/wKgZomUD7ViAc6lQAAXjaW7UaT4226.png)
這里的描述有兩點(diǎn)是很重要的。
A :出廠的芯片,因?yàn)槭菦](méi)有程序的空片,empty check 位是被置位的,但實(shí)際電路中因 boot 管腳定義的程序從 Main Flash 啟動(dòng)的場(chǎng)景時(shí),程序會(huì)由于 empty check 位而強(qiáng)制從內(nèi)置的 bootloader 啟動(dòng)。
B :empty check 只會(huì)在加載 OptionByte 時(shí)更新,所以在空片上下載完程序后,應(yīng)當(dāng)通過(guò) power on reset 或者手動(dòng)清除該位,程序才可以正常運(yùn)行。
我們來(lái)驗(yàn)證一下,在復(fù)現(xiàn)問(wèn)題的第(4)步中,如果先按下用戶按鈕,應(yīng)用程序 App2會(huì)通過(guò)軟件清除 empty check 位,再通過(guò)外部復(fù)位按鈕,則程序正常運(yùn)行, 根據(jù) log 信息可以看到 empty check 位被清除(如圖 9),且程序運(yùn)行恢復(fù)正常。
![“STM32G0](https://file1.elecfans.com/web2/M00/A4/A3/wKgaomUD7VmARN9SAAKJyTxc4zI395.png)
小結(jié)
本文描述的問(wèn)題雖然隱藏的比較深,但規(guī)律還是很明顯的,只要重新上電即可恢復(fù),說(shuō)明很可能和 power on reset 有關(guān)。在參考手冊(cè)中搜索 power on reset 關(guān)鍵字,可以很快的找到一些線索。所以分析問(wèn)題時(shí),要多關(guān)注這樣的有規(guī)律的問(wèn)題信息。
來(lái)源:STM32單片機(jī)
免責(zé)聲明:本文為轉(zhuǎn)載文章,轉(zhuǎn)載此文目的在于傳遞更多信息,版權(quán)歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權(quán)問(wèn)題,請(qǐng)聯(lián)系小編進(jìn)行處理
審核編輯 黃宇
-
STM32
+關(guān)注
關(guān)注
2273文章
10926瀏覽量
357778 -
死機(jī)
+關(guān)注
關(guān)注
0文章
17瀏覽量
8629 -
復(fù)位
+關(guān)注
關(guān)注
0文章
174瀏覽量
24279
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
STM32G0復(fù)位后死機(jī)
AN5145_從STM32F0系列遷移到STM32G0系列的應(yīng)用
![AN5145_從<b class='flag-5'>STM32F0</b>系列遷移到<b class='flag-5'>STM32G0</b>系列的應(yīng)用](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
AN5145_從STM32F0系列到 STM32G0 系列的應(yīng)用移手冊(cè)
![AN5145_從<b class='flag-5'>STM32F0</b>系列到 <b class='flag-5'>STM32G0</b> 系列的應(yīng)用移手冊(cè)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
PM0223_STM32L0和STM32G0單片機(jī)編程手冊(cè)
![PM0223_<b class='flag-5'>STM32L0</b>和<b class='flag-5'>STM32G0</b>單片機(jī)編程手冊(cè)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
STM32G0開(kāi)發(fā)筆記:FreeRTOS和FreeModbus庫(kù)使用
![<b class='flag-5'>STM32G0</b>開(kāi)發(fā)<b class='flag-5'>筆記</b>:FreeRTOS和FreeModbus庫(kù)使用](https://file.elecfans.com/web2/M00/8A/DE/poYBAGPE8HKAOQsRAACNC8rHm2s539.png)
STM32G0開(kāi)發(fā)筆記:FreeRTOS和CLI組件使用
![<b class='flag-5'>STM32G0</b>開(kāi)發(fā)<b class='flag-5'>筆記</b>:FreeRTOS和CLI組件使用](https://file.elecfans.com/web2/M00/8B/64/pYYBAGPE8tCAKc6pAAB-WKRjstE765.png)
STM32G0開(kāi)發(fā)筆記:使用FreeRTOS系統(tǒng)
![<b class='flag-5'>STM32G0</b>開(kāi)發(fā)<b class='flag-5'>筆記</b>:使用FreeRTOS系統(tǒng)](https://file.elecfans.com/web2/M00/8A/DF/poYBAGPE90WAWzvUAAJdbkXfW9k951.png)
STM32G0開(kāi)發(fā)筆記:SPI接口的基本使用
![<b class='flag-5'>STM32G0</b>開(kāi)發(fā)<b class='flag-5'>筆記</b>:SPI接口的基本使用](https://file.elecfans.com/web2/M00/8A/F1/poYBAGPGCeSAK01YAAD3iE_hzhs771.png)
STM32G0開(kāi)發(fā)筆記:多通道ADC與DMA的使用
![<b class='flag-5'>STM32G0</b>開(kāi)發(fā)<b class='flag-5'>筆記</b>:多通道ADC與DMA的使用](https://file.elecfans.com/web2/M00/8B/76/pYYBAGPGCoSATt1_AAM-V-np3dw466.png)
STM32G0開(kāi)發(fā)筆記:串口中斷的使用
STM32G0開(kāi)發(fā)筆記:LED燈示例
![<b class='flag-5'>STM32G0</b>開(kāi)發(fā)<b class='flag-5'>筆記</b>:LED燈示例](https://file.elecfans.com/web2/M00/8A/F1/poYBAGPGDOyAQ1WTAADberuAS7U848.png)
評(píng)論