OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5054|回复: 2

STM32F407如何在AT24C02存储设定数值

[复制链接]

49

主题

148

帖子

0

精华

高级会员

Rank: 4

积分
683
金钱
683
注册时间
2017-11-23
在线时间
133 小时
发表于 2021-1-3 17:40:13 | 显示全部楼层 |阅读模式
1金钱
各位大神,使用STM32F407时,需要把设定的数值存入单片机的AT24C04,而下次启动时,系统自动从存储地址再读回设定值,
不知如何在AT24C02里定义个地址来存储设定数值,(设定数值如浮点数6.2104等小数,整数9,540等整数)
比如有个不断变化的自加值,把自加值存入AT24C02,再从AT24C02里读出来。
请知道的大神指点指点!!提前致谢!!

以下是原子哥的探索者里的示例,示例存储的是一串文字,我想在AT24C02里定义多个地址,来存储多个设定数值,

这是main主程序
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "key.h"
#include "lcd.h"
#include "usmart.h"
#include "24cxx.h"


//这2行是定义存储的内容
const u8 TEXT_Buffer[]={"Explorer STM32F4 IIC TEST"};//定义一个数组,数组内容是Explorer STM32F4 IIC TEST
#define SIZE sizeof(TEXT_Buffer)

int main(void)
{
  u8 key;
        u16 i=0;
        u8 datatemp[SIZE];         
       
  HAL_Init();                  //初始化HAL库   
  Stm32_Clock_Init(336,8,2,7); //设置时钟,168Mhz
        delay_init(168);                   //初始化延时函数
        uart_init(115200);                 //初始化USART
        usmart_dev.init(84);                     //初始化USMART
        LED_Init();                                                //初始化LED       
        KEY_Init();                                                //初始化KEY
        LCD_Init();                                   //初始化LCD
       
        AT24CXX_Init();                                    //初始化IIC
        POINT_COLOR=RED;
        LCD_ShowString(30,50,200,16,16,"Apollo STM32F4/F7");
        LCD_ShowString(30,70,200,16,16,"IIC TEST");       
        LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");
        LCD_ShowString(30,110,200,16,16,"2016/1/13");         
        LCD_ShowString(30,130,200,16,16,"KEY1:Write  KEY0:Read");        //显示提示信息          
        while(AT24CXX_Check())//检测不到24c02
        {
                LCD_ShowString(30,150,200,16,16,"24C02 Check Failed!");
                delay_ms(500);
                LCD_ShowString(30,150,200,16,16,"Please Check!      ");
                delay_ms(500);
                LED0=!LED0;//DS0闪烁
        }
        LCD_ShowString(30,150,200,16,16,"24C02 Ready!");   
        POINT_COLOR=BLUE;//设置字体为蓝色          
        while(1)
        {
                key=KEY_Scan(0);
                if(key==KEY1_PRES)//KEY1按下,写入24C02
                {
                        LCD_Fill(0,170,239,319,WHITE);//清除半屏   
                        LCD_ShowString(30,170,200,16,16,"Start Write 24C02....");
                        AT24CXX_Write(0,(u8*)TEXT_Buffer,SIZE);//这行是写入的内容
                        LCD_ShowString(30,170,200,16,16,"24C02 Write Finished!");//提示传送完成
                }
                if(key==KEY0_PRES)//KEY0按下,读取字符串并显示
                {
                        LCD_ShowString(30,170,200,16,16,"Start Read 24C02.... ");
                        AT24CXX_Read(0,datatemp,SIZE);//这行是读取的内容
                        LCD_ShowString(30,170,200,16,16,"The Data Readed Is:  ");//提示传送完成
                        LCD_ShowString(30,190,200,16,16,datatemp);//显示读到的字符串
                }
                i++;
                delay_ms(10);
                if(i==20)
                {
                        LED0=!LED0;//提示系统正在运行       
                        i=0;
                }                  
                }
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

821

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3359
金钱
3359
注册时间
2011-11-10
在线时间
207 小时
发表于 2021-1-3 23:10:47 | 显示全部楼层
AT24C02是按字节存取的。不管你存文字还是其他值都是一样的。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2021-1-4 02:30:34 | 显示全部楼层
建议用结构体,强制转换来存取,比较方便。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-3-1 05:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表