stm32我应该在哪里计算数据

stm32我应该在哪里计算数据,stm32,interrupt,dma,Stm32,Interrupt,Dma,我正在使用ADC和DMA对48kHz采样率的声音进行采样。我使用的是HAL\u ADC\u ConvCpltCallback函数,当标记打开时,我需要处理这些样本 在回调中,我只使用样本填充数组,并将boolreadComplete设置为true,然后在while(1)中检查readComplete==true,如果是,我在while循环中处理数据 问题是,当我调试程序时,我可以看到回调的优先级高于while(1)循环,并且它随机跳转到while。这就像while(1)循环不是每次都执行一样 问

我正在使用ADC和DMA对48kHz采样率的声音进行采样。我使用的是
HAL\u ADC\u ConvCpltCallback
函数,当标记打开时,我需要处理这些样本

在回调中,我只使用样本填充数组,并将bool
readComplete
设置为true,然后在while(1)中检查
readComplete==true
,如果是,我在while循环中处理数据

问题是,当我调试程序时,我可以看到回调的优先级高于while(1)循环,并且它随机跳转到while。这就像while(1)循环不是每次都执行一样


问题是,我应该在哪里或如何处理这些数据?

您设置readComplete标志的过程是正确的,因为您应该让程序在中断上下文中尽可能短地运行。(STM HAL从中断上下文调用ConvCpltCallback。)

中断的优先级始终高于主循环。
您什么时候开始下一个ADC转换过程?在while循环中完全处理数组数据之前,回调例程是否会覆盖这些数据?要解决这个问题,您可以尝试增加DMA传输的大小,这将增加回调之间的时间

请编辑您的问题并发布相关源代码的简短摘要,以便我们有更好的了解