gshhkkk 发表于 2022-7-26 18:58

STM32F103使用cubemx配置ADC和DMA导致delay函数无法使用

用CUBEMX配置完adc和dma后在主函数中调用函数HAL_ADC_Start_DMA(&hadc1,(uint32_t *)&DMA_value,6);

会导致while循环中的delay延时函数失效,具体情况是:
不打开ADC,delay函数正常使用,可以1S打印一次信息,
但是打开HAL_ADC_Start_DMA(&hadc1,(uint32_t *)&DMA_value,6);函数后,打印频率不是1S,而是比1S快
同样,只使用ADC不使用DMA,在while循环之前打开HAL_ADC_Start_IT(&hadc1);,可以1S打印一次信息,
但是如果同时打开HAL_ADC_Start_IT(&hadc1);和HAL_ADC_Start(&hadc1);,就会导致打印的频率比1S快
有没有大佬知道如何解决问题

未说出口的像你 发表于 2022-8-16 06:46

这个可能是因为初始化顺序的问题吧

我吃小朋友 发表于 2022-8-16 07:08

是不是你初始化的问题呢?

失物招領 发表于 2022-8-16 07:31

这个官方是否有demo呀,你可以参考demo来找找原因

将爱藏于深海 发表于 2022-8-16 07:53

可以关闭DMA,ADC是否正常啊

故意相遇 发表于 2022-8-16 08:15

你可以问问ST的FAE,他家hal自动生成虽然简单,但是遇到问题也不好搞

白马过平川 发表于 2022-8-16 08:38

打印频率快1秒呢?时序的问题?

风凉 发表于 2022-8-16 08:59

没遇到过这问题啊,感觉像程序逻辑的事儿

捧一束彼岸花 发表于 2022-8-16 09:23

你可以把工程附上来,让大家帮你看看

月亮一键变蓝 发表于 2022-8-16 09:45

. While的delay函数失效,是不是因为你的delay采用的不是软延时呢?

在曼谷的春 发表于 2022-8-16 10:08

正常delay你要是用定时器的话,也不会失效的啊,你可以看看初始化地方,定时器是否初始化了

suzhanhua 发表于 2022-8-17 16:44

是不是开启了中断呢?   

phoenixwhite 发表于 2022-8-18 17:30

这个需要关闭DMA的中断代码。   

SantaBunny 发表于 2023-2-23 20:03

delay延时用的是for while死循环,这种延时精度不高,当有频繁中断产生时,延时就会变长,如果要精准定时建议你使用定时器,并且用优先级别较高的定时器

中国龙芯CDX 发表于 2024-3-31 22:54

直接使用官方的程序进行移植会更好的

fengm 发表于 2024-4-6 17:30

ADC的工作频率依赖于系统时钟的配置。如果系统时钟没有正确配置,可能会影响ADC的转换速率,从而影响到延时函数的执行。

claretttt 发表于 2024-4-7 13:12

比如在主循环中使用HAL_Delay()函数,或者在定时器中断中使用计数器来实现延时。这些方法都不会影响到中断服务函数的执行。

tifmill 发表于 2024-4-7 14:33

如果delay函数的准确性不是关键,可以考虑使用硬件延迟

jimmhu 发表于 2024-4-7 16:33

在DMA传输完成中断中处理数据时,如果数据处理占用了过多的时间,也会影响到延时函数的执行。优化中断服务程序中的数据处理逻辑,尽量减少中断服务程序的执行时间。

kkzz 发表于 2024-4-7 18:37

可能会持续占用资源并干扰其他功能,包括delay函数。
页: [1] 2 3
查看完整版本: STM32F103使用cubemx配置ADC和DMA导致delay函数无法使用