STM32硬件IIC与51模拟IIC通信

发布者:老王古玩店最新更新时间:2018-11-26 来源: eefocus关键字:STM32  硬件IIC  模拟IIC通信 手机看文章 扫描二维码
随时随地手机看文章

IIC介绍


  IIC协议规定:SDA上传输的数据必须在SCL为高电平期间保持稳定,SDA上的数据只能在SCL为低电平期间变化。IIC期间在脉冲上升沿把数据放到SDA上,在脉冲下降沿从SAD上读取数据。这样的话,在SCL高电平期间,SDA上的数据是稳定的。在脉冲下降沿之后的保持时间以后,SDA上的数据可以变化,直到脉冲上升沿之前。


STM32与51 IIC通信实验


  下面是在使用51模拟IIC作为主机、STM32硬件IIC作为从机时发生的一些问题:


STM32地址不匹配: 


  1、STM32工作为从机接收器模式下时,STM32设置IIC地址为0x0A但是I2C_OAR1寄存器中的地址为0x05,所以51发送地址时,应该发送0x05,通过移位之后在最后一位加上R/W位,如果在最后以为加上0表示向STM32发送数据,STM32产生I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED/* BUSY and ADDR flags */事件 


  2、STM32工作为从机发送器模式下时,在接受地址之后,进入的是I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED/* BUSY and ADDR flags /事件中断,而不是I2C_EVENT_SLAVE_TRANSMITTER_ADDRESS_MATCHED/ TRA, BUSY, TXE and ADDR flags */事件中断,是由于TRANSMITTER这个标志中包含了RECEIVER标志的寄存器中的位,所以当TRANSMITTER放在RECEIVER之后的话,会提前进入RECEIVER事件中断,而无法进入TRANSMITTER事件中断;


STM32无法正确返回ACK信号的原因: 


  1、当从机不能响应从机地址时(例如它正忙于其他事而无法响应IIC总线的操作,或者这个地址没有对应的从机),在第9个SCL周期内SDA线没有拉低,即没有ACK信号。这时,主机发出一个P信号终止传输或者重新发出一个S信号开始新的传输。 


  2、如果从机接收器在传输过程中不能接收更多的数据时,它不会发出ACK信号。这样,主机就可以意识到这点,从而发出一个P信号终止传输或者重新发出一个S信号开始新的传输。 


  3、主机接收器在接收到最后一个字节后,也不会发出ACK信号。于是,从机发送器释放SDA线,以允许主机发出P信号结束传输。


STM32只能够返回一个ACK信号的原因: 


  1、STM32工作为从机接收器模式下时,在接收到地址后触发I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED/* BUSY and ADDR flags */事件,但是没有清除ADDR标志位; 


  2、STM32工作为从机接收器模式下时,在收到数据之后触发I2C_EVENT_SLAVE_BYTE_RECEIVED/* BUSY and RXNE flags */事件,但是没有清除RXNE标志位;


--------------------- 


作者:InfiniteYuan 


来源:CSDN 


原文:https://blog.csdn.net/qq_27114397/article/details/53310472 


版权声明:本文为博主原创文章,转载请附上博文链接!


关键字:STM32  硬件IIC  模拟IIC通信 引用地址:STM32硬件IIC与51模拟IIC通信

上一篇:STM32F103 I2C 宕机的问题
下一篇:STM32 硬件I2C中断实现

小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved