<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 關(guān)于STM32的FLASH操作

關(guān)于STM32的FLASH操作

作者: 時(shí)間:2016-11-26 來(lái)源:網(wǎng)絡(luò ) 收藏

選項字節

選項字節用于存儲芯片使用者對芯片的配置信息。

目前,所有的STM32101xx、STM32102xx、STM32103xx、STM32105xx、STM32107xx產(chǎn)品,選項字節都是16字節。但是這16字節,每?jì)蓚€(gè)字節組成一個(gè)正反對,即,字節1是字節0的反碼,字節3是字節2的反碼,...,字節15是字節14的反碼,所以,芯片使用者只要設置8個(gè)字節就行了,另外8個(gè)字節系統自動(dòng)填充為反碼。因此,有時(shí)候,也說(shuō)STM32的選項字節是8個(gè)字節,但是占了16字節的空間。

選項字節的8字節正碼概述如下:

RDP字節0。讀保護字節,存儲對主存儲塊的讀保護設置。

USER字節2。用戶(hù)字節,配置看門(mén)狗、停機、待機。

Data0字節4。數據字節0,由芯片使用者自由使用。

Data1字節6。數據字節1,由芯片使用者自由使用。

WRP0字節8。寫(xiě)保護字節0,存儲對主存儲塊的寫(xiě)保護設置。

WRP1字節10。寫(xiě)保護字節1,存儲對主存儲塊的寫(xiě)保護設置。

WRP2字節12。寫(xiě)保護字節2,存儲對主存儲塊的寫(xiě)保護設置。

WRP3字節14。寫(xiě)保護字節3,存儲對主存儲塊的寫(xiě)保護設置。3

選項字節寫(xiě)使能

在FLASH_CR中,有一個(gè)OPTWRE位,該位為0時(shí),不允許進(jìn)行選項字節操作(擦除、編程)。這稱(chēng)為選項字節寫(xiě)使能。只有該位為1時(shí),才能進(jìn)行選項字節操作。

該位不能軟件置1,但可以軟件清零。只有向FLASH_OPTKEYR依次寫(xiě)入KEY1和KEY2后,硬件會(huì )自動(dòng)對該位置1,此時(shí),才允許選項字節操作。這稱(chēng)為解鎖(打開(kāi))選項字節寫(xiě)使能。

該位為1后,可以由軟件清零,關(guān)閉寫(xiě)使能。

復位后,該位為0。錯誤操作不會(huì )永遠關(guān)閉寫(xiě)使能,只要寫(xiě)入正確的鍵序列,則又可以打開(kāi)寫(xiě)使能。寫(xiě)使能已打開(kāi)時(shí),再次打開(kāi),不會(huì )出錯,并且依然是打開(kāi)的。

很顯然,進(jìn)行選項字節操作前,先要解開(kāi)閃存鎖,然后打開(kāi)選項字節寫(xiě)使能,之后,才能進(jìn)行選項字節操作。

選項字節擦除

建議使用如下步驟對選項字節進(jìn)行擦除:

1.檢查FLASH_SR寄存器的BSY位,以確認沒(méi)有其他正在進(jìn)行的閃存操作。

2.解鎖FLASH_CR寄存器的OPTWRE位。即,打開(kāi)寫(xiě)使能。

3.設置FLASH_CR寄存器的OPTER位為1。選擇選項字節擦除操作。

4.設置FLASH_CR寄存器的STRT位為1。

5.等待FLASH_SR寄存器的BSY位變?yōu)?,表示操作完成。

6.查詢(xún)FLASH_SR寄存器的EOP位,EOP為1時(shí),表示操作成功。

7.讀出選項字節并驗證數據。

由于選項字節只有16字節,因此,擦除時(shí)是整個(gè)選項字節都被擦除了。

選項字節編程

建議使用如下步驟對選項字節進(jìn)行編程:

1.檢查FLASH_SR寄存器的BSY位,以確認沒(méi)有其他正在進(jìn)行的編程操作。

2.解鎖FLASH_CR寄存器的OPTWRE位。即,打開(kāi)寫(xiě)使能。

3.設置FLASH_CR寄存器的OPTPG位為1。選擇編程操作。

4.寫(xiě)入要編程的半字到指定的地址。啟動(dòng)編程操作。

5.等待FLASH_SR寄存器的BSY位變?yōu)?,表示操作完成。

6.查詢(xún)FLASH_SR寄存器的EOP位,EOP為1時(shí),表示操作成功。

7.讀出寫(xiě)入的選項字節并驗證數據。

