硬件IIC初始化配置易错点
前言
在使用硬件IIC的时候,出问题的往往总是粗心大意,某个参数没有设置正确,导致后来出现问题的时候,总是出现莫名奇妙的bug,而且往往是那些偶发的问题,更让人摸不着头脑,而受制于定性思维,总是觉得自己的初始化配置没有错,就开始胡思乱想,顾左右而言他,身心俱疲,苦不堪言,但当水落石出之时,发现竟然是初始化配置错误!!!
排查顺序
当IIC出现问题,先按此排查顺序过一遍(一遍不够,还得多几次,甚至发给AI,让AI帮忙排查一下)
-
GPIO时钟和IIC时钟开没开? (没开时钟,很常见的错误,代码太乱不好排查? 不妨打开调试功能,直接检查时钟相关的寄存器配置)
-
引脚是否正确 (SCK, SDA对应引脚重新看一遍原理图)
-
引脚模式配置是否正确 (真的配置复用模式了吗?不妨再检查一下)
-
引脚复用映射是否配置错误 (查 MCU《数据手册》→ “引脚复用功能表”,再看一看复用的映射MUX,还有GPIO源是否正确GPIO_PINS_SOURCE)
-
频率设置的对不对 (你确定你没少写或多写0吗? 你确定你设置的频率,从机支持吗?)
-
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,导致出现偶发问题:发送从机地址之后,从机未返回应答信号

浙公网安备 33010602011771号