2025-11-08 06:24:48
STM8和STM32发数据都靠I2C总线,但操作步骤不同。STM8得先配好寄存器,设定时钟和地址,再按格式发数据;STM32用HAL库更简单,直接调用函数就能搞定。比如STM8要写CR1寄存器开总线,再写DR寄存器放数据;STM32则是先初始化I2C,再调用MasterSend函数发数据。
STM8发数据得手动管时序,得先开总线和时钟线,再分三步发地址、数据、停止。比如配好CR1后,先写DR放地址码,拉低SCL让总线空闲,等ACK回应再写数据。STM32用HAL库封装了这些步骤,用户只需调用MasterSend,库会自动管地址、数据、时序。比如初始化时设定时钟速率为400kHz,调用MasterSend时传入设备地址、数据缓冲区,库内部会分三步完成发送。数据手册里写STM8的I2C需要手动清空NACK位,而STM32的HAL库在发送失败时会自动重试两次。比如STM8的CR2寄存器里有个NACK位,得手动清零;STM32的MasterSend函数会检查ACK状态,失败就自动重试。
本题链接: