STM32CubeMX flash的使用

简介: STM32CubeMX flash的使用

一、CubeMX配置


sys配置 调试模式



时钟配置



时钟树配置



配置板子自带的LED小灯



串口一配置



生成工程




二、keil代码


Flash ROM 大小: STM32F103C8T6通常搭载64KB的Flash存储器。
页大小(PageSize): STM32F103C8T6的Flash存储器的一页通常是1KB。
Flash 起始地址: Flash存储器的起始地址通常为0x08000000。



新建flash文件夹




新建flash.c和flash.h文件



添加路径并保存!!



添加文件到工程



STM32F103C8T6的Flash结束地址通常是0x08000000 + 64KB = 0x08010000。

flash.h

#ifndef __FLASH_H__
#define __FLASH_H__
 
#include "main.h"
extern uint32_t FlashData;
extern uint32_t Flashaddr;
void writeFlashTest(uint32_t writeFlashaddr,uint32_t writeFlashData);//FLASH写入数据
uint32_t readFlashTest(uint32_t writeFlashaddr);  //FLASH读取数据
 
#endif


flash.c

#include "flash.h"
uint32_t FlashData;
uint32_t Flashaddr = 0x0800FC00;
 
void writeFlashTest(uint32_t writeFlashaddr,uint32_t writeFlashData)//FLASH写入数据
{ 
  HAL_FLASH_Unlock();                 //解锁FLASH
 
  FLASH_EraseInitTypeDef f;           //初始化FLASH_EraseInitTypeDef
  f.TypeErase = FLASH_TYPEERASE_PAGES;//标明Flash执行页面只做擦除操作
  f.PageAddress = Flashaddr;          //声明要擦除的地址
  f.NbPages = 1;                      //说明要擦除的页数,此参数必须是Min_Data = 1和Max_Data =(最大页数-初始页的值)之间的值
                                      //一些MCU一页是1KB,一些MCU一页是2KB
  uint32_t PageError = 0;             //设置PageError,如果出现错误这个变量会被设置为出错的FLASH地址 
  HAL_FLASHEx_Erase(&f, &PageError);  //调用擦除函数  
  HAL_FLASH_Program(TYPEPROGRAM_WORD, Flashaddr, writeFlashData);//对FLASH烧写
  HAL_FLASH_Lock();                   //锁住FLASH
}
uint32_t readFlashTest(uint32_t writeFlashaddr)  //FLASH读取数据
{
  uint32_t readFlashData = *(__IO uint32_t*)(writeFlashaddr); //*(__IO uint16_t *)是读取该地址的参数值,其值为16位数据,一次读取两个字节,*(__IO uint32_t *)就一次读4个字节 
  return readFlashData;
}
 
 
 


main.c

头文件和函数重定向

/* USER CODE BEGIN Includes */
#include "stdio.h"
#include "flash.h"
int fputc(int ch,FILE *f)
{
    HAL_UART_Transmit(&huart1,(uint8_t*)&ch,1,0xFFFF);
    return ch;
/* USER CODE END Includes */


  /* USER CODE BEGIN 2 */
  HAL_Delay(2000);
  printf("The MCU powers on..............\r\n");
  FlashData=readFlashTest(Flashaddr);
  writeFlashTest(Flashaddr,FlashData); //往 Flashaddr 地址里写 FlashData
  readFlashTest(Flashaddr);//读Flashaddr 地址里的数据 readFlashData
  printf("addr:0x%x, data:0x%x\r\n", Flashaddr, readFlashTest(Flashaddr));
  FlashData++;
  HAL_Delay(1000);
 
  /* USER CODE END 2 */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13);
    HAL_Delay(1000);
 
    /* USER CODE END WHILE */
 
    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */

运行效果



链接: https://pan.baidu.com/s/1FVA0p9fbEC1GOUG2LeEfKg?pwd=xyhu 提取码: xyhu

目录
相关文章
|
5月前
|
存储 数据安全/隐私保护 芯片
【STM32】详解嵌入式中FLASH闪存的特性和代码示例
【STM32】详解嵌入式中FLASH闪存的特性和代码示例
|
存储 芯片 内存技术
STM32速成笔记(十二)—Flash闪存
本文简单介绍了什么是Flash。针对STM32F1的Flash做了详细介绍,介绍了操作Flash的步骤,并且给出了程序设计。最后,介绍了一些注意事项。
136 0
STM32速成笔记(十二)—Flash闪存
|
存储 关系型数据库 编译器
STM32学习笔记:读写内部Flash(介绍+附代码)
STM32学习笔记:读写内部Flash(介绍+附代码)
416 0
|
存储 内存技术
STM32内部flash详解(1)(下)
STM32内部flash详解(1)
|
存储 缓存 关系型数据库
STM32内部flash详解(1)(上)
STM32内部flash详解(1)
|
芯片 内存技术
STM32bug【 KEILMDK中出现Error: Flash Download failed - “Cortex-M3“】
STM32bug【 KEILMDK中出现Error: Flash Download failed - “Cortex-M3“】
926 0
|
内存技术 芯片
MDK st-link下载STM32程序出现Internal command error和Error:Flash download failed. Target DLL
MDK st-link下载STM32程序出现Internal command error和Error:Flash download failed. Target DLL   是因为目标板的芯片处于休眠的状态,在尝试连接目标板时候也会出现报错Internal command ...
3706 0
|
内存技术
STM32F103系列单片机的FLASH和RAM大小
CPU:STM32F103RCT6,LQFP64,FLASH:64KB,RAM:20KB flash起始地址为0x8000000,大小为0x10000(16进制)—>65536字节(10进制)—>64KB RAM起始地址为0x2000000,大小为0x5000(16进制)—>20480字节(10进制)—>20KB
2664 0
STM32F103系列单片机的FLASH和RAM大小