STM32CubeMX开发之路—8Flash读写


运行环境

工具版本说明
STM32CubeMXV5.0.0建议相同
Keil5V5.1.5建议相同

简介

本例程主要讲解如何对芯片内的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%x\r\n", 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 */
}

烧录代码后打开出口调试助手,正确的话会看到如下输出


  • 18
    点赞
  • 88
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iot 小胡

从未指望过会有人打赏...

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值