STM32 I2C硬件
2015-11-14 13:38
417 查看
1,该模块默认地工作于从模式。接口在生成起始条件后自动地从从模式切换到主模式;当仲裁丢失或产生停止信号时,则从主模式切换到从模式。
2,数据和地址按8位/字节进行传输,高位在前。
3,数据流:SDA线->移位寄存器->DR寄存器
主模式
以起始条件开始并以停止条件结束。当通过START位在总线上产生了起始条件,设备就进入了主模式。
1、检测总线状态,当总线空闲时(I2C_SR2的BUSY=0)。
FlagStatus
I2C_GetFlagStatus(I2Cx, I2C_FLAG_BUSY);
2、设置START=1,产生起始信号。
I2C_ GenerateSTART
起始信号产生后,I2C_SR1的SB位被硬件置位,如果设置中断则产生中断;主设备等待读SR1寄存器,即等待EV5发生。
I2C_CheckEvent(I2Cx,I2C_EVENT_MASTER_MODE_SELECT)。
当EV5发生时读取状态寄存器值就会自动清除状态位。
3、发送从设备地址
I2C_Send7bitAddress
主设备为发送器时,地址最低位为0;接收器时,地址最低位为1。
I2C_SR1的ADDR位硬件置1,如果设置中断则产生中断;主设备等待读SR1寄存器,即等待EV6发生。
I2C_CheckEvent(I2Cx,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)。
主发送器:
4、发送数据,
在发送了地址和清除了ADDR位后,主设备通过内部移位寄存器将字节从DR寄存器发送到SDA线上。主设备等待,直到TxE被清除,
I2C_SendData
当收到应答信号时,TxE位被硬件置位,即当TxE被硬件置位时就已经收到应答信号。如果设置中断,则产生中断。如果TxE位被置位,但在下一个数据发送结束之前没有新数据写入到I2C_DR寄存器,则BTF位(Byte
transfer finished)被置位,在清除BTF之前I2C接口将保持SCL为低电平;读出I2C_SR1之后再写入I2C_DR寄存器将清除BTF位。
5、发送停止信号
在DR寄存器中写入最后一个字节后,通过设
b730
置STOP位产生一个停止条件(见图245的EV8_2),然后I2C接口将自动回到从模式(M/S位清除)。
I2C_GenerateSTOP
注: 当TxE或BTF位置位时,停止条件应安排在出现EV8_2事件时。
主接收器
在发送地址和清除ADDR之后,I2C接口进入主接收器模式。在此模式下,I2C接口从SDA线接收数据字节,并通过内部移位寄存器送至DR寄存器。
2,数据和地址按8位/字节进行传输,高位在前。
3,数据流:SDA线->移位寄存器->DR寄存器
主模式
以起始条件开始并以停止条件结束。当通过START位在总线上产生了起始条件,设备就进入了主模式。
1、检测总线状态,当总线空闲时(I2C_SR2的BUSY=0)。
FlagStatus
I2C_GetFlagStatus(I2Cx, I2C_FLAG_BUSY);
2、设置START=1,产生起始信号。
I2C_ GenerateSTART
起始信号产生后,I2C_SR1的SB位被硬件置位,如果设置中断则产生中断;主设备等待读SR1寄存器,即等待EV5发生。
I2C_CheckEvent(I2Cx,I2C_EVENT_MASTER_MODE_SELECT)。
当EV5发生时读取状态寄存器值就会自动清除状态位。
3、发送从设备地址
I2C_Send7bitAddress
主设备为发送器时,地址最低位为0;接收器时,地址最低位为1。
I2C_SR1的ADDR位硬件置1,如果设置中断则产生中断;主设备等待读SR1寄存器,即等待EV6发生。
I2C_CheckEvent(I2Cx,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)。
主发送器:
4、发送数据,
在发送了地址和清除了ADDR位后,主设备通过内部移位寄存器将字节从DR寄存器发送到SDA线上。主设备等待,直到TxE被清除,
I2C_SendData
当收到应答信号时,TxE位被硬件置位,即当TxE被硬件置位时就已经收到应答信号。如果设置中断,则产生中断。如果TxE位被置位,但在下一个数据发送结束之前没有新数据写入到I2C_DR寄存器,则BTF位(Byte
transfer finished)被置位,在清除BTF之前I2C接口将保持SCL为低电平;读出I2C_SR1之后再写入I2C_DR寄存器将清除BTF位。
5、发送停止信号
在DR寄存器中写入最后一个字节后,通过设
b730
置STOP位产生一个停止条件(见图245的EV8_2),然后I2C接口将自动回到从模式(M/S位清除)。
I2C_GenerateSTOP
注: 当TxE或BTF位置位时,停止条件应安排在出现EV8_2事件时。
主接收器
在发送地址和清除ADDR之后,I2C接口进入主接收器模式。在此模式下,I2C接口从SDA线接收数据字节,并通过内部移位寄存器送至DR寄存器。
相关文章推荐
- interactivePopGestureRecognizer
- SQL数据查询基础
- ubuntu 14.04 nginx + mysql + php源码安装
- Python核心数据类型——字符串(2)
- Text Justification
- 【转】char码值对应列表大全
- 简单linux线程示例代码
- c++开源日志库log4cplus
- Python如何自定义异常
- 秒杀多线程第四篇 一个经典的多线程同步问题 http://blog.csdn.net/morewindows/article/details/7442333
- 杭电acm1071
- __int 64
- ps快捷键对应的英文字母缩写
- Understanding glibc malloc
- Hibernate检索方式的学习2015-11-14
- 利用IPC$共享入侵windowsXP实战
- linux 修改 机器名 root@localhost
- HDOJ 1075 What are you talking about ? 字典树
- AlertDialog.Builder setCancelable用法
- 2015年大二上-数据结构-栈(5)- 后缀表达式