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

作者: fengye5340
上传时间为: 2014-12-09 04:52 PM
2014-12-09
阅读:

在上一篇文章中,讲解了在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、实现现象:

硬件实物连接图如下:

代码地址链接

http://www.eeboard.com/bbs/thread-39696-1-1.html

摩尔吧视频地址链接

http://www.moore8.com/courses/306

全部评论 ()
条评论
写评论

创建讨论帖子

登录 后参与评论
系统提示