【MT32F006】MT32F006之读写内部EEPROM

本文最后修改时间:2024年04月19日

一、本节简介

本文介绍如何使用MT32F006读写内部的eeprom。

二、实验平台

库版本:V1.0.0

编译软件:MDK5.37

硬件平台:MT32F006开发板(主芯片MT32F006)

仿真器:JLINK

三、版权声明

1)作者:甜甜的大香瓜

2)声明:喝水不忘挖井人,转载请注明出处。

3)本文出处:原创连载资料《简单粗暴学MT32F006》

四、实验前提

1、在进行本文步骤前,请先阅读以下章节:

1)《简单粗暴学MT32F006》的"第一章和第二章"章节。

2、在进行本文步骤前,请先实现以下章节:

暂无

五、基础知识

暂无

六、硬件原理

暂无

七、实验步骤

1 、编写并添加驱动

1 )编写驱动GUA_Flash.c(存放在"......\Projects\MT006_StdPeriph_Templates\GUA")

|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| //********************************************************************** //name: GUA_Flash.c //introduce: 存储驱动 //author: 甜甜的大香瓜 //email: 897503845@qq.com //shop: opengua.taobao.com //changetime: 2023.10.23 //********************************************************************** #include "mt006.h" #include "GUA_Delay.h" #include "GUA_Flash.h" #include "main.h" /*********************宏定义************************/ #define GUA_FLASH_SECTOR_ADDR 0x08007C00//0x1FFFF400 //1K大小的info flash首地址 /*********************内部函数************************/ static void GUA_Flash_IAP_Erase(uint32_t GUA_Addr); static void GUA_Flash_IAP_Program(GUA_U32 *pGUA_Buf, GUA_U32 nGUA_Addr, GUA_U32 nGUA_Size); //********************************************************************** //name: GUA_Flash_IAP_Erase //introduce: 擦除函数 //parameter: GUA_Addr:要擦除的地址 //return: none //author: 甜甜的大香瓜 //email: 897503845@qq.com //shop: opengua.taobao.com //changetime: 2023.06.20 //********************************************************************** static void GUA_Flash_IAP_Erase(uint32_t GUA_Addr) { FLASH_Unlock(); FLASH_Erase(GUA_Addr); FLASH_Lock(); } //********************************************************************** //name: GUA_Flash_IAP_Program //introduce: 写数据函数 //parameter: pGUA_Buf:要写的数组地址 // GUA_Addr:要写的地址 // nGUA_Size:要写的大小 //return: none //author: 甜甜的大香瓜 //email: 897503845@qq.com //shop: opengua.taobao.com //changetime: 2023.06.20 //********************************************************************** static void GUA_Flash_IAP_Program(GUA_U32 *pGUA_Buf, GUA_U32 nGUA_Addr, GUA_U32 nGUA_Size) { FLASH_Unlock(); FLASH_Program((GUA_U32 *)pGUA_Buf, nGUA_Addr, nGUA_Size); FLASH_Lock(); } //********************************************************************** //name: GUA_Flash //introduce: CS1237初始化 //parameter: none //return: none //author: 甜甜的大香瓜 //email: 897503845@qq.com //shop: opengua.taobao.com //changetime: 2022.12.29 //********************************************************************** void GUA_Flash_Control(GUA_U8 nGUA_FlashControl_Status) { GUA_U32 nGUA_Return = 0; #ifdef GUA_RANGE_10KG //读flash if(nGUA_FlashControl_Status == GUA_FLASH_CONTROL_READ) { //读秘钥 nGUA_Return = *(volatile uint32_t *)(GUA_FLASH_SECTOR_ADDR + 0*4); //如果有写过flash,则读出来 if(nGUA_Return == 0x11223344) { stGUA_Data.Key = *(volatile uint32_t *)(GUA_FLASH_SECTOR_ADDR + 0*4); stGUA_Data.UintOfWeight = *(volatile uint32_t *)(GUA_FLASH_SECTOR_ADDR + 1*4); stGUA_Data.Constant = *(volatile float *)(GUA_FLASH_SECTOR_ADDR + 2*4); stGUA_Data.Constant1 = *(volatile float *)(GUA_FLASH_SECTOR_ADDR + 3*4); stGUA_Data.Constant2 = *(volatile float *)(GUA_FLASH_SECTOR_ADDR + 4*4); stGUA_Data.Constant3 = *(volatile float *)(GUA_FLASH_SECTOR_ADDR + 5*4); stGUA_Data.Offset1 = *(volatile float *)(GUA_FLASH_SECTOR_ADDR + 6*4); stGUA_Data.Offset2 = *(volatile float *)(GUA_FLASH_SECTOR_ADDR + 7*4); stGUA_Data.Offset3 = *(volatile float *)(GUA_FLASH_SECTOR_ADDR + 8*4); } //如果没有写过flash,则保存初值 else { //擦除 GUA_Flash_IAP_Erase(GUA_FLASH_SECTOR_ADDR); //赋初值 stGUA_Data.Key = 0x11223344; stGUA_Data.UintOfWeight = GUA_UINT_OF_WEIGHT_LB; stGUA_Data.Constant = 2.12628007; stGUA_Data.Constant1 = 2.12611341; stGUA_Data.Constant2 = 2.12582994; stGUA_Data.Constant3 = 2.12516999; stGUA_Data.Offset1 = 16.625; stGUA_Data.Offset2 = 130; stGUA_Data.Offset3 = 592; //保存进flash GUA_Flash_IAP_Program((GUA_U32 *)&stGUA_Data.Key, GUA_FLASH_SECTOR_ADDR+0*4, 4); GUA_Flash_IAP_Program((GUA_U32 *)&stGUA_Data.UintOfWeight, GUA_FLASH_SECTOR_ADDR+1*4, 4); GUA_Flash_IAP_Program((GUA_U32 *)&stGUA_Data.Constant, GUA_FLASH_SECTOR_ADDR+2*4, 4); GUA_Flash_IAP_Program((GUA_U32 *)&stGUA_Data.Constant1, GUA_FLASH_SECTOR_ADDR+3*4, 4); GUA_Flash_IAP_Program((GUA_U32 *)&stGUA_Data.Constant2, GUA_FLASH_SECTOR_ADDR+4*4, 4); GUA_Flash_IAP_Program((GUA_U32 *)&stGUA_Data.Constant3, GUA_FLASH_SECTOR_ADDR+5*4, 4); GUA_Flash_IAP_Program((GUA_U32 *)&stGUA_Data.Offset1, GUA_FLASH_SECTOR_ADDR+6*4, 4); GUA_Flash_IAP_Program((GUA_U32 *)&stGUA_Data.Offset2, GUA_FLASH_SECTOR_ADDR+7*4, 4); GUA_Flash_IAP_Program((GUA_U32 *)&stGUA_Data.Offset3, GUA_FLASH_SECTOR_ADDR+8*4, 4); } } //写flash else { //擦除 GUA_Flash_IAP_Erase(GUA_FLASH_SECTOR_ADDR); //保存 GUA_Flash_IAP_Program((GUA_U32 *)&stGUA_Data.Key, GUA_FLASH_SECTOR_ADDR+0*4, 4); GUA_Flash_IAP_Program((GUA_U32 *)&stGUA_Data.UintOfWeight, GUA_FLASH_SECTOR_ADDR+1*4, 4); GUA_Flash_IAP_Program((GUA_U32 *)&stGUA_Data.Constant, GUA_FLASH_SECTOR_ADDR+2*4, 4); GUA_Flash_IAP_Program((GUA_U32 *)&stGUA_Data.Constant1, GUA_FLASH_SECTOR_ADDR+3*4, 4); GUA_Flash_IAP_Program((GUA_U32 *)&stGUA_Data.Constant2, GUA_FLASH_SECTOR_ADDR+4*4, 4); GUA_Flash_IAP_Program((GUA_U32 *)&stGUA_Data.Constant3, GUA_FLASH_SECTOR_ADDR+5*4, 4); GUA_Flash_IAP_Program((GUA_U32 *)&stGUA_Data.Offset1, GUA_FLASH_SECTOR_ADDR+6*4, 4); GUA_Flash_IAP_Program((GUA_U32 *)&stGUA_Data.Offset2, GUA_FLASH_SECTOR_ADDR+7*4, 4); GUA_Flash_IAP_Program((GUA_U32 *)&stGUA_Data.Offset3, GUA_FLASH_SECTOR_ADDR+8*4, 4); } #else //读flash if(nGUA_FlashControl_Status == GUA_FLASH_CONTROL_READ) { //读秘钥 nGUA_Return = *(volatile uint32_t *)(GUA_FLASH_SECTOR_ADDR + 0*4); //如果有写过flash,则读出来 if(nGUA_Return == 0x11223344) { stGUA_Data.Key = *(volatile uint32_t *)(GUA_FLASH_SECTOR_ADDR + 0*4); stGUA_Data.UintOfWeight = *(volatile uint32_t *)(GUA_FLASH_SECTOR_ADDR + 1*4); stGUA_Data.Constant = *(volatile float *)(GUA_FLASH_SECTOR_ADDR + 2*4); stGUA_Data.Constant1 = *(volatile float *)(GUA_FLASH_SECTOR_ADDR + 3*4); stGUA_Data.Constant2 = *(volatile float *)(GUA_FLASH_SECTOR_ADDR + 4*4); stGUA_Data.Offset1 = *(volatile float *)(GUA_FLASH_SECTOR_ADDR + 5*4); stGUA_Data.Offset2 = *(volatile float *)(GUA_FLASH_SECTOR_ADDR + 6*4); } //如果没有写过flash,则保存初值 else { //擦除 GUA_Flash_IAP_Erase(GUA_FLASH_SECTOR_ADDR); //赋初值 stGUA_Data.Key = 0x11223344; stGUA_Data.UintOfWeight = GUA_UINT_OF_WEIGHT_LB; /* 30元传感器 stGUA_Data.Constant = 4.16133022; stGUA_Data.Constant1 = 4.16074514; stGUA_Data.Constant2 = 4.15951014; stGUA_Data.Offset1 = 58.53125; stGUA_Data.Offset2 = 428.90625; */ //10元传感器 stGUA_Data.Constant = 2.21304011; stGUA_Data.Constant1 = 2.21279502; stGUA_Data.Constant2 = 2.21271491; stGUA_Data.Offset1 = 24.515625; stGUA_Data.Offset2 = 48.515625; //保存进flash GUA_Flash_IAP_Program((GUA_U32 *)&stGUA_Data.Key, GUA_FLASH_SECTOR_ADDR+0*4, 4); GUA_Flash_IAP_Program((GUA_U32 *)&stGUA_Data.UintOfWeight, GUA_FLASH_SECTOR_ADDR+1*4, 4); GUA_Flash_IAP_Program((GUA_U32 *)&stGUA_Data.Constant, GUA_FLASH_SECTOR_ADDR+2*4, 4); GUA_Flash_IAP_Program((GUA_U32 *)&stGUA_Data.Constant1, GUA_FLASH_SECTOR_ADDR+3*4, 4); GUA_Flash_IAP_Program((GUA_U32 *)&stGUA_Data.Constant2, GUA_FLASH_SECTOR_ADDR+4*4, 4); GUA_Flash_IAP_Program((GUA_U32 *)&stGUA_Data.Offset1, GUA_FLASH_SECTOR_ADDR+5*4, 4); GUA_Flash_IAP_Program((GUA_U32 *)&stGUA_Data.Offset2, GUA_FLASH_SECTOR_ADDR+6*4, 4); } } //写flash else { //擦除 GUA_Flash_IAP_Erase(GUA_FLASH_SECTOR_ADDR); //保存 GUA_Flash_IAP_Program((GUA_U32 *)&stGUA_Data.Key, GUA_FLASH_SECTOR_ADDR+0*4, 4); GUA_Flash_IAP_Program((GUA_U32 *)&stGUA_Data.UintOfWeight, GUA_FLASH_SECTOR_ADDR+1*4, 4); GUA_Flash_IAP_Program((GUA_U32 *)&stGUA_Data.Constant, GUA_FLASH_SECTOR_ADDR+2*4, 4); GUA_Flash_IAP_Program((GUA_U32 *)&stGUA_Data.Constant1, GUA_FLASH_SECTOR_ADDR+3*4, 4); GUA_Flash_IAP_Program((GUA_U32 *)&stGUA_Data.Constant2, GUA_FLASH_SECTOR_ADDR+4*4, 4); GUA_Flash_IAP_Program((GUA_U32 *)&stGUA_Data.Offset1, GUA_FLASH_SECTOR_ADDR+5*4, 4); GUA_Flash_IAP_Program((GUA_U32 *)&stGUA_Data.Offset2, GUA_FLASH_SECTOR_ADDR+6*4, 4); } #endif } |

