查看: 2570|回复: 0

STM32 Nucleo初级教程6:EEPROM-24C04读写

[复制链接]
  • TA的每日心情
    开心
    2018-9-18 06:28
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2014-12-9 16:52:36 | 显示全部楼层 |阅读模式
    分享到:
    在上一篇文章中,讲解了在STM32-NUCLEO-072RB开发平台上实现按键驱动,这一篇文章讲解利用软件模拟I2C方式实现24C04-EEPROM的读写,并增加按键控制24C04内容的读写。
    在STM32上集成有I2C模式,并且最高速率可达1M bps,支持标准400k bps通信方式。针对I2C模块,STM32提供了硬件的I2C库函数,为了规避专利,设计的比较复杂,在使用中会存在一些问题,为此ST单独提供 了STM32_I2C_CPAL_Vx.x.x 软件包。在一般应用中,为了保证存储器读写的稳定性和数据准确性,尽量采用软件模拟I2C的方式读写EEPROM。相比硬件I2C操作,软件模拟I2C方式速度有限。在非要求高速(400k以上) 时,可以考虑用这种方式。
    软件模拟I2C方式就是采用两个GPIO端口模拟出I2C总线SCL和SDA的通信协议。这里不做详细介绍,不清楚者可以去阅读《I2C总线协议》参考资料。下面看一下采用软件模拟I2C方式时的硬件电路。
    一、STM32-NUCLEO-072RB开发板外接EEPROM-24C04硬件电路
    因为STM32-NUCLEO-072RB开发平台是一个核心板,没有外部资源,24C04模块需要外接,这里采用了PB6/PB7端口来实现I2C中的SCL/SDA信号线。
             硬件原理图如下:
            

            
             外接的模块实物图:
            

       
    下面看一下具体的代码实现
    二、Keil-mdk工程软件代码实现
    1、Keil-mdk工程模板中加入I2C.C/24CXX.C文件, 在includes.h文件中加入I2C.H/24CXX.H头文件   

                   
    2、SCL/SDA信号线在I2C.H头文件宏定义

    3、软件模拟I2C总线代码分析(I2C.C)

    首先是端口代码初始化配置,然后是模拟I2C总线的操作时序。
    4、EEPROM读写函数的代码分析24CXX.C)
    有了I2C总线的操作时序,就可以实现24C04存储器的读写函数,这里不针对具体型号可以实现(24C01-24C256)存储器内容的读写。

    有了这四个函数,就可以实现EERPOM读写了。下面是测试代码
    5、24C04-EEPROM读写测试:

    这里就是向24C04里面写入0-64,然后读取地址0x10开始的连续16个数据。
    6、实现现象:

    可以看到,这里读出的数据就是写入的数值。为了进一步验证,采用按键来控制读写,为此需要重新修改按键中断服务函数
    7、按键中断服务函数代码实现:

    定义一个状态机变量,然后通过按键来控制写入和读取24C04。开始为变量Run_state =0xee,当按第二次时,将保存在地址0x30处的Run_state值取出,然后+1打印,值实际应为Run_state =0xef;
    8、main.c函数代码配置:
    对主函数做如下配置:

    运行结果如下:
    9、实现现象:

    硬件实物连接图如下:

    代码地址链接
    https://www.eeboard.com/bbs/thread-39696-1-1.html
    摩尔吧视频地址链接
    https://www.moore8.com/courses/306
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-4-25 18:29 , Processed in 0.122361 second(s), 18 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.