想让STM32和传感器、OLED屏等外设"说上话"?I2C总线是低成本、低引脚数的通信利器。但面对CubeMX里一堆参数,新手往往一头雾水。本文用最直白的方式,拆解I2C功能选择的核心步骤。

一、硬件引脚:先看芯片有没有"I2C户口"
查手册:打开STM32数据手册,在"Alternate Function Mapping"章节找I2C1/I2C2/I2C3对应的引脚(如PB6-SCL、PB7-SDA)。
避冲突:确保选中的引脚没被其他功能占用(如USART、SPI),否则会"打架"。
上拉电阻:SDA/SCL必须接4.7KΩ~10KΩ上拉电阻,否则信号会"飘"。
二、CubeMX配置:三步走战略
选模式:在Connectivity选项卡勾选I2Cx(x=1/2/3),模式选"I2C"(别选SMBus等复杂模式)。
调速度:
标准模式(100kHz):适合低速设备(如EEPROM)
快速模式(400kHz):需PCLK1>4MHz,适合传感器(如MPU6050)
地址设置:
从设备地址长度:7位(常见)或10位(极少用)
双地址确认:多数设备用不上,保持默认关闭
三、通信模式:按需选择
阻塞模式:简单粗暴,适合单次读写(代码量最少,但会卡住CPU)。
中断模式:数据到自动触发中断,适合需要同时干其他事的场景(如边收数据边处理按键)。
DMA模式:大数据量传输不卡CPU,适合连续读写(如OLED屏刷新)。
关键提醒
地址左移:7位地址在代码里要左移1位(如0x50→0xA0),这是协议规定。
超时设置:别用HAL_MAX_DELAY,实际项目设个合理值(如10ms),避免死等。
硬件I2C vs 软件模拟:优先用硬件I2C(速度快、省CPU),但某些芯片硬件I2C有bug时可换软件模拟。
本文凡亿教育原创文章,转载请注明来源!

扫码关注











































