**:
通過對stm32內部的flash的讀寫可以實現對stm32的程式設計操作。
stm32 的內建可程式設計flash在許多場合具有十分重要的意義。如其支援icp特性使得開發人員對stm32可以警醒除錯開發,可以通過jtag和swd介面對stm32進行程式燒寫;支援iap特性使得開發人員可以在stm32執行程式的時候對其內部程式進行更新操作。對一些對資料安全有要求的場合,可程式設計flash可以結合stm32內部唯一的身份標識實現各種各樣的防破解方案。並且stm32的flash在一些輕量級的防掉電儲存方案中也有立足之地。
stm32的flash分為主儲存塊和資訊塊。主儲存塊用於儲存具體的程式**和使用者資料,資訊塊用於負責由stm32出廠是放置2kb的啟動程式(bootloader)和512b的使用者配置資訊區。
主儲存塊是以頁為單位劃分的,一頁大小為1kb。範圍為從位址0x08000000開始的128kb內。
對flash 的寫入操作要 「先擦除後寫入」的原則;
stm32的內建flash 程式設計操作都是以頁為單位寫入的,而寫入的操作必須要以16位半字寬度資料位單位,允許跨頁寫,寫入非16位資料時將導致stm32內部匯流排錯誤。
進行內建flash讀寫時,必須要開啟內部rc振盪器。
main.c:
001
#include "stm32f10x.h"
002
#include "stdio.h"
003
004
#define printf_on 1
005
006
void
rcc_configuration(
void
);
007
void
gpio_configuration(
void
);
008
void
usart_configuration(
void
);
009
010
u32 count=0;
011
012
u16 data[5]=;
013
014
int
main(
void
)
015
035
036
flash_lock();
037
038
count = 0;
039
040
printf
(
"\r\n the five data is : \r\n"
);
041
042
while
(count < 5)
043
051
052
while
(1);
053
054
}
055
056
void
gpio_configuration(
void
)
057
070
071
void
rcc_configuration(
void
)
072
106
/* 開啟apb2匯流排上的gpioa時鐘*/
107
rcc_apb2periphclockcmd(rcc_apb2periph_gpioa|rcc_apb2periph_usart1, enable);
108
109
//rcc_ahbperiphclockcmd(rcc_ahbperiph_dma1, enable);
110
111
//rcc_apb1periphclockcmd(rcc_apb1periph_pwr,enable);
112
//rcc_apb1periphclockcmd(rcc_apb1periph_pwr|rcc_apb1periph_bkp|rcc_apb1periph_wwdg, enable);
113
114
}
115
116
117
void
usart_configuration(
void
)
118
138
139
#if printf_on
140
141
int
fputc
(
int
ch,
file
*f)
142
147
148
#endif
stm32 Flash讀寫 庫函式
stm32 的內建可程式設計flash在許多場合具有十分重要的意義。如其支援icp特性使得開發人員對stm32可以警醒除錯開發,可以通過jtag和swd介面對stm32進行程式燒寫 支援iap特性使得開發人員可以在stm32執行程式的時候對其內部程式進行更新操作。對一些對資料安全有要求的場合,可程式...
stm32flash的讀寫特性
在使用stm32自帶的flash儲存資料時候,如下特點必須知道 1 必須是先擦除乙個扇區,才能寫入 2 讀資料沒有限制 3 寫資料必須是2位元組,同時寫入位址以一定要考慮位元組對齊,4 一般都是在最後幾頁進行資料儲存的,確保資料量不超過flash的的大小,比如f103大容量是2k位元組,其實乙個扇區...
STM32 Flash 擦除 讀寫 成功
參考 要點 將資料寫入flash之前,每次都要擦除,否則會寫入不成功,出現的錯誤狀態為 flash status flash error pg 寫入資料成功後可以在memory 中檢視剛剛寫入的資料,具體在memory 視窗中輸入 0x08010000,既可以看到此處的資料為 data 0x1504...