簡介
STM32F103C8T6 內(nèi)部Flash 為 64KB,本次將對他多余空間進行讀寫。
介紹
數(shù)據(jù)手冊下載
STM32F103x8/STM32F103xB 數(shù)據(jù)手冊
包含F(xiàn)lash Memory Page分布
STM32F設(shè)備命名
設(shè)備容量類型
中容量類型
內(nèi)部空間介紹
64 KBytes大小
Flash Memory 從 0x0800 0000 ~ 0x0801 FFFF
頁分布1K每頁, STM32F103C8T6 只有64KByte, 那就是64頁
代碼
使用
controllerstech Flash Program Code
復(fù)制 FLASH_PAGE_F1.h 和 FLASH_PAGE_F1.c到項目中
FLASH_PAGE_F1.h 加入宏定義
#define FLASH_START_ADDRESS (0x08000000 + FLASH_PAGE_SIZE * 20) //0~20頁這20K用于存儲你的程序
#define FLASH_MAX_PAGE_NUM (64-1-20) // 0 ~ (63-20) 是最大的頁碼
FLASH_PAGE_F1.c 修改
static uint32_t GetPage(uint32_t Address)
{
for (int indx=0; indx<(FLASH_MAX_PAGE_NUM+1); indx++)
{
if((Address < (FLASH_START_ADDRESS + (FLASH_PAGE_SIZE *(indx+1))) ) && (Address >= (FLASH_START_ADDRESS + FLASH_PAGE_SIZE*indx)))
{
return (FLASH_START_ADDRESS + FLASH_PAGE_SIZE*indx);
}
}
return 0;
}
測試代碼
main.c
char *data = "hello FLASH from ControllerTech\
This is a test to see how many words can we work with";
uint32_t data2[] = {0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x8,0x9};
uint32_t Rx_Data[30];
char string[100];
int number = 123;
float val = 123.456;
float RxVal;
int main()
{
...
printf("Hello World!\r\n");
Flash_Write_Data(GetPageFromPageNum(0) , (uint32_t *)data2, 9);
Flash_Read_Data(GetPageFromPageNum(0) , Rx_Data, 10);
printf ("RxData: { ");
for ( int i = 0; i < 9; ++i )
{
printf ("0x%X ", Rx_Data[i]);
}
printf ("};\r\n");
int numofwords = (strlen(data)/4)+((strlen(data)%4)!=0);
Flash_Write_Data(GetPageFromPageNum(1) , (uint32_t *)data, numofwords);
Flash_Read_Data(GetPageFromPageNum(1) , Rx_Data, numofwords);
Convert_To_Str(Rx_Data, string);
printf ("String: %s\r\n", string);
Flash_Write_NUM(GetPageFromPageNum(2), number);
RxVal = Flash_Read_NUM(GetPageFromPageNum(2));
printf ("Read Num_1: %f\r\n", RxVal);
Flash_Write_NUM(GetPageFromPageNum(3), val);
RxVal = Flash_Read_NUM(GetPageFromPageNum(3));
printf ("Read Num_2: %f\r\n", RxVal);
...
}
設(shè)置燒錄地址區(qū)域, 避免其他區(qū)域被覆蓋
20K = 0x5000 即0 ~ 20頁 這個區(qū)域用來存放程序
共賞
代碼
不需要下載, 上面都提供了文章來源:http://www.zghlxwxcb.cn/news/detail-811842.html
參考
普中STM32-PZ6806L開發(fā)板(HAL庫函數(shù)實現(xiàn)-USART1 printf+scanf/gets)文章來源地址http://www.zghlxwxcb.cn/news/detail-811842.html
Note
- FLASH_BASE 就是 0x08000000這個地址, 所以可以用 FLASH_BASE取代0x08000000
到了這里,關(guān)于STM32F103C8T6(HAL庫函數(shù) - 內(nèi)部Flash操作)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!