从书上看到STM32的硬件IIC远没有硬件SPI好用,书上给的例子也是模拟IIC的,因为之前只用过51的准双向口控制过简单的IIC器件,所以好好看了下。
IIC总线是由数据线SDA和时钟线SCL两条线构成的通信线路,既可以发送数据,也可以接收数据。在MCU和被控IC之间,IC和IC之间都可以进行双向传输。
这是一个IIC总线系统硬件结构图,SCL和SDA均需接上拉电阻。
在模拟IIC总线通信时,需写出几个关键部分的函数。
#define IIC_SCL PCout(12) //SCL
#define IIC_SDA PCout(11) //SDA
#define READ_SDA PCin(11)
(1):总线初始化
void IIC_Init(void){
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC, ENABLE );
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ; //将PC12和PC11设置为通用推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
IIC_SCL=1;