stm32f103的IIC原理

它是由数据线SDA和时钟线SCL构成的串行总线,可发送和接收数据,通过IIC数据传输主要是根据一定的时序进行写和读。

I2C 总线在传送数据过程中共有三种类型信号, 它们分别是:开始信号、结束信号和应答信号。
开始信号: SCL 为高电平时, SDA 由高电平向低电平跳变,开始传送数据。
结束信号: SCL 为高电平时, SDA 由低电平向高电平跳变,结束传送数据。
应答信号:接收数据的 IC 在接收到 8bit 数据后,向发送数据的 IC 发出特定的低电平脉冲,表示已收到数据。 CPU 向受控单元发出一个信号后,等待受控单元发出一个应答信号, CPU 接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。这些信号中,起始信号是必需的,结束信号和应答信号,都可以不要。 

iic.h文件

#define SDA_IN()  {GPIOC->CRH&=0XFFFF0FFF;GPIOC->CRH|=8<<12;}
#define SDA_OUT() {GPIOC->CRH&=0XFFFF0FFF;GPIOC->CRH|=3<<12;}

#define IIC_SCL    PCout(12) //SCL
#define IIC_SDA    PCout(11) //SDA	 
#define READ_SDA   PCin(11)  //输入SDA

产生开始信号时先将时钟线和数据线都拉高,再将数据线由高电平向低电平跳变

void IIC_Start(void)
{
	SDA_OUT();     //数据线输出
	IIC_SDA=1;	  	  
	IIC_SCL=1;
	delay_us(4);
 	IIC_SDA=0;//
	delay_us(4);
	IIC_SCL=0;//
}	  

产生停止信号时,先将时钟线和数据线都拉低,再将数据线由低电平向高电平跳变

void IIC_Stop(void)
{
	SDA_OUT();//数据线输出
	IIC_SCL=0;
	IIC_SDA=0;
 	delay_us(4); 
	IIC_SCL=1;
 	delay_us(4); 
	IIC_SDA=1;	   	
}

猜你喜欢

转载自blog.csdn.net/qq_42158309/article/details/84865298