硬件IIC初始化配置易错点


前言

在使用硬件IIC的时候,出问题的往往总是粗心大意,某个参数没有设置正确,导致后来出现问题的时候,总是出现莫名奇妙的bug,而且往往是那些偶发的问题,更让人摸不着头脑,而受制于定性思维,总是觉得自己的初始化配置没有错,就开始胡思乱想,顾左右而言他,身心俱疲,苦不堪言,但当水落石出之时,发现竟然是初始化配置错误!!!

排查顺序

当IIC出现问题,先按此排查顺序过一遍(一遍不够,还得多几次,甚至发给AI,让AI帮忙排查一下)

  1. GPIO时钟和IIC时钟开没开? (没开时钟,很常见的错误,代码太乱不好排查? 不妨打开调试功能,直接检查时钟相关的寄存器配置)

  2. 引脚是否正确 (SCK, SDA对应引脚重新看一遍原理图)

  3. 引脚模式配置是否正确 (真的配置复用模式了吗?不妨再检查一下)

  4. 引脚复用映射是否配置错误 (查 MCU《数据手册》→ “引脚复用功能表”,再看一看复用的映射MUX,还有GPIO源是否正确GPIO_PINS_SOURCE)

  5. 频率设置的对不对 (你确定你没少写或多写0吗? 你确定你设置的频率,从机支持吗?)

  6. IIC 的从机地址, 地址和地址位数写对了吗? 硬件IIC使用的地址是和常见思维中的地址有差异的, 不妨再看一看手中芯片的技术手册是怎么发送地址的, 会不会帮你左移了一位(举例:AT32F421)?

引脚复用映射错误

gpio_pin_mux_config(GPIOB, GPIO_PINS_SOURCE6, GPIO_MUX_1); // PB6 → I2C1_SDA

参数:

  • GPIOB:引脚所属端口;

  • GPIO_PINS_SOURCE6:PB6 的引脚源;

  • GPIO_MUX_1:复用功能编号(查 MCU 手册,PB6 的 MUX_1 对应 I2C1_SDA);

验证:查 MCU《数据手册》→ “引脚复用功能表”,确认 PB6/PB7 的 MUX_1 是否对应 I2C1 的 SDA/SCL。

引脚输出模式错误

时钟/时序类(偶发异常)

1. IIC时钟频率配置错误

本来想写 100000(100KHZ),结果多写了一个0,写成了1MHZ,导致出现偶发问题:发送从机地址之后,从机未返回应答信号

posted @ 2026-01-10 11:04  summer_fly  阅读(3)  评论(0)    收藏  举报