注意:本驱动里有很多香瓜项目中的数据,自行修改去除!!!!

2 )编写驱动头文件GUA_Flash.h

(存放在"......\Projects\MT006_StdPeriph_Templates\GUA")

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| //********************************************************************** //name: GUA_Flash.h //introduce: 存储驱动的头文件 //author: 甜甜的大香瓜 //email: 897503845@qq.com //shop: opengua.taobao.com //changetime: 2023.06.20 //********************************************************************** #ifndef GUA_FLASH_H #define GUA_FLASH_H /*********************头文件************************/ #include "main.h" /*********************宏定义************************/ //类型宏 #ifndef GUA_C typedef char GUA_C; #endif #ifndef GUA_U8 typedef unsigned char GUA_U8; #endif #ifndef GUA_8 typedef signed char GUA_8; #endif #ifndef GUA_U16 typedef unsigned short GUA_U16; #endif #ifndef GUA_16 typedef signed short GUA_16; #endif #ifndef GUA_U32 typedef unsigned long GUA_U32; #endif #ifndef GUA_32 typedef signed long GUA_32; #endif //读写flash控制的宏 #define GUA_FLASH_CONTROL_READ 0 //读flash #define GUA_FLASH_CONTROL_WRITE 1 //写flash /*********************外部变量************************/ /*********************外部函数声明************************/ extern void GUA_Flash_Control(GUA_U8 nGUA_FlashControl_Status); #endif |

