×
单片机 > 单片机程序设计 > 详情

STM32硬件I2C问题

发布时间:2020-06-05 发布时间:
|

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可用




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
ARM 汇编的必知必会