STM32之flash的读写

一、创建STM32CUBEMX工程

芯片选择F103C8
在这里插入图片描述
配置定时器
在这里插入图片描述
打开外部时钟
在这里插入图片描述
配置时钟
在这里插入图片描述
配置PC13为output对应板子上的LED
在这里插入图片描述
设置堆栈大小为4K,导出
在这里插入图片描述

二、KEIL下的配置

将flash.c 和flash.h添加到工程中
在这里插入图片描述
添加代码如下:

#include "flash.h"

在这里插入图片描述

uint8_t FlashWBuff [255];
uint8_t FlashRBuff [255];

在这里插入图片描述

	uint8_t i;
	uint8_t FlashTest[] = "Hello This is xiluoluwo Flash Test DEMO";

在这里插入图片描述

编译
在这里插入图片描述
成功。
DEBUG下选择STlink
在这里插入图片描述

将程序下载到单片机中
在这里插入图片描述

在这里插入图片描述

点击进入debug
在这里插入图片描述
在view下打开memory1窗口
在这里插入图片描述
打开watch1窗口
在这里插入图片描述

Periodic Windows Update开启变量自动更新
在这里插入图片描述
将变量FlashWBuff 和 FlashRBuff加入到 Watch1
在这里插入图片描述

在memory1中输入要观察的地址0x800c000
在这里插入图片描述

定义好的句子写到了地址0x0800c000中了
在这里插入图片描述

三、参考

https://blog.youkuaiyun.com/m0_58414679/article/details/122220799?spm=1001.2014.3001.5501

### STM32 Flash读写操作详解 #### 一、STM32C011 Flash结构与特性概述 STM32C011 系列微控制器内置 Flash 存储器,用于程序存储与数据保存。该系列器件支持页面擦除、双字写入以及读写保护功能[^1]。 #### 二、Flash编程前准备事项 在执行任何Flash修改之前,需确保已解锁Flash访问权限并配置好相应的参数设置。具体来说,在开始对Flash进行操作前应调用`HAL_FLASH_Unlock()`函数解除锁定状态;完成所有必要的更改之后,则应当再次锁住Flash以防意外改动,即调用`HAL_FLASH_Lock()`函数。 #### 三、Flash擦除过程说明 为了向Flash中写入新数据,首先要清除目标位置上的原有内容。这可以通过调用`HAL_FLASHEx_Erase()`函数实现,此函数接收两个参数——指向待处理扇区信息的数据指针和错误码变量地址。需要注意的是,每次只能按页或整片方式删除,而不能单独清空某个特定单元格内的数值。 ```c // 定义要被擦除区域的相关属性 FLASH_EraseInitTypeDef EraseInitStruct; uint32_t PageError = 0; EraseInitStruct.TypeErase = FLASH_TYPEERASE_PAGES; // 设置为页面擦除模式 EraseInitStruct.PageAddress = ADDR_FLASH_PAGE_256; // 指定起始页面地址 EraseInitStruct.NbPages = 1; // 需要擦除的页面数量 if (HAL_FLASHEx_Erase(&EraseInitStruct, &PageError) != HAL_OK){ /* 错误处理 */ } ``` #### 四、Flash写入流程解析 当完成了上述准备工作后就可以正式着手于数据录入环节了。这里推荐采用批量传输的方式来进行多字节连续记录,因为这样可以有效减少因频繁切换指令所带来的额外开销。下面给出了一段示范性的源代码片段: ```c #define DATA_ADDRESS ((uint32_t)ADDR_FLASH_PAGE_256) for(i=0;i<sizeof(aData)/sizeof(*aData);i++){ if(HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD,DATA_ADDRESS+i*8,*((uint64_t*)&aData[i]))!= HAL_OK){ /* 如果发生异常则立即终止循环体 */ break; } } ``` 这段代码实现了将数组 `aData[]` 中的内容逐个转换成64位宽的数据项后再依次送入指定内存区间内存放的功能。其中使用的宏定义`ADDR_FLASH_PAGE_256`代表的就是第二百五十六号物理页的实际基址偏移量。 #### 五、注意事项提醒 尽管不同型号间存在一定的共通之处,但对于某些高级特性和底层接口而言还是存在着差异化的考量因素。因此建议开发者们务必参照官方文档仔细核对自己所选用的具体版本是否完全适用当前方案,并据此作出适当调整以确保最终成品能够稳定运行[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值