STM32 学习笔记(5)I2C

基础:

(1)I2C 通讯协议(Inter-Integrated Circuit)是由Phiilps 公司开发的,是一条总线,上面可以挂在多个I2C设备实现通讯功能;

(2)一个I2C 总线只使用两条总线线路,一条双向串行数据线(SDA) ,一条串行时钟线(SCL);

(3)各个设备都用自己的地址,来实现访问;

传输过程:

 

 

I2C 协议规定设备地址可以是7 位或10 位,7 位的地址应用比较广泛,紧跟设备地址的一个数据位用来表示数据传输方向,数据方向位(R/W); 1 :主机读从机数据,0:主机写数据到从机;

编写程序:EEPROM 为例:AT24C02的地址为:A2A1A0 都为0时,地址为:0b10010 000;

读写控制加上后 ,写:0x A0,读:0xA1;

 

(1) 配置通讯使用的目标引脚为开漏模式;
(2) 使能I2C 外设的时钟;
(3) 配置I2C 外设的模式、地址、速率等参数并使能I2C 外设;
(4) 编写基本I2C 按字节收发的函数;
(5) 编写读写EEPROM存储内容的函数;
(6) 编写测试程序,对读写数据进行校验。

主发送器的通讯过程下图所示:

 主接收器过程:

编写程序的过程一定要满足上述过程;

(1)GPIO_InitTypeDef       I2C_GPIO_Config()

(2)I2C_InitTypeDef;        I2C_Mode_Config()

由于程序过程很长就先不源码分析了,可以参考野火的教程;

int main(void)
{

	// LED config
	Led_GPIO_config();
	// exiti config
	EXIT_Key_Config();
	//systick config
	SysTick_Iint();
	// usart config
	USART_Config();
	// i2c eeprom at240c
	I2C_EE_Init();
	
	Usart_SendString(DEBUG_USARTx,"This is test for usart_debug \n开始...\n");
	
	while(1)
	{		
			printf(" i2c eeprom write test... \n");
			Usart_SendString(DEBUG_USARTx,"LED3 亮\n");
			LED3_ON;
			Delay_10us(100000);
			I2C_EE_ByetsWrite(writeData,0,8);
			printf(" i2c eeprom writing finished \n");
			LED3_OFF;
			printf(" i2c eeprom read test... \n");
			Delay_10us(100000);
			I2C_EE_BufferRead(readData, 0,8);
			printf(" i2c eeprom reading finished \n");
		}
	
	printf("\r\n 这是一个8Mbyte 串行flash(W25Q64)实验 \r\n");

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值