很多客戶在使用STM32G系列替代STM32F系列時(shí),我們經(jīng)常會(huì)收到客戶反饋如果使用串口下載程序?如何修改boot模式?如何將特殊IO復(fù)用成通用IO?等等問題;這是由于STM32G系列相對(duì)于STM32F系列Boot mode、Option byte發(fā)生了一些變化,本文會(huì)針對(duì)于此類問題做詳細(xì)的使用講解。
一. STM32G系列Boot mode
1.1 STM32F系列與G系列Boot mode對(duì)比
STM32F系列通用型及部分高性能(F0、F1、F2、F3、F4)MCU是通過外部Boot Pin來的IO輸入狀態(tài)來配置系統(tǒng)的啟動(dòng)方式,并在MCU上電后的第四個(gè)時(shí)鐘周期鎖存Boot Pin狀態(tài),啟動(dòng)方式分為三種1.Main Flash Mmemory啟動(dòng),從Flash存儲(chǔ)啟動(dòng),將0x08000000地址加載應(yīng)用程序;2.System Memory啟動(dòng),System Memory存儲(chǔ)是系統(tǒng)的自舉程序,無法篡改;3.Embedded SRAM啟動(dòng),當(dāng)設(shè)備從SRAM引導(dǎo)時(shí),在應(yīng)用程序初始化代碼中,必須使用NVIC異常表和偏移寄存器重新定位SRAM中的矢量表。
相對(duì)于STM32F系列來說,G系列在Boot modes方面最大的改變是增加Option byte與 Boot0 Pin混合配置,啟動(dòng)方式與F系列大致相同。
1.2 STM32G系列BOOT mode變換操作
本次操作流程硬件使用NUCLEO-G431RB開發(fā)板為例,軟件使用STM32CubePrg。
STM32G431RBT6默認(rèn)啟動(dòng)是以上圖中的第三種方式,即使用Option byte配置,將nBOOT0位配置為1,使用ST-Link連接,打開Option byte->User Configuration,如下圖:
此時(shí)我們可以通過修改Option byte,來改變系統(tǒng)的啟動(dòng)方式,比如從串口更新程序,需要將系統(tǒng)設(shè)置成System Memory啟動(dòng),運(yùn)行自舉程序,使用圖1.2的第七種配置方式,將nBOOT0位置0,nBOOT1位置1,nSWBOOT0位置0,并點(diǎn)擊Apply,系統(tǒng)復(fù)位之后即從System Memory啟動(dòng)。
1.3 ST-Link無法連接恢復(fù)操作
一些客戶在使用STM32G系列MCU過程中,會(huì)出現(xiàn)程序上電后立馬處于低功耗或者SWD接口被復(fù)用成IO的情況下,ST-Link會(huì)無法連接至MCU,導(dǎo)致無法擦除更新程序,在這種情況下可以通過SRAM啟動(dòng),然后擦除FALSH應(yīng)用程序;
如果在應(yīng)用中會(huì)有低功耗模式及SWD接口復(fù)用IO的情況下,建議客戶的啟動(dòng)方式采用圖1.2中第二種方式,將外部BOOT0 Pin拉低,nSWBOOT0位置1;當(dāng)在軟件調(diào)試過程中出現(xiàn)以上情況時(shí),可以外部直接將BOOT0拉高,使用SRAM啟動(dòng)后擦除異常程序。
二. STM32G系列Option byte
2.1 STM32G431RB Option byte描述
Option byte是由最終用戶根據(jù)應(yīng)用程序要求進(jìn)行配置,一共是用4 bytes與8 bytes補(bǔ)充構(gòu)成,通過配置FLASH_OPTR、FLASH_PCROP1SR、FLASH_PCROP1ER、FLASH_WRP1AR寄存器,可以完成軟件修改option byte;同時(shí)可以使用STM32CubePro修改option byte。
FLASH_OPTR寄存器可以進(jìn)行系統(tǒng)RDP level配置、系統(tǒng)復(fù)位相關(guān)配置如系統(tǒng)復(fù)位電壓級(jí)別、nRST引腳模式、低功耗復(fù)位、開門狗復(fù)位等;
FLASH_PCROP1SR寄存器用于配置PCROP起始地址;
FLASH_PCROP1ER寄存器用于配置PCROP結(jié)束地址;(PCROP區(qū)域只能用于CPU取值,Debug、CPU取數(shù)據(jù)、DMA功能全部禁止)
FLASH_WRP1AR寄存器用于配置寫保護(hù)A區(qū)域的起始地址和結(jié)束地址;
FLASH_WRP1BR寄存器用于配置寫保護(hù)B區(qū)域的起始地址和結(jié)束地址;(寫保護(hù)允許有兩個(gè)非連續(xù)區(qū)域,寫保護(hù)區(qū)域無法進(jìn)行mass erase和下載程序)
FLASH_SEC1R寄存器用于配置用戶代碼安全區(qū)域,起始地址是0x0800 0000及LOCK_B00T位配置;
所有的寄存器操作完成后,可以將FLASH_CR寄存器OBL_LAUNCH( Force the option byte loading)位置1,即可對(duì)所有的配置立即生效,否則需要系統(tǒng)復(fù)位才能生效;
所有的寄存器配置詳細(xì)可查閱參考手冊(cè)RM0440.
2.2 軟件修改Option byte流程
當(dāng)需要使用軟件修改Option bytes時(shí),建議使用以下步驟:
檢查FLASH_SR寄存器的BSY位,當(dāng)BSY為0時(shí),表示沒有其他正在進(jìn)行的閃存操作,否則需要等待;
解鎖FLASH_CR寄存器,向FLASH_KEYR寄存器寫入KEY值;
解鎖FLASH_OPTR寄存器,向FLASH_ OPTKEYR寄存器寫入KEY值;
將FLASH_CR寄存器OPTSTRT置1,表示開始修改Option byte;
修改需要使用的選項(xiàng)字節(jié);
檢查FLASH_SR寄存器的BSY位,當(dāng)BSY為0時(shí),表示修改完成;
如果需要對(duì)選項(xiàng)字節(jié)立即生效,將FLASH_CR寄存器OBL_LAUNCH位置1,否則需要復(fù)位后才能生效;
鎖住FLASH_OPTR寄存器;
鎖住FLASH_CR寄存器;
斷電、上電系統(tǒng)復(fù)位,Option bytes修改生效。
2.3 STM32CubePro修改Option byte流程
STM32CubePro可以通過使用ST-Link或者在系統(tǒng)存儲(chǔ)運(yùn)行下連接至MCU,打開菜單欄中的Option bytes,修改需要的內(nèi)容,并點(diǎn)擊Apply,點(diǎn)擊Apply后修改的Option bytes會(huì)立即生效。
-
STM32
+關(guān)注
關(guān)注
2271文章
10923瀏覽量
357223
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論