stm32-flash閃存編程原理與步驟
stm32編程方式:
(1)ICP(JTAG/SWD協(xié)議或者系統(tǒng)加載bootloader(串口))下載程序到微控制器中。
(2)IAP:就是通過(guò)任何一個(gè)通信接口(IO端口,USB,CAN,SPI,IIC等),下載程序或數(shù)據(jù)到存儲(chǔ)器中,stm32允許用戶在應(yīng)用程序中重新燒寫閃存存儲(chǔ)器的內(nèi)容。然而,IAP需要至少一部分程序(bootloder,注意此bootloader不同于上部分的,是自己編寫的。上部分的是系統(tǒng)的)通過(guò)ICP的方式燒到閃存存儲(chǔ)器中。
stm32閃存包含3部分:
(1)主存儲(chǔ)器,
(2)信息塊(啟動(dòng)程序代碼,用戶選擇字),
(3)閃存寄存器接口寄存器。
通常說(shuō)的閃存大小就是主存儲(chǔ)器的大小。stm32啟動(dòng)方式,B0=0,B1=0,系統(tǒng)運(yùn)行就是從0x08000000開始的。如果B0=1,B1=0,就是運(yùn)行信息塊中的啟動(dòng)程序(st官方固化在里面的),用于串口下載。
注意事項(xiàng):
PROGRAM
(1)STM32復(fù)位后,F(xiàn)PEC模塊是被保護(hù)的,F(xiàn)lash_CR是不能被寫入的,通過(guò)寫入特定的序列到FLASH_KEY寄存器才能解鎖FPEC模塊,這個(gè)過(guò)程叫Unlock。
(2)STM32的閃存編程每次必須寫入是16位,當(dāng)FLASH_CR寄存器的PG位為1時(shí)候,在閃存地址寫入一個(gè)半字將啟動(dòng)一次編程。
(3)在編程的過(guò)程中(BSY位為1),任何的讀寫閃存都會(huì)使CPU暫停,直到編程結(jié)束。
(4)stm32的FLASH編程時(shí)候,必須要求寫入地址的FLASH是被擦除了的(也就是值為0XFFFF),否則無(wú)法寫入。(回想FLASH模擬EEPROM)
ERSER
擦除:頁(yè)擦除,整片擦除。
幾個(gè)寄存器:flash_keyr,flash_cr,flash_sr,flash_ar