3 )工程中添加驱动文件

4 )在MDK设置中添加驱动源文件路径

2 、添加库的驱动

1)添加库的驱动文件(为了方便一次性都添加进来,已有则不用添加)

2 )添加库的驱动头文件(mt006_conf.h 中)(为了方便一次性都添加进来,已有则不用添加)

3 、在应用层中调用

1 )添加驱动头文件(main.c中)

|------------------------|
| #include "GUA_Flash.h" |

2 )添加测试代码(main.c的main函数中)

|-----------------------------------------------------------------------------------------------------------------------------------------------|
| //读出flash数据 GUA_Flash_Control(GUA_FLASH_CONTROL_READ); //修改flash数据 //......(使用全局变量修改) //写入flash数据 GUA_Flash_Control(GUA_FLASH_CONTROL_WRITE); |

八、注意事项

暂无

九、实验结果

暂无

相关推荐
沐欣工作室_lvyiyi2 小时前
超市智能货架系统设计与实现(论文+源码)
c语言·单片机·课程设计·电子信息工程毕业设计·黑龙江工商学院·广州工商学院·成都工业学院
老孟说禅2 小时前
硬件测试 - 测试用例设计:测试需求分析、测试点提取、测试用例编写方法
单片机·嵌入式硬件·智能硬件
C++ 老炮儿的技术栈3 小时前
static的作用
c语言·c++·人工智能·单片机·c
逐光者9333 小时前
STM32通信协议——I2C
stm32·单片机·嵌入式硬件
千秋岁rr3 小时前
15.PWR电源控制
单片机·嵌入式硬件
甜甜的大香瓜3 小时前
【MT32F006】MT32F006之PWM控制背光灯(白光)
单片机
李日华大战鸡红3 小时前
FOC SVPWM过调制(学习记录)
stm32·单片机·学习
千里马024 小时前
STM32读取AD7606-4(HAL库)
stm32·单片机·嵌入式硬件