STM32模拟IIC通信

可以结合之前的一篇文章来看,都是一样的,不过本文是模拟IIC,之前的是硬件IIC。
传送门:STM32F429–I2C通信(读写EEPROM,串口返回测试数据)

一、定义

IIC 即Inter-Integrated Circuit(集成电路总线),这种总线类型是由菲利浦半导体公司在八十年代初设计出来的,主要是用来连接整体电路(ICS),IIC是一种多向控制总线,也就是说多个芯片可以连接到同一总线结构下,同时每个芯片都可以作为实施数据传输的控制源。这种方式简化了信号传输总线。

I2C串行总线一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL。所有接到I2C总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。

与SPI相同的是,都是多选一,即可以有多个从设备,但是一次通信的时候,只能选择其中的一个。且IIC的从设备选择上,有7位地址,谁控制了时钟线,谁就是从机,而不是像SPI那样通过片选信号线CS来选择。

二、读写AT24C02

(1)电路原理图如下:WP引脚接地,表明可读可写,如果接VCC只读不可写。
在这里插入图片描述
(2)引脚说明图如下:

在这里插入图片描述

A0-A2,接在了GND,代表是0,R/-W,W的上面是有一横的,代表0有效,读是1有效,所以读操作是0XA0,写操作是0XA1。

(3)地址说明:
在这里插入图片描述

(4)通信过程
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
(1)起始信号:由上图可知,读写的速率为100KHZ,那么1/100khz= 10us,在起始信号的时候,高地电平各占一半,即至少需要持续5us。SCL持续高电平,直到SDA线由高电平到低电平变化,SCL才变为低电平。可以写出代码:

GPIO初始化
void i2c_init(void)
{
   
	//使能GPIOB时钟
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);			

	//PB8 PB9初始化设置 
	GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_8 | GPIO_Pin_9;		//8号和9号引脚
	GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_OUT;			    	//普通输出模式,
	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;					//推挽输出,驱动LED需要电流驱动
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;		    	//100MHz
	GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;				    //上拉
	GPIO_Init(GPIOB, &GPIO_InitStructure);							//初始化GPIOB,把配置的数据写入寄存器						

	//i2c引脚初始化状态,默认为高电平
	SCL =1;
	SDA_W=1;


}
自定义更改输入输出模式
void i2c_sda_mode(uint32_t iomode)
{
   

	//PB9初始化设置 
	GPIO_InitStructure.GPIO_Pin   =  GPIO_Pin_9;		//9号引脚
	GPIO_InitStructure.GPIO_Mode  = iomode;				//输出模式/输入模式
	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;	//推挽输出,驱动LED需要电流驱动
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;	//100MHz
	GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;		//上拉
	GPIO_Init(GPIOB, &GPIO_InitStructure);			//初始化GPIOB,把配置的数据写入寄存器		


}
起始信号

void i2c_start(void)
{
   
	//保证SDA引脚为输出模式
	i2c_sda_mode(GPIO_Mode_OUT)
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值