stm32 I2C问题 I2C_CheckEvent()

STM32的IIC接口写的比较复杂,稍不注意,很多地方都会搞错,如果是用GPIO模拟的IIC,问题应该不大,无非应答不不应答的问题。

但是既然STM32自带IIC,并且有接口函数,干嘛不用呢

问题1:

I2C_CheckEvent() 检查时停在此处:

  /* Test on EV5 and clear it */

  while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));

 

问题2:

第一次读写正确后再运行程序停在此处:

  /* Test on EV6 and clear it */

  while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));

 

其他问题:

这基本上就是该应答时没有应答造成

 

解决方法:

针对问题1,多数是因为IIC接口没有配置好,RCC设置中只设置了如下

  /* I2C1 Periph clock enable */

  RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);  

却没有设置:

/* GPIOB Periph clock enable */

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

以上两者都是必须的


针对问题2,一般是由于从设备速度不够快造成的

一般在IIC各个读写操作中加入一定的延时即可:

   I2C_8601_ByteWrite(0x02,0x01);

    afxCounterMs=1;

    while(afxCounterMs);     

    I2C_8601_ByteWrite(0x03,0x02);

    afxCounterMs=1;

    while(afxCounterMs);  


评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值