STM32F1HAL库的I2C应用注意事项

Posted Think Block

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32F1HAL库的I2C应用注意事项相关的知识,希望对你有一定的参考价值。

因为要用到I2C和流量传感器通信,也是第一次使用,直接使用stm32F1 HAL库来实现初始化,在STM32F10E评估板上直接和传感器通信,一次性成功通过。

当把调试好的流量计驱动程序往实际的板子上应用的时候发现会死等在某一处如下:

while(__HAL_I2C_GET_FLAG(hi2c, Flag) != RESET)
    {
      /* Check for the Timeout */
      if(Timeout != HAL_MAX_DELAY).......

以上代码是HAL库中的

网上查阅是I2C的固有BUG,真的是这样吗,官方的HAL库更新了好几代了都。。。

尝试

void HAL_I2C_MspInit(I2C_HandleTypeDef* i2cHandle)
{

  GPIO_InitTypeDef GPIO_InitStruct;
  if(i2cHandle->Instance==I2C2)
  {
  /* USER CODE BEGIN I2C2_MspInit 0 */
  /*自已加了这一句代码,提前打开时钟,能解决前面的问题*/
  __HAL_RCC_I2C2_CLK_ENABLE();
  /* USER CODE END I2C2_MspInit 0 */
  
    /**I2C2 GPIO Configuration    
    PB10     ------> I2C2_SCL
    PB11     ------> I2C2_SDA 
    */
    GPIO_InitStruct.Pin = GPIO_PIN_10|GPIO_PIN_11;
    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_I2C2_CLK_ENABLE();

非常奇怪的时,在STM32f10E评估板上不用对CUBE生成的代码更改。

没有深入研究,好用就行。

以上是关于STM32F1HAL库的I2C应用注意事项的主要内容,如果未能解决你的问题,请参考以下文章

STM32F1固件库详解

STM32F407和STM32F051主从I2C通信方法

STM32STM32F429 HAL库开发模板注意事项

i2c 传输,stm32f103 作为 Master,STOP 条件生成问题

STM32F103VET6基于STM32CubeMX 配置硬件I2C驱动SH1106 OLED屏幕

STM32 通过 I2C 发送 12 位 ADC