stm32cubemx i2c sr2 busy

问题:STM32CUBEMX生成I2C代码,初始化代完成i2c寄存器SR2 BUSY位一直为高,导致HAL_I2C相关函数返回hal_busy。
解决方法:先使能I2C_CLK,再使能GPIO_CLK

void HAL_I2C_MspInit(I2C_HandleTypeDef* i2cHandle)
{

  GPIO_InitTypeDef GPIO_InitStruct = {0};
  if(i2cHandle->Instance==I2C1)
  {
  /* USER CODE BEGIN I2C1_MspInit 0 */
     __HAL_RCC_I2C1_CLK_ENABLE();

  /* USER CODE END I2C1_MspInit 0 */
  
    __HAL_RCC_GPIOB_CLK_ENABLE();
    /**I2C1 GPIO Configuration    
    PB6     ------> I2C1_SCL
    PB7     ------> I2C1_SDA 
    */
    GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

    /* I2C1 clock enable */
    __HAL_RCC_I2C1_CLK_ENABLE();
  /* USER CODE BEGIN I2C1_MspInit 1 */		
  /* USER CODE END I2C1_MspInit 1 */
  }
}

你可能感兴趣的:(stm32cubemx i2c sr2 busy)