如果STM32F1的I2C无论发送或接收都返回HAL_BUSY同时你还使用HAL1.4.0库,请进来看看
时间:10-02
整理:3721RD
点击:
在这个库的HAL_I2C_MspInit函数中有点配置顺序问题,如果你使用的是I2C1请在UserCode部分加入以下两句话:
__HAL_RCC_I2C1_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
另外还应当屏蔽这个函数后面的
__HAL_RCC_I2C1_CLK_ENABLE();
事实上这两句话并不是没有由Cube生成,也并不是没有包含在项目里,其中__HAL_RCC_GPIOB_CLK_ENABLE();在GPIO_Init函数中,然而不写在MspInit里就是不能正常通讯。
最后,cndy的ST!
__HAL_RCC_I2C1_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
另外还应当屏蔽这个函数后面的
__HAL_RCC_I2C1_CLK_ENABLE();
事实上这两句话并不是没有由Cube生成,也并不是没有包含在项目里,其中__HAL_RCC_GPIOB_CLK_ENABLE();在GPIO_Init函数中,然而不写在MspInit里就是不能正常通讯。
最后,cndy的ST!
如果你发现这个函数是week的,不要担心不要心急。它写在stm32f1xx_hal_msp.c里。
十分感谢啊
感谢分享 如题 添加后ok!
你是怎么发现的? 如果什么都不改,把mcu频率设置到最低,i2c是能工作的。 你的改法也是能工作的。
非常感谢!
__HAL_RCC_I2C1_FORCE_RESET();
__HAL_RCC_I2C1_RELEASE_RESET();