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; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具