CubeMX生成的i2c不工作

我用的是STM32F401RE,使用cubeMX生成keil工程后,发现i2c不工作。
main中关键函数如下:


/[i] USER CODE BEGIN 1 [/i]/
HAL_StatusTypeDef i2cStatus1, i2cStatus2;
/[i] USER CODE END 1 [/i]/

/[i] MCU Configuration----------------------------------------------------------[/i]/

/[i] Reset of all peripherals, Initializes the Flash interface and the Systick. [/i]/
HAL_Init();

/[i] Configure the system clock [/i]/
SystemClock_Config();

/[i] Initialize all configured peripherals [/i]/
MX_GPIO_Init();
MX_I2C1_Init();
lcd_init();

/[i] USER CODE BEGIN 2 [/i]/
uint8_t data1 = 0x17;
i2cStatus1 = HAL_I2C_IsDeviceReady(&hi2c1, 0x5a, 3000, 1000);

i2cStatus1 返回error。
然后我调试过程中发现,HAL_I2C_IsDeviceReady函数执行过程很诡异,经过函数内如下一段代码后(I2C_CR1_START = 0x100),CR1还是0x1,而没有变成0x101.但是DR变成了0x5A(DevAddress=0x5A)。这里我就很困惑了,为啥CR1经过了hi2c->Instance->CR1 |= I2C_CR1_START;语句值却没有变化呢?


do
{
/[i] Generate Start [/i]/
hi2c->Instance->CR1 |= I2C_CR1_START;

/[i] Wait until SB flag is set [/i]/
if(I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_SB, RESET, Timeout) != HAL_OK)
{
return HAL_TIMEOUT;
}

/[i] Send slave address [/i]/
hi2c->Instance->DR = I2C_7BIT_ADD_WRITE(DevAddress);
……
//more code


reg.png


watch.png


我的cubemx配置如下,请大家也帮我看看有没有啥问题

1.png


2.png


3.png


4.png


5.png

已邀请:

pkuzhx

赞同来自:

I2C_WaitOnFlagUntilTimeout函数没有改变START bit,我把断点设置该函数前面也是一样的结果。

zhaoquan

赞同来自:

我配置了一个I2C驱动MPU6050,在Keil 5中的Debug模式下可以正常运行,退出后就无法运行了,是怎么回事呢?

要回复问题请先登录注册