1. STM32F103ZET6通信接口概述
STM32F103ZET6作为STMicroelectronics经典的Cortex-M3内核微控制器,其丰富的外设资源使其成为嵌入式开发的热门选择。在实际项目中,I2C、SPI和USART这三种通信接口的使用频率极高,它们各自适用于不同的场景:
- I2C:适合中低速、短距离的设备间通信,常见于传感器、EEPROM等器件
- SPI:适用于高速、全双工的数据传输,多用于存储器、显示屏等外设
- USART:作为异步串口,广泛用于调试输出、设备间通信等场景
这款MCU内部集成了多达3个USART、2个SPI和2个I2C接口,通过灵活的引脚复用功能可以适应各种硬件设计需求。我在实际项目中发现,合理配置这些接口的时钟和中断优先级对系统稳定性至关重要。
2. I2C接口深度解析
2.1 I2C硬件配置要点
在STM32CubeMX中配置I2C时,有几个关键参数需要注意:
-
时钟速度:
- 标准模式:100kHz
- 快速模式:400kHz
- 快速模式+:1MHz(F103不支持)
-
时序参数:
c复制I2C_TIMINGR_PRESC = 0x1
I2C_TIMINGR_SCLDEL = 0x4
I2C_TIMINGR_SDADEL = 0x2
I2C_TIMINGR_SCLH = 0xF
I2C_TIMINGR_SCLL = 0x13
这些参数直接影响通信稳定性,建议使用CubeMX自动计算功能生成。
2.2 I2C通信实战代码
以下是读取BMP280气压传感器的典型代码示例:
c复制#define BMP280_ADDR (0x76 << 1)
HAL_StatusTypeDef BMP280_ReadReg(I2C_HandleTypeDef *hi2c, uint8_t reg, uint8_t *data, uint16_t len) {
return HAL_I2C_Mem_Read(hi2c, BMP280_ADDR, reg,
I2C_MEMADD_SIZE_8BIT, data, len, 10
