×
单片机 > 单片机程序设计 > 详情

stm32 I2C问题 I2C_CheckEvent()

发布时间:2020-05-18 发布时间:
|

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);  




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
关于89C52单片机11.0592M晶振产生115200波特率的方法