新手上路
- 积分
- 35
- 金钱
- 35
- 注册时间
- 2019-12-30
- 在线时间
- 7 小时
|
1金钱
我使用CUBEMX配置的IIC,最开始是
void HAL_I2C_MspInit(I2C_HandleTypeDef* i2cHandle)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
if(i2cHandle->Instance==I2C1)
{
/* USER CODE BEGIN I2C1_MspInit 0 */
/* 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.Speed = GPIO_SPEED_FREQ_HIGH;
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 */
}
}
这样导致我的HAL_I2C_Mem_Write函数一直返回HAL_BUSY
后面我百度,找到了https://blog.csdn.net/zhanglifu3601881/article/details/82462519的帖子,发现他把 __HAL_RCC_I2C1_CLK_ENABLE();放在配置IO口前面就可以正常写入了。为什么呢?是不是与IIC的IO口有可能是输入或输出模式有关呢?
|
|