STM32L431 的I2C1 在 DMA 模式下无法连续读取数据。
我在用 I2C 在后台通过 DMA从传感器读取数据。以下是 CubeMX 中的 I2C DMA 设置。
问题是,在调试窗口中显示了一个冻结的测量值,尽管在阻塞模式下测量值一直在变化。
void QMC7983_read_temp (void){
uint8_t status_flag = 0xFF;
uint8_t raw_temp_data[2];
HAL_I2C_Mem_Read_DMA (&hi2c1, QMC7983_ADDR,STATUS_REG_1,1, &status_flag, 1);
if((status_flag & 1U>>0)!=1)
while(1){}
HAL_I2C_Mem_Read_DMA (&hi2c1, QMC7983_ADDR,TOUT_LSB_REG,1,raw_temp_data, 2);
temp_meas = (int16_t)(raw_temp_data[1]<<8 |raw_temp_data[0])/100.0;
}
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_DMA_Init();
MX_TIM1_Init();
MX_I2C1_Init();
MX_ADC1_Init();
QMC7983_config();
HAL_Delay(100);
QMC7983_read_temp ();
while (1)
{
}
}
|
|