I2C通信外设

I2C外设简介

STM32内部集成了硬件I2C收发电路,可以由硬件自动执行时钟生成、起始终止条件生成、应答位收发、数据收发等功能,减轻CPU的负担

支持多主机模型

固定多主机:有多个主机,任意一个主机都可以控制从机

可变多主机:从机可以变成主机,通信完成后,这个主机就要跳回从机的位置

支持7/10位地址模式

支持不同的通讯速度,标准速度(高达100 kHz),快速(高达400 kHz)

支持DMA

兼容SMBus协议

STM32F103C8T6 硬件I2C资源:I2C1I2C2

I2C框图

 I2C是半双工,是同一组数据寄存器与移位寄存器

时钟控制:控制SCL线,在CCR寄存器写对应位,就可以实现相应的功能

写入控制寄存器,可以对整个电路进行控制

读出状态寄存器,可以得知电路工作状态

I2C基本结构

 移位寄存器高位先行,发送时最高位先移出去

GPIO口要设置成复用开漏输出模式

主机发送流程

 EVx是标志位

EV5:代表起始条件已发送

EV6:代表寻址事件已完成

主机接收

 EV7:数据寄存器非空

代码

void I2C_GenerateSTART(I2C_TypeDef* I2Cx, FunctionalState NewState);
//生成起始条件
void I2C_GenerateSTOP(I2C_TypeDef* I2Cx, FunctionalState NewState);
//生成终止条件
void I2C_AcknowledgeConfig(I2C_TypeDef* I2Cx, FunctionalState NewState);
//配置应答使能ACK

void I2C_SendData(I2C_TypeDef* I2Cx, uint8_t Data);
//把数据直接写入DR寄存器
uint8_t I2C_ReceiveData(I2C_TypeDef* I2Cx);
//读取DR数据作为返回值

void I2C_Send7bitAddress(I2C_TypeDef* I2Cx, uint8_t Address, uint8_t I2C_Direction);
//发送7位地址专用函数

I2C State Monitoring Functions

//Basic state monitoring:
I2C_CheckEvent();
//同时判断一个或多个标志位,来确定EVx是否发生

//Advanced state monitoring:
I2C_GetLastEvent();

//Flag-based state monitoring:
I2C_GetFlagStatus();
//基于标志位的状态监控,判断某个标志位是否置1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值