21.[STM32]I2C协议弄不懂,深挖时序图带你编写底层驱动

  🍌
🍌🍌
作者简介:大家好啊,我叫DW,每天分享一些我新学到的知识,期待和大家一起进步
   🍋
 🍋🍋
 系列专栏:STM32
 开发板:STM32F103

🍊如有写得不好的地方欢迎大家指正🍊
创作时间:🍊🍊🍊2022年7月3日🍊🍊🍊 

        I2C(Inter-Integrated Circuit BUS) 为集成电路总线,该总线由NXP公司设计,多用于主控制器和从器件间的主从通信。IIC和SPI接口严格的说他们都是人们所定义的软硬结合体,分为物理层和协议层。

SDA(Serial data)是数据线,它是用来传输数据的。
SCL(Serial clock line)是时钟线,它是控制数据发送的时序的 。
    

 I2C最重要的三个点为:

1.起始与结束条件

2.应答和非应答 

3.数据的有效性

        下面,我将一一介绍如何使用这三个重要的知识点,由于涉及到SDA的输出和输入模式选择,故先配置它的输出和输入两种模式。 

//模式配置 out input
void I2C_Mode(u8 addr){

	GPIO_InitTypeDef GPIO_InitStructure;
	
	if(addr){  //out
		GPIO_InitStructure.GPIO_Pin = SDA;//PB0 
		GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//输出速率
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出
	}
	else{  //Input
		GPIO_InitStructure.GPIO_Pin = SCL;//PB1
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//推挽输出
	}
		GPIO_Init(I2C_PROT,&GPIO_InitStructure);//初始化引脚
}

1: 输出模式

0 :输入模式

起始和结束条件

1.当SCL为高电平的时候,SDA线上由高到低的跳变被定义为起始条件

2.当SCL为高电平的时候,SDA线上由低到高的跳变被定义为停止条件

 

评论 35
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

依点_DW

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值