← 返回目录

STM32F103C6Tx CubeMx HAL I2c不工作原因

发布时间: 2021-11-01 22:03:56
浏览量: 2703
评论数: 6
收藏数: 23
点赞数: 7
标签: stm32, arm, 嵌入式硬件
发现使用STM32F103C8 i2c是可以工作了,要是cpu选STM32F103C6Tx发现生成代码i2c不工作,多次尝试和比较发现,STM32F103C6Tx生成的i2c的msp初始化gpio的时候少了一个速度的配置: GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;加上这行就正常工作了。汗。void HAL_I2C_MspInit(I2C_HandleTypeDef* i2cHandle){ GPIO_InitTyp...

发现使用STM32F103C8 i2c是可以工作了,要是cpu选STM32F103C6Tx发现生成代码i2c不工作,多次尝试和比较发现,STM32F103C6Tx生成的i2c的msp初始化gpio的时候少了一个速度的配置:

      

  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;

加上这行就正常工作了。汗。如下,加到 USER CODE BEGIN 和  USER CODE END中间,这样再生成代码就不怕冲走了。

void HAL_I2C_MspInit(I2C_HandleTypeDef* i2cHandle)
{

  GPIO_InitTypeDef GPIO_InitStruct = {0};
  if(i2cHandle->Instance==I2C1)
  {
  /* USER CODE BEGIN I2C1_MspInit 0 */
		GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  /* 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.Pull = GPIO_NOPULL;
    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 */
  }
}