日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀](1)Flash的簡(jiǎn)介 不同型號(hào)的 STM32,其 FLASH 容量也有所不同,最小的只有 16K 字節(jié),最大的則達(dá)到了1024K 字節(jié)。STM32F103ZET6 的 FLASH 容量為 512K 字節(jié),屬于大容量產(chǎn)品。 STM32 的閃存模塊由:主存儲(chǔ)器、信

(1)Flash的簡(jiǎn)介

不同型號(hào)的 STM32,其 FLASH 容量也有所不同,最小的只有 16K 字節(jié),最大的則達(dá)到了1024K 字節(jié)。

STM32F103ZET6 的 FLASH 容量為 512K 字節(jié),屬于大容量產(chǎn)品。

STM32 的閃存模塊由:主存儲(chǔ)器、信息塊和閃存存儲(chǔ)器接口寄存器等 3 部分組成。

尤其是閃存存儲(chǔ)器接口寄存器有以下特性:閃存存儲(chǔ)器接口寄存器,該部分用于控制閃存讀寫等,是整個(gè)閃存模塊的控制機(jī)構(gòu)。
對(duì)主存儲(chǔ)器和信息塊的寫入由內(nèi)嵌的閃存編程/擦除控制器(FPEC)管理;編程與擦除的高電壓由內(nèi)部產(chǎn)生。

在執(zhí)行閃存寫操作時(shí),任何對(duì)閃存的讀操作都會(huì)鎖住總線,在寫操作完成后讀操作才能正確地進(jìn)行;既在進(jìn)行寫或擦除操作時(shí),不能進(jìn)行代碼或數(shù)據(jù)的讀取操作。

(2)stm32閃存編程過程如下圖


從上圖可以得到閃存的編程順序如下:
? 檢查 FLASH_CR 的 LOCK 是否解鎖,如果沒有則先解鎖
? 檢查 FLASH_SR 寄存器的 BSY 位,以確認(rèn)沒有其他正在進(jìn)行的編程操作
? 設(shè)置 FLASH_CR 寄存器的 PG 位為’1’
? 在指定的地址寫入要編程的半字
? 等待 BSY 位變?yōu)椤?’
? 讀出寫入的地址并驗(yàn)證數(shù)據(jù)
前面提到,我們?cè)?STM32 的 FLASH 編程的時(shí)候,要先判斷縮寫地址是否被擦除了,所以,
我們有必要再介紹一下 STM32 的閃存擦除,STM32 的閃存擦除分為兩種:頁擦除和整片擦除。

(3)stm32頁擦除如下圖



從上圖可以看出,STM32 的頁擦除順序?yàn)椋?/p>

? 檢查 FLASH_CR 的 LOCK 是否解鎖,如果沒有則先解鎖
? 檢查 FLASH_SR 寄存器的 BSY 位,以確認(rèn)沒有其他正在進(jìn)行的閃存操作
? 設(shè)置 FLASH_CR 寄存器的 PER 位為’1’
? 用 FLASH_AR 寄存器選擇要擦除的頁
? 設(shè)置 FLASH_CR 寄存器的 STRT 位為’1’
? 等待 BSY 位變?yōu)椤?’
? 讀出被擦除的頁并做驗(yàn)證

(4)下面就是操作Flash的一個(gè)重要的函數(shù)了:

#if STM32_FLASH_SIZE<256
#define STM_SECTOR_SIZE 1024
#else
#define STM_SECTOR_SIZE 2048
#endif
u16 STMFLASH_BUF[STM_SECTOR_SIZE/2];
void STMFLASH_Write(u32 WriteAddr,u16 *pBuffer,u16 NumToWrite)
{
u32 secpos;
u16 secoff;
u16 secremain;
u16 i;
u32 offaddr;
if(WriteAddr=(STM32_FLASH_BASE+1024*STM32_FLASH_SIZE)))return;
FLASH_Unlock();
offaddr=WriteAddr-STM32_FLASH_BASE;
secpos=offaddr/STM_SECTOR_SIZE;
secoff=(offaddr%STM_SECTOR_SIZE)/2;
secremain=STM_SECTOR_SIZE/2-secoff;
if(NumToWrite<=secremain)secremain=NumToWrite;
while(1)
{
STMFLASH_Read(secpos*STM_SECTOR_SIZE+STM32_FLASH_BASE,STMFLASH_BUF,STM_SECTOR_SIZE/2);
for(i=0;i{
if(STMFLASH_BUF[secoff+i]!=0XFFFF)break;
}
if(i{
FLASH_ErasePage(secpos*STM_SECTOR_SIZE+STM32_FLASH_BASE);
for(i=0;i{
STMFLASH_BUF[i+secoff]=pBuffer[i];
}
STMFLASH_Write_NoCheck(secpos*STM_SECTOR_SIZE+STM32_FLASH_BASE,STMFLASH_BUF,STM_SECTOR_SIZE/2);
}else STMFLASH_Write_NoCheck(WriteAddr,pBuffer,secremain);
if(NumToWrite==secremain)break;
else//D′è??′?áê?
{
secpos++;
secoff=0;
pBuffer+=secremain;
WriteAddr+=secremain;
NumToWrite-=secremain;
if(NumToWrite>(STM_SECTOR_SIZE/2))secremain=STM_SECTOR_SIZE/2;
else secremain=NumToWrite;
}
};
FLASH_Lock();
}
#endif


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