對選項字節編程時(shí),FPEC使用半字中的低字節并自動(dòng)地計算出高字節(高字節為低字節的反碼),并開(kāi)始編程操作,這將保證選項字節和它的反碼始終是正確的。

主存儲塊的保護

可以對主存儲塊中的數據進(jìn)行讀保護、寫(xiě)保護。

讀保護用于保護數據不被非法讀出。防止程序泄密。

寫(xiě)保護用于保護數據不被非法改寫(xiě),增強程序的健壯性。

讀保護

主存儲塊啟動(dòng)讀保護后,簡(jiǎn)單的說(shuō)具有以下特性:

1.從主存儲塊啟動(dòng)的程序,可以對整個(gè)主存儲塊執行讀操作,不允許對主存儲塊的前4KB進(jìn)行擦除編程操作,可以對4KB之后的區域進(jìn)行擦除編程操作。

2.從SRAM啟動(dòng)的程序,不能對主存儲塊進(jìn)行讀、頁(yè)擦除、編程操作,但可以進(jìn)行主存儲塊整片擦除操作。

3.使用調試接口不能訪(fǎng)問(wèn)主存儲塊。

這些特性足以阻止主存儲器數據的非法讀出,又能保證程序的正常運行。

只有當RDP選項字節的值為RDPRT鍵值時(shí),讀保護才被關(guān)閉,否則,讀保護就是啟動(dòng)的。因此,擦除選項字節的操作,將啟動(dòng)主存儲塊的讀保護。如果要關(guān)閉讀保護,必須將RDP選項字節編程為RDPRT鍵值。并且,如果編程選項字節,使RDP由非鍵值變?yōu)殒I值(即由保護變?yōu)榉潜Wo)時(shí),STM32將會(huì )先擦除整個(gè)主存儲塊,再編程RDP。

芯片出廠(chǎng)時(shí),RDP會(huì )事先寫(xiě)入RDPRT鍵值,關(guān)閉寫(xiě)保護功能。

寫(xiě)保護

STM32主存儲塊可以分域進(jìn)行寫(xiě)保護。

如果試圖對寫(xiě)保護的域進(jìn)行擦除或編程操作,在閃存狀態(tài)寄存器(FLASH_SR)中會(huì )返回一個(gè)寫(xiě)保護錯誤標志。

STM32主存儲塊每個(gè)域4KB,WRP0-WRP3選項字節中的每一位對應一個(gè)域,位為0時(shí),寫(xiě)保護有效。對于超過(guò)128KB的產(chǎn)品,WRP3.15保護了域31及之后的所有域。

顯然,擦除選項字節將導致解除主存儲塊的寫(xiě)保護。

選項字節與它的寄存器映象

我們知道,FPEC有兩個(gè)寄存器存儲了選項字節的映象。那么,選項字節本體(在FLASH中)與映象(在寄存器中)究竟有什么區別呢?

選項字節的本體只是個(gè)FLASH,它的作用只是掉電存儲選項字節內容而以,真正起作用的是寄存器中的映象。即,一個(gè)配置是否有效,不是看本體,而是看映象。而映象是在復位后,用本體的值加載的,此后,除非復位,映象將不再改變。所以,更改本體的數據后,不會(huì )立即生效,只有復位加載到映象中后,才會(huì )生效。

有一點(diǎn)要注意的是,當更改本體的值,使主存儲塊讀保護變?yōu)椴槐Wo時(shí),會(huì )先擦除整片主存儲塊,然后再改變本體。這是唯一一個(gè)改變本體會(huì )引發(fā)的動(dòng)作。但即使這樣,讀保護依然要等到復位后,加載到映象后,才會(huì )解除。

關(guān)于FLASH編程手冊中文版的幾處錯誤(不一定是,但是與我的理解不符)

1.選項字節編程一節中:

對FPEC解鎖后,必須分別寫(xiě)入KEY1和KEY2(見(jiàn)2.3.1節)到FLASH_OPTKEYR寄存器,再設置FLASH_CR寄存器的OPTWRE位為’1’,此時(shí)可以對選項字節進(jìn)行編程

實(shí)際上,對FLASH_OPTKEYR寫(xiě)入KEY1和KEY2后,OPTWRE位會(huì )被硬件置1,而不是用軟件寫(xiě)1。這一點(diǎn)在后面的寄存器描述中也可以得到驗證。

2.對讀保護的描述中:

對讀保護的數值對無(wú)法理解。正確的應該是,RDP為RDPRT鍵值時(shí),解除讀保護,為其它值時(shí),讀保護生效。


上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: STM32FLASH操

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>