×
单片机 > 单片机程序设计 > 详情

关于stm32 hal 库 iic 一直是 busy 问题

发布时间:2020-05-25 发布时间:
|

最近在用st hal iic 发现 MX_I2C1_Init(); 后 iic 就处于BUSY状态


代码跟踪后发现 具体到 HAL_I2C_MspInit 中 __HAL_RCC_I2C1_CLK_ENABLE(); 后 IIC模块就处到busy状态。


具体问题找到 ,修改如下,轻松解决问题!!


原来代码:


void HAL_I2C_MspInit(I2C_HandleTypeDef* i2cHandle)

{


    GPIO_InitTypeDef GPIO_InitStruct;

    if(i2cHandle->Instance == I2C1)

    {

        /* USER CODE BEGIN I2C1_MspInit 0 */


        /* USER CODE END I2C1_MspInit 0 */


        /**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);

            

        /* Peripheral clock enable */

        __HAL_RCC_I2C1_CLK_ENABLE();

        /* USER CODE BEGIN I2C1_MspInit 1 */

           


        /* USER CODE END I2C1_MspInit 1 */

    }

}


修改后代码:


void HAL_I2C_MspInit(I2C_HandleTypeDef* i2cHandle)

{


    GPIO_InitTypeDef GPIO_InitStruct;

    if(i2cHandle->Instance == I2C1)

    {

        /* USER CODE BEGIN I2C1_MspInit 0 */


        /* USER CODE END I2C1_MspInit 0 */


        /**I2C1 GPIO Configuration

        PB6     ------> I2C1_SCL

        PB7     ------> I2C1_SDA

        */

                

        /* Peripheral clock enable */

        __HAL_RCC_I2C1_CLK_ENABLE();

        /* USER CODE BEGIN I2C1_MspInit 1 */

            

                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);


        /* USER CODE END I2C1_MspInit 1 */

    }

}


关键字:stm32  hal  库  iic  busy

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
MSP432学习笔记:ADC14