ST意法半导体
直播中

zhongnian

9年用户 1399经验值
擅长:MEMS/传感技术
私信 关注
[问答]

stm32h743 adc1 eos标志在阅读DR之前不会设置的原因是什么?

大家好,
  最近我正在尝试使用 ADC 来采样 4 通道电流信号。由于没有关键时间要求,我打算使用扫描模式。在我看来,ADC 会自动完成四通道信号转换的东西,然后设置 EOS 标志,这会导致中断。之后,我可以在中断服务程序中读取所有四个通道的转换结果。
  但是当我完成设计,然后尝试调试时,我发现,EOS中断永远不会进入。然后我试了很多方法,最后发现,如果我在开始ADC转换后的某个时间读取DR,那么就可以进入中断了!此外,我发现,如果我永远轮询它,我什至无法获得 EOS 标志!
  我怀疑,这可能是 STM32H743 芯片逻辑问题,因为,我对 STM32F4 系列的 ADC 采样使用了类似的方法。







回帖(1)

黄剑屏

2022-12-13 11:12:15
,我想我已经找到了根本原因。
uhADCxConvertedValue[0] = HAL_ADC_GetValue(&hadc1);
uhADCxConvertedValue[1] = HAL_ADC_GetValue(&hadc1);
uhADCxConvertedValue[2] = HAL_ADC_GetValue(&hadc1);
while(0 == __HAL_ADC_GET_FLAG(&hadc1, ADC_FLAG_EOS));
uhADCxConvertedValue[3] = HAL_ADC_GetValue(&hadc1);
像 upside 这样的代码可以正常工作。请注意,我尝试在读取 ADC_DR 三次后轮询 EOS 标志。如果我把轮询语句放在前面,就会发生死循环。
而测试代码似乎也支持我的假设:EOS与EOC的边缘有很深的关联。其实我也试过3次清除EOC标志,之后也能拿到EOS标志,但是这种情况下FIFO里的数据好像也被清除了,以为没读到ADC_DR。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分