1.I2C总线是PHLIPS公司在八十年代初推出的一种串行的半双工同步总线,主要用于连接整体电路。 1)同一个板子两个芯片之间的通信 stm32mp157a<---IIC--->SI7006 2)两个设备之间的通信 SOC<---UART--->Target 2.I2C总线为两线制,只有两根双向信号线。一根是数据线SDA,另一根是时钟线SCL。 3.I2C硬件结构简单,接口连接方便,成本较低。因此在各个领域得到了广泛的应用。 4.IIC总线传输速率 低速 100k 中速 400k 全速 3.4M 5.IIC总线需要接两个上拉电阻,这两个上拉电阻作用在IIC总线为空闲状态时保持高电平。
IIC的协议
主机给从机发送一个字节
主机给从机发送多个字节
从机给主机发送一个字节
从机给主机发送多个字节
首先是头文件部分
#ifndef __IIC_H__
#define __IIC_H__
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_rcc.h"
#include "gpio.h"
/* 通过程序模拟实现I2C总线的时序和协议
* GPIOF ---> AHB4
* I2C1_SCL ---> PF14
* I2C1_SDA ---> PF15
*
* */
#define SET_SDA_OUT do{GPIOF->MODER &= (~(0x3 << 30)); \
GPIOF->MODER |= (0x1 << 30);}while(0)
#define SET_SDA_IN do{GPIOF->MODER &= (~(0x3 << 30));}while(0)
#define I2C_SCL_H do{GPIOF->BSRR |= (0x1 << 14);}while(0)
#define I2C_SCL_L do{GPIOF->BRR |= (0x1 << 14);}while(0)
#define I2C_SDA_H do{GPIOF->BSRR |= (0x1 <<