STM32之Flash读写操作


前言

本例是以读写C8T6最小系统板的Flash,了解其Flash地址空间的数据读取。
stm32f103c8t6只有20KB 内存(RAM)供程序代码和数组变量存放,因此,针对内部Flash的总计64KB存储空间(地址从0x08000000开始),运行一次写入8KB数据,总计复位运行代码4次,将32KB数据写入Flash。并验证写入数据的正确性和读写速率。

一、配置cubemx工程

滴答定时器的配置

在这里插入图片描述
打开外部时钟
在这里插入图片描述
配置时钟树

在这里插入图片描述
基本配置完成
在这里插入图片描述
设置堆栈大小

在这里插入图片描述
然后生成代码即可

二、使用Keil5修改代码

添加flash.c文件
并在工程路径中添加其头文件所在路径

在这里插入图片描述
在main.c文件中添加flash.h头文件
并定义两个变量数组

在这里插入图片描述
main函数中添加以下代码

/* USER CODE BEGIN 1 */
	uint8_t i;
	uint8_t FlashTest[] = "Hello This is a Flash Test DEMO";

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */
	
FlashWriteBuff( DEVICE_INFO_ADDRESS, FlashTest,sizeof(FlashTest) );        // 写入数据到Flash
	
	for(i=0;i<255;i++)
		FlashWBuff[i] = i;
	
FlashWriteBuff( DEVICE_INFO_ADDRESS + sizeof(FlashTest), FlashWBuff,255 );  // 写入数据到Flash
FlashReadBuff(  DEVICE_INFO_ADDRESS + sizeof(FlashTest),FlashRBuff,255  );  // 从Flash中读取数

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */

编译完成后,开始调试程序


三、调试

进入调试界面,添加内存观察窗口

在这里插入图片描述
添加变量观测窗口,并添加FlashWBuffFlashRBuff变量

在这里插入图片描述
并勾选窗口自动更新

在这里插入图片描述
F5,全速运行程序,可以看到数组FlashRBuff中内容与数组FlashWBuff中内容一样了:

在这里插入图片描述
观察内存窗口

在这里插入图片描述
我们尝试修改一下代码,多写几次

在这里插入图片描述

参考:
STM32 进阶教程 13 – FLASH的读写操作

STM32操作访问flash,包括写入数据到flash和从flash读取数据

  • 5
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32F0是意法半导体(STMicroelectronics)公司推出的一款32位微控制器系列,它具有灵活多样的Flash存储器,并且支持读写操作。 在STM32F0系列中,Flash存储器用于存储程序代码和数据。Flash存储器的读写操作可以通过特定的寄存器和指令来实现。 要进行Flash读操作,首先需要将Flash存储器的地址和数据长度设置好,并将读操作的指令发送到指定的寄存器中。然后,可以通过读取寄存器中的内容来获取Flash存储器中的数据。在读取数据之前,需要确保Flash存储器中的数据已经被正确地写入并保持稳定。 要进行Flash写操作,首先需要将Flash存储器的地址、写入数据和数据长度设置好,并将写操作的指令发送到指定的寄存器中。然后,系统会将写入的数据写入Flash存储器的指定地址。在写入数据时,需要确保Flash存储器中的数据已经被擦除,并校验写入的数据是否正确。 在进行Flash读写操作时,需要注意以下几点: 1. 在执行Flash写入操作之前,需要先进行Flash擦除操作,确保写入的数据在存储之前将原有数据擦除,以免造成数据不一致或错误。 2.在进行Flash读写操作时,要注意存储器的边界对齐,确保数据的正确读写。同时,要防止对未写入数据的地址进行读操作,以免读取到错误的数据。 3.在进行Flash写入操作时,要特别注意数据的正确性,避免写入错误的数据或地址,以免造成系统不稳定或功能异常。 通过以上操作,可以实现对STM32F0系列中的Flash存储器的读写使用。同时,在进行Flash操作时,还能够利用相应的检验算法来校验数据的正确性,确保操作的可靠性和安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值