本文最后修改时间: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); |
八、注意事项
暂无
九、实验结果
暂无