关于STM32使用硬件i2c读写AT24C256实验遇到的问题

3 篇文章 1 订阅
3 篇文章 0 订阅

硬件环境:XNUCLEO开发板(STM32F411RCT6芯片)、MiniSTM32 V3.41开发板(STM32F103RCT6芯片)

软件环境:IAR for ARM 8.30.1、Keil5

现将工程代码附上:

stm32f1xx链接:https://download.csdn.net/download/u011727389/10935701

stm32f4xx链接:https://download.csdn.net/download/u011727389/10935673

下面介绍我做的几个实验:

一、软件模拟i2c实验

1、在ministm32开发板软件模拟i2c协议读写at24c02没有问题,也就是正点原子官方给的例子

2、分为下面两个步骤

a)在ministm32开发板,用开发板PB0、PB1分别接at24c256模块的SCL、SDA引脚,at24c256模块的VCC、GND接开发板的BOOT模块的3.3V、GND

b)将正点原子i2c实验的程序中EE_TYPE改成AT24C256,发现逻辑分析仪还是抓不到波形,按道理软件GPIO模拟i2c时序,比如,对于读操作,先要一个起始信号,发送从设备地址,发送需要读eeprom的地址,再接收需要读的数据(此时GPIO为输入模式),再发送停止信号。GPIO上的对应端口是有电压变化的,是应该可以抓到波形的,但却没抓到,那就应该分析GPIO端口配置是否有问题,对于stm32f1xx看寄存器GPIOX_CRL、GPIOX_CRH、AFIO。由于stm32f1xx有5组GPIO(A- E),每组16个端口(PX0-PX15),所以会有高低两个寄存器来配置这16个端口的上下拉。输入输出模式;对于AFIO,由于AFIO默认值是0,故如果选择的是使用默认复用端口,则不用配置,下面会介绍。

          

          对照上图所示正确配置后(如果使用i2c1的PB6/7端口的话则不需要配置AFIO_MARP,因为默认值是0)stm32f1xx的i2c读 写功能正常了。

          对于stm32f4xx需要看GPIOX_MODER、GPIOX_PUPDR、GPIOX_AFRL、GPIOX_AFRH,把这几个寄存器配置正确,i2c读写也正常了。

二、使用i2c控制器

1、在ministm32开发板用st公司的例子做修改(上面stm32f1xx链接),将其解压放在en.stm32cubef1 V1.7.0-》Projects-》STM32F103RB-Nucleo-》Examples-》I2C目录下,做实验发现可以读写,但逻辑分析仪抓到的读波形不正确。写波形的设备地址也不对。

at24c256的设备地址datasheet写的是MSB-》LSB:1 0 1 0 0 A1 A2 R/W,对于实验设置A1、A2为0,那么设备地址应该为0xA0,怎么会变成0x50,而0x50正好是右移一位的结果,这是想到了逻辑分析仪i2c设置的参数,选择了7-bit address bits only,所以抓出来是0x50,改过来就正确了,这个不影响抓到的数据。

对于读数据不对问题,仔细研读了软件模拟i2c时序,发现发送读写地址是一个16bit的数据,对照datasheet发现也是要求16bit地址,将8bit地址改成16bit地址之后发现写读数据比对通过。

2、在Xnueleo开发板用st公司的例子做修改(上面stm32f4xx链接),将其解压放在en.stm32cubef4 V1.23.0-》Projects-》STM32F411RE-Nucleo-》Examples_MIX-》I2C目录下,做实验发现可以读写,但逻辑分析仪抓不到波形,程序卡在了写完DR寄存器等待ADDR_FLAG上,都是官方例子改的,check double了代码没有问题,然后检查两个开发板之间和i2c通信模块at24c256的连接上,发现除了VCC有点差别其他无,这是重点在VCC上了一个是3.3v,一个是E5V,发现at24c256电压范围是2.7-5.5v,说明不是压值问题,然后仔细看Xncleo板子的E5V,将其连接到下载器的5v上,这肯定有电压,发现读写正常了,然后咨询并看了原理图,说明书发现E5V是外部电压,不是产生5v电压,真相终于大白,竟然是这么二的问题。。。这也提醒一定要仔细看手册。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值