I2C总线采用开漏(open-drain)输出结构,器件只能主动拉低电平,无法主动输出高电平。上拉电阻的作用是将总线在空闲时拉至高电平(VDD),实现线与逻辑:任何设备拉低时总线为低,释放时自动恢复高。没有上拉电阻,总线无法产生高电平,通信完全失效。
选值需权衡:电阻过小(如<1kΩ)导致灌电流过大,增加功耗并可能损坏器件;过大(如>10kΩ)则上升沿变缓,限制通信速率(RC时间常数)。典型值:3.3V系统常用2.2kΩ~4.7kΩ,5V系统用4.7kΩ~10kΩ,高速模式(400kHz以上)建议≤2.2kΩ。
实操建议:
1. 上拉电阻接至VDD(通常与器件逻辑电平一致),不可接至5V当3.3V系统,否则漏电。
2. 若总线挂载多设备,等效上拉电阻并联,需重新计算(如两个4.7kΩ并联=2.35kΩ)。
3. 调试时可用示波器测上升沿,若过缓(>1μs)则减小电阻或降低速率。
```c
// 示例:STM32配置I2C上拉(内部上拉不推荐,外部必须加)
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_AF_OD; // 开漏复用
GPIO_InitStruct.Pull = GPIO_NOPULL; // 外部上拉,内部不使能
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
```
mcuku 阿沐 · 2026-08-20