基础实验 – 基于省赛资源套装
ex6 E2PROM读写实验
实验目的:掌握芯片内部E2PROM的使用方法。 (注意:因为是按照‘字’的方式写入的,所以写入的地址必须是‘4’的整数倍,否则会进入hard fault)
实验内容:将LED灯闪烁次数写入E2PROM,每次重启设备后,闪烁次数加1,同时E2PROM的数据更新。
实验现象:每次重启设备后,LD5闪烁次数加1。
STM32CubeMX配置
- 目标选择
- 引脚分配
- 外设配置
- 时钟配置
- 工程配置
1.目标选择
新建工程
选择MCU 输入STM32L071KB
2.引脚分配
PC15引脚:GPIO_Output(输出模式)
3.外设配置
GPIO输出电平:高
GPIO模式:推挽输出
GPIO上拉电阻/下拉电阻:不上拉电阻/下拉电阻
输出速度:非常快
4.时钟配置
时钟源:旁路时钟源
时钟频率:32MHz时钟
5.工程配置
keil5程序编写
1.选择STM32L071KBUx芯片
2.HAL库函数解析
锁定解锁函数
对 FLASHEx_DATAEEPROM 进行写操作前必须先解锁,使用的 HAL 库函数是:
HAL_StatusTypeDef HAL_FLASHEx_DATAEEPROM_Unlock() //解锁函数
在对 FLASHEx_DATAEEPROM 写操作完成之后,我们要锁定 FLASHEx_DATAEEPROM,使用的 HAL 库函数是:
HAL_StatusTypeDef HAL_FLASHEx_DATAEEPROM_Lock() //解锁函数
写操作函数
HAL 库提供了一个通用的FLASHEx_DATAEEPROM写操作函数,该函数声明如下:
HAL_StatusTypeDef HAL_FLASHEx_DATAEEPROM_Program(uint32_t TypeProgram, uint32_t Address, uint32_t Data) //写操作函数
入口参数 | 描述 |
---|---|
TypeProgram | 用来区分要写入的数据类型,取值为:FLASH_TYPEPROGRAM_BYTE(字节:8 位),FLASH_TYPEPROGRAM_HALFWORD(半字 : 16 位 ) , FLASH_TYPEPROGRAM_WORD ( 字 : 32 位 ) 和FLASH_TYPEPROGRAM_DOUBLEWORD(双字:64 位) |
Address | 用来设置要写入数据的 FLASHEx_DATAEEPROM 地址 |
Data | 写入的数据类型,这个参数默认是 64 位的,如果你要写入小于 64 位的数据比如 16 位,程序会进行类型转换。 |
擦拭函数
HAL 提供了一个通用的基于小区擦除的函数 ,该函数声明如下:
HAL_StatusTypeDef HAL_FLASHEx_DATAEEPROM_Erase(uint32_t Address)
入口参数 | 描述 |
---|---|
Address | 用来设置要擦拭数据的 FLASHEx_DATAEEPROM 地址) |
3.添加代码
在USER CODE BEGIN 1和USER CODE END 1之间添加以下代码
在USER CODE BEGIN 4和USER CODE END 4之间定义EEPROM读函数
在USER CODE BEGIN PFP和CODE END PFP之间声明读函数
在USER CODE BEGIN 2和USER CODE END 2之间添加以下代码