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 @   FBshark  阅读(315)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示