ST意法半导体
直播中

可口可甜

8年用户 844经验值
私信 关注
[问答]

在DMA中怎样去使用HAL_Delay回调函数呢

大家好,我是 MCU 和一般编程的新手,目前正在尝试计算 3 个 ADC 输入通道的平台平均值。我正在使用指数平滑来降低噪声和检测高原的算法。即使我的信号相似,也有轻微的偏移,而且总是小于 3 毫秒。

我的目标是只对一个通道运行该算法,当它检测到平台时,它会等待 3 毫秒,然后开始对所有通道进行平均。平均将在几毫秒后停止。为此,我正在使用 HAL_Delay 和 HAL_Gettick,但看起来我得到的值与实际值不同。
降噪和平均算法适用于单通道。可能有更聪明的方法来做到这一点,但我对此没有太多经验。
我正在寻找有关整个过程的建议。





回帖(1)

马沃源

2022-12-22 10:51:54
> 在 DMA 回调中使用 HAL_Delay
您需要确保 SysTick 比您在其中使用 HAL_Delay 的任何回调具有更高的优先级(数值较低)。
> 看起来我得到的价值观与现实不同。
以什么方式?
> 我正在寻求有关整个过程的建议。
HAL_Delay(3) 将等待 3-4 毫秒之间的某处。它不准确,因为它每毫秒递增一次,因此分辨率很差。您可以使用 CYCCNT 计数器来实现更准确的延迟。
一次传输很多值,而不是仅仅传输 3 个,会更有效率。如果您只关心 ADC,那么这可能并不重要。使用定时器以精确的时间间隔触发 ADC、通过 DMA 传输以及使用半完成和全完成中断进行处理将会更加高效。
高原检测将很挑剔。
举报

更多回帖

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