×
单片机 > 单片机程序设计 > 详情

STM32CubeMX(Keil5)开发之路——8Flash读写

发布时间:2020-05-28 发布时间:
|

运行环境

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读写 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
如何升级STM32单片机的代码