state = HAL_I2C_Mem_Read_DMA(&hi2c1,DEV_ADDR,ANGLE,I2C_MEMADD_SIZE_8BIT,readdata,2);
if(state != HAL_OK)
{
printf("iic error = %d\r\n",state);
i2c_reset();
}
void i2c_reset(void)
{
HAL_I2C_DeInit(&hi2c1);
/* 尝试将总线拉高 */
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.Pin = GPIO_PIN_6 | GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6 | GPIO_PIN_7, GPIO_PIN_SET);
hi2c1.Instance->CR1 = I2C_CR1_SWRST; //复位I2C控制器
hi2c1.Instance->CR1 = 0; //解除复位(不会自动清除)
/* 重新初始化I2C */
MX_I2C1_Init();
}
STM32硬件IIC错误复位 HAL库
最新推荐文章于 2025-05-26 17:03:09 发布