运行环境
Windows10
STM32CubeMX___Version 5.0.0
Keil5(MDK5)___Version 5.15
简介
本例程主要讲解如何对芯片内的Flash进行读写,用芯片内部Flash可以对一些需要断电保存的数据进行保存,无需加外部得存储芯片,本例程采用的是STM32F103ZET6,512K大小的Flash。
STM32CubeMx基本配置
基础配置过程请参考 STM32CubeMx(Keil5)开发之路—配置第一个项目
printf重定向例程请参考 STM32CubeMx(Keil5)开发之路——3发送USART数据和printf重定向
代码修改
1——选择main.c文件
2——添加全局变量在全局变量区
3——在USER CODE中添加如下代码,Flash写入函数和Flash读出函数
讲解:本例程是512K大小的Flash,使用的是最后一个扇区的第一页(每个扇区有四页)
如果使用Flash大小为256K的芯片addr请设为0x0803E000
如果使用Flash大小为128K的芯片addr请设为0x0801F000
如果使用Flash大小为64K的芯片addr请设为0x08007000
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
int fputc(int ch, FILE *f)
{
HAL_UART_Transmit(&huart1, (uint8_t *)&ch,1, 0xFFFF);
return ch;
}
uint32_t WriteFlashData = 0x12345678;
uint32_t addr = 0x0807E000;
/*FLASH写入程序*/
void writeFlashTest(void)
{
/* 1/4解锁FLASH*/
HAL_FLASH_Unlock();
/* 2/4擦除FLASH*/
/*初始化FLASH_EraseInitTypeDef*/
/*擦除方式页擦除FLASH_TYPEERASE_PAGES,块擦除FLASH_TYPEERASE_MASSERASE*/
/*擦除页数*/
/*擦除地址*/
FLASH_EraseInitTypeDef FlashSet;
FlashSet.TypeErase = FLASH_TYPEERASE_PAGES;
FlashSet.PageAddress = addr;
FlashSet.NbPages = 1;
/*设置PageError,调用擦除函数*/
uint32_t PageError = 0;
HAL_FLASHEx_Erase(&FlashSet, &PageError);
/* 3/4对FLASH烧写*/
HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, addr, WriteFlashData);
/* 4/4锁住FLASH*/
HAL_FLASH_Lock();
}
/*FLASH读取打印程序*/
void printFlashTest(void)
{
uint32_t temp = *(__IO uint32_t*)(addr);
printf("addr is:0x%x, data is:0x%xrn", addr, temp);
}
/* USER CODE END 0 */
接着在USER CODE BEGIN WHILE中接着添加如下代码,进行读写测试测试
/* Infinite loop */
/* USER CODE BEGIN WHILE */
/*Flash TEST*/
WriteFlashData = 0x12345678;
writeFlashTest();
printFlashTest();
WriteFlashData = 0x87654321;
writeFlashTest();
printFlashTest();
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
烧录代码后打开出口调试助手,正确的话会看到如下输出
关键字:STM32CubeMX Keil5 Flash读写『本文转载自网络,版权归原作者所有,如有侵权请联系删除』