1.CUBEMX生成代码后I2C总线初始化一直出现 I2C_FLAG_BUSE
1.1 环境:
1.2 硬件I2C配置为默认,管脚如下
1.3 时钟等其他 配置完成后生成工程
1.4 添加代码
在i2c.c文件中的的void HAL_I2C_MspInit(I2C_HandleTypeDef* i2cHandle)函数中添加如下代码
__I2C2_FORCE_RESET();
__I2C2_RELEASE_RESET();
实际如下图
这里采用读取板载的MPU6050的设备地址来确认硬件I2C是否工作正常。 主函数里main.c添加程序如下:
/* USER CODE BEGIN PV */
/* Private variables ---------------------------------------------------------*/
uint8_t device_id_reg = 0x75; //存放MPU6050设备地址的寄存器
uint8_t device_id = 0x68; //MPU6050设备地址,0x75寄存器读取的地址与此相同
uint8_t device_id_reg_ret; //用来存放读取的设备地址
/* USER CODE END PV */
在while循环里添加读取设备地址代码,效果如下:
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
uint32_t cnt = 0;
HAL_Delay(10);
if(cnt%10==0)
{
HAL_GPIO_TogglePin(LED0_GPIO_Port,LED0_Pin | LED1_Pin);
}
if(cnt%20==0)
{
HAL_I2C_Mem_Read(&hi2c1,device_id<<1 , 0X75, I2C_MEMADD_SIZE_8BIT,&device_id_reg_ret,1, 1000);//读MPU6050的ID
printf("MPU6050device_id %xrn",device_id_reg_ret);
}
cnt++;
}
编译下载后在串口可以看到打印信息:
与给定的设备地址相同,说明代码配置的硬件i2c可用
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』