STM32 I2C介绍和软件模拟I2C编程要点

I2C协议层独特特征:

1. 通过地址(Master/Slave Address)区分不同的设备。 

2. ACK信号体制,即通过ACK表示是否进行继续传输。

3.由SCL、SDA的四种关系,映射数据有效性、起始信号、结束信号。

 

STM的硬件I2C编程要点:

1. 通过初始化I2C结构体,配置硬件I2C。

2.有特有的发送起始信号、结束信号,使能 ACK信号的相关库函数命令。不需要手动模拟GPIO,由硬件按协议层要求发送。

3. 有特有的事件检测(EV)库函数和宏定义。通过检测各种事件,达到数据传输的可靠性。

 

STM32 软件模拟I2C编程要点

1. 配置GPIO的时候,模式要选择开漏输出(GPIO_Mode_Out_OD):(STM32硬件编程I2C时,为复用开漏输出GPIO_Mode_AF_OD)

 2. 编写I2C协议层函数时,特别注意接收数据函数的左移次数

//I2C协议规定:发送数据以一个字节(8bit)为单位,不能多也不能少。
//接收时,一位一位传输,优先接收高位(MSB)
//当SCL为0时,SDA数据可变化(此时数据无效),SCL为1时,SDA数据有效
uint8_t i2c_ReadByte(void)
{

    uint8_t dat = 0;
    uint8_t i;
    for(i=0; i<8; i++)
    {
        dat <<= 1;//循环总共进行8次,但有效的左移(采集数据位后)应该为7次,此语句不能放在接收收据之后
        SCL_1;
        i2c_Delay();
        if(EEPROM_I2C_SDA_READ() == 0)
        {
            dat &= ~(1<<0);
        }else
        {
            dat |= (1<<0);
        }//dat <<= 1;不能放在这里
    SCL_0; 
    i2c_Delay(); }

return dat; }

 

posted @ 2023-02-08 13:14  FBshark  阅读(235)  评论(0编辑  收藏  举报