STM32 HAL库I2C注意点


现象


STM32CubeMX提供了串口的HAL库,I2C有时候会卡死

原因


固件bug,网上搜到有很多,ST官方也承认的

解决方法


发送接收设置超时,并在之前检测状态

在函数调用

1
2
HAL_I2C_Mem_Write()
HAL_I2C_Mem_Read()

时设置超时参数

并在每次执行前尝试复位

1
2
3
4
5
if ((__HAL_I2C_GET_FLAG(&hi2c2, I2C_FLAG_BUSY) ? SET : RESET) == SET) {
__HAL_RCC_I2C2_FORCE_RESET();
__HAL_RCC_I2C2_RELEASE_RESET();
MX_I2C2_Init();
}

不需要其它操作了

Author

吉凡

Posted on

2019-07-19

Updated on

2025-08-10

Licensed under

Comments