当前位置:   article > 正文

智能车模块详解——数据存储与读写(eeprom/flash)_tc264 flash

tc264 flash

目录

数据读写

 数据存储


调参(如PID)我们需要把参数保存下来,即使关电也能保存,并且需要的时候能够读取。

这就需要数据存储模块。

数据读写

TC264自带FLASH,

STC32G自带eeprom,

逐飞已经写好了相应的库,因此读写函数方面直接调用即可。

如果你用的是这两块板子,直接转到下面的数据存储方面的讲解

 我当时用的是STC16F,不自带eeprom,所以硬件画了个AT24C02模块,数据的读写用的IIC通信。逐飞写了AT24C02的库。

 AT24C02详解(蓝桥杯单片机模块(IIC总线))__WILLPOWER_的博客-CSDN博客_at24c02

 AT24C02 E2PROM芯片详解_Z小旋的博客-CSDN博客_at24c02

下面简单讲一下怎么用,当然这都需要自己去研究

设备地址:

设备需要一个8位的设备地址字,后面跟着一个启动条件,以使芯片能够进行读或写操作
设备地址字由一个强制的1,0序列的前四个最有效的位,如所示。这是所有EEPROM设备的共同特点。
接下来的3位是1K/2K EEPROM的A2、A1和AO设备地址位。这3位必须与相应的硬接线输入引脚相比较。
最后一位为0表示写。最后一位为1表示读



前4位已经固定了,是1010换成BCD码就是A

举个例子,假设,我A2,A1,A0都接地 即;A2 = 0 A1 = 0 A0 = 0

那么写地址就是1010 0000 也就是0xA0

假设,我A2,A1,A0都接了高电平 即;A2 = 1 A1 =1 A0 = 1

那么写地址就是1010 1110 也就是0xAE

这是24C02硬件手册的一个图

  1. //AT24C02模块支持256个8位数据存储
  2. //该模块使用的是IIC总线控制
  3. #define AT24C02_DEV_ADDR 0xA0>>1 //IIC写入时的地址字节数据,+1为读取
  4. //AT24C02的地址是可变地址当A0 = 0 A1 = 0 A2 = 0的时候,
  5. //设备地址位A0,如果需要修改设备地址,请查看AT24C02手册进行修改

然后我们看SEEKFREE_AT24C02.c文件

uint8 at24c02_read_byte(uint8 byte_reg)

{

    delay_ms(6);

    return simiic_read_reg(AT24C02_DEV_ADDR, byte_reg, SIMIIC);

}

发现用的是模拟IIC,

因此我们就需要到SEEKFREE_IIC.h文件中去找/修改 模拟IIC的SCL与SDA引脚

#define SIMIIC_SCL_PIN P32

#define SIMIIC_SDA_PIN P33

当然也可以参照这个库,改成硬件IIC

这些做完就可以调用AT24c02的读取与写入了

  1. void at24c02_write_byte(uint8 byte_reg, uint8 dat);
  2. uint8 at24c02_read_byte(uint8 byte_reg);
  3. void at24c02_write_bytes(uint8 byte_reg, uint8 *dat_add, uint8 num);
  4. void at24c02_read_bytes(uint8 byte_reg, uint8 *dat_add, uint8 num);


 数据存储

有了上面的函数,我们就可以进行寄存器的读写

这是我代码的思路

  1. /****************************************** 参数写入 ******************************************/
  2. uint8 FlashParamsWrite(void)
  3. {
  4. uint8 i;//第几个数据
  5. uint8 cnt_i = 0;//地址的第几位
  6. uint8 cnt_f = 0;//地址的第几位
  7. //显示界面
  8. ips114_clear(BLUE);
  9. IPS114_PENCOLOR = RED;
  10. ips114_showstr(0,3,"Start Write Params !");
  11. delay_ms(10);
  12. //读取参数 (赋值)
  13. /*^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*/
  14. integnow[0]=Integ_data0;
  15. integnow[1]=Integ_data1;
  16. integnow[2]=Integ_data2;
  17. integnow[3]=Integ_data3;
  18. /*^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*/
  19. uint8dat[0]=uint8_data0;
  20. uint8dat[1]=uint8_data1;
  21. uint8dat[2]=uint8_data2;
  22. /*^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*/
  23. //拆分字节准备写入参数
  24. for(i=0;i<Integ_Num;i++)
  25. {
  26. integdat[cnt_i++]=BYTE0(integnow[i]);
  27. integdat[cnt_i++]=BYTE1(integnow[i]);
  28. }
  29. //写flash(仅单个寄存器)
  30. at24c02_write_bytes(integReg,integdat,2*Integ_Num);
  31. at24c02_write_bytes(uint8Reg,uint8dat,uint8_Num);
  32. ips114_clear(BLUE);
  33. ips114_showstr(0,3,"Write Params OK!");
  34. delay_ms(10);
  35. return 1;
  36. }
  1. /****************************************** 参数读取 ******************************************/
  2. uint8 FlashParamsRead(void)
  3. {
  4. uint8 i;
  5. //读整数--
  6. at24c02_read_bytes(integReg, integdat,2*Integ_Num);
  7. //合并字节准备写入参数
  8. for(i=0;i<Integ_Num;i++)
  9. {
  10. integnow[i]=(integdat[2*i]<<8)|integdat[2*i+1];
  11. }
  12. //读uint8
  13. at24c02_read_bytes(uint8Reg, uint8dat,uint8_Num);
  14. //写各个参数
  15. /*^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*/
  16. Integ_data1=integnow[1];
  17. Integ_data2=integnow[2];
  18. Integ_data3=integnow[3];
  19. Integ_data4=integnow[4];
  20. /*^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*/
  21. uint8_data0=uint8dat[0];
  22. uint8_data1=uint8dat[1];
  23. uint8_data2=uint8dat[2];
  24. uint8_data3=uint8dat[3];
  25. /*^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*/
  26. delay_ms(200);
  27. return 1;
  28. }

系列文章目录

文章分为三个层次

速通版是希望通过简化的步骤搭建出寻迹小车,进而了解整个智能车是如何实现的,快速上手,为后续参与智能车竞赛做基础。

如果只是为了完成学校智能车初期培训,做出能简单循迹的小车,可以看这个速通版。

全程引导篇是讲了做出能够完赛的智能车的整个过程,大部分文章只是简单点拨一下,但是附上了相关的文章链接,方便根据自己的情况深入了解。

全程引导篇,能够带你比较系统地了解整个智能车的制作过程,推荐备赛初期或者有车模之后学习。

详细讲解篇是全程引导篇的补充,由于全程引导篇是引导性质,文章内容只是点拨,缺乏相应的原理或代码讲解,因此写详细讲解篇作为补充。

详细讲解篇会渗透在全程引导篇中。


速通版


智能小车速通版——手把手教程


全程引导篇


智能车入门——IDE安装以及库函数选用 

智能车入门——编程语言(c)的学习

智能车入门——简单驱动常用模块

智能车入门——车模器件篇

智能车入门——模块化编程

智能车入门——跑车前的零碎知识

智能车入门——电磁循迹原理与实现

智能车入门——实现低速完赛


详细讲解篇


智能车入门补充篇

智能车入门补充篇——逐飞开源库介绍

智能车入门补充篇——常见宏定义和使用

智能车入门补充篇——模块化编程

智能车入门补充篇——电感值处理、转向控制与巡线

智能车入门补充篇——元素识别

智能车模块详解——按键及按键调参

智能车模块详解——数据存储与读写(eeprom/flash)

智能车入门——I/O、PWM

智能车入门——中断

智能车入门——编码器

智能车入门——陀螺仪

智能车入门——摄像头和CCD

智能车入门——舵机

(更新中)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/461757
推荐阅读
相关标签
  

闽ICP备14008679号