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生成的代碼更改。

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM