蓝桥杯物联网竞赛_STM32L071KBU6_对于EEPROM的新理解

EEPROM写函数:

c 复制代码
void Function_GetEepromData(){
	 Function_EepromRead(4, BUFF);
	 OLED_ShowChar(0, 0, BUFF[0] + '0');
   OLED_ShowChar(0, 2, BUFF[1] + '0');	
	 BUFF[0] ++;
	 BUFF[1] ++;
   HAL_FLASHEx_DATAEEPROM_Unlock();
   HAL_FLASHEx_DATAEEPROM_Program(FLASH_TYPEPROGRAMDATA_WORD, 4 + DATA_EEPROM_BASE, *BUFF);
	 HAL_FLASHEx_DATAEEPROM_Lock();
}

流程很简单其实:就是一个开锁写或者读再上锁的过程

复制代码
HAL_FLASHEx_DATAEEPROM_Unlock();

从函数名可以看出叫FLASH扩展函数,EPPROM数据区开锁

复制代码
HAL_FLASHEx_DATAEEPROM_Program

program指的是烧录,意思是将数据烧录到EEPROM数据区域

复制代码
FLASH_TYPEPROGRAMDATA_WORD

按整个字烧录

烧录函数一次只能写一个数据进去

读取函数:

c 复制代码
void Function_EepromRead(uint32_t address, uint32_t* buff){
	 uint32_t* TrueValue = (uint32_t* )(DATA_EEPROM_BASE + address);
	 HAL_FLASHEx_DATAEEPROM_Unlock();
   I = 2;
	 while(I --){
	   *buff ++ = *TrueValue ++;
	 }
	 HAL_FLASHEx_DATAEEPROM_Lock();
}

DATA_EEPROM_BASE就是获取EEPROM数据区地址,然后开锁,读取关锁

对于*buff ++ = *TrueValue ++ 这部分代码我又额外分析了一下

c 复制代码
#include <stdio.h>
#include <stdint.h>
uint32_t DATA[5] = {1, 2, 3};
uint32_t* ADDRESS = DATA; 
int main(){
	
	printf("ADDRESS地址:%p\n", ADDRESS);
	printf("*ADDRESS的值:%d\n", *ADDRESS);
	
	uint32_t temp = *ADDRESS ++;
	
	printf("temp的值:%d *ADDRESS操作后的值:%d\n", temp, *ADDRESS);
	printf("ADDRESS操作后的值:%p", ADDRESS);
} 


通过输出不难看出++操作的优先级是比*的优先级要低的,且uint32_t每个占空间4字结,这也是为什么address要是4的倍数否者就读不出来了

有意思的是:

c 复制代码
#include <stdio.h>
#include <stdint.h>

char a = 1;
uint32_t b = 3;
char* q = &a;
uint32_t* d = &b;

int main(){
	 printf("q: %p, d: %p\n", q, d);
	 q = q + 1;
	 d = d + 1;
	 printf("(q + 1) : %p, (d + 1) : %p\n", q, d);
} 

对于char类型占1字节地址+ 1那么地址真是增加1,而对于uint32_t即32位的来说+1操作是地址向后挪4位刚好一个uint32_t的距离

相关推荐
Kisorge4 分钟前
【电机控制器】 基于STSPIN32G4的FOC控制
stm32·嵌入式硬件·算法
乐橙开放平台1 小时前
老旧小区监控事件驱动派单:基于 setMessageCallback 的 msgType 分级与工单闭环实现
后端·物联网·音视频
JNX_SEMI2 小时前
Hi5000Q/H 6.5~75V宽输入——与H5227A完全对等,无缝适配现有电源方案-聚能芯-智芯官方授权一级代理
驱动开发·单片机·嵌入式硬件·物联网·硬件工程
哥不想学算法2 小时前
STM32零基础教程(五):UART串口通信与协议设计
stm32·单片机·嵌入式硬件
WWJA王文举2 小时前
STM32时钟树怎么看?一步理解SYSCLK、HCLK、PCLK和外设时钟配置
stm32·单片机·嵌入式硬件
十月的皮皮2 小时前
STM32从零到量产开发:四路继电器工业控制模块开发 - 上位机操作说明书
c语言·stm32·单片机·stm32cubemx
sunywz2 小时前
【从零搭建物联网智能充电桩系统】6、用户服务与钱包:微信登录、JWT 鉴权与乐观锁并发控制
物联网
GoFly开发者3 小时前
GoFly 社区 GMQT|国产自研 MQTT‑Broker,打造私有化物联网消息底座
物联网·mqtt·golang·mqtt broker·mqtt私有化部署
ShiMetaPi3 小时前
ShiMetaPi-Pico-G1快速入门:04 系统登录
stm32·单片机·嵌入式硬件
程序猿老杨4 小时前
MQTT协议深度解析:从ESP32设备端到云端Broker的工程化实践
后端·物联网·芯片