你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
DII 提问时间:2022-5-17 21:55 / 未解决
收藏 评论7 发布时间:2022-5-17 21:55

举报

7个回答
DII 回答时间:2022-5-17 21:59:29
用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快
有没有大佬知道如何解决问题


xmshao 回答时间:2022-5-18 07:28:58
你关注下中断优先级方面的问题,这里主要是DMA中断。另外,你打印是基于时间还是基于事件?
huanying 回答时间:2022-5-18 10:01:27
xmshao 发表于 2022-5-18 07:28
你关注下中断优先级方面的问题,这里主要是DMA中断。另外,你打印是基于时间还是基于事件? ...

delay延时用的是for while死循环,这种延时精度不高,当有频繁中断产生时,延时就会变长,如果要精准定时建议你使用定时器,并且用优先级别较高的定时器。
DII 回答时间:2022-5-18 10:25:51
huanying 发表于 2022-5-18 10:01
delay延时用的是for while死循环,这种延时精度不高,当有频繁中断产生时,延时就会变长,如果要精准定时 ...
这是我刚刚用F4芯片测试的程序  问题依旧 ,延时1S打印一次  但是使用ADC_DMA后打印频率非常高
DII 回答时间:2022-5-18 10:27:04
xmshao 发表于 2022-5-18 07:28
你关注下中断优先级方面的问题,这里主要是DMA中断。另外,你打印是基于时间还是基于事件? ...

我昨天可能没有表达清楚  程序是图一图二和图三   图一是1S打印一次
把程序改为图2后  (昨天)打印情况为1S打印10多次,但是找不到原因,
打开DMA传输,使用图三的程序后,还是1S打印10多次,(中断都是空函数)
但是今天早上再次调试,程序又正常了(程序一点都没变),挺玄学的

图3.PNG
图二.PNG
图一.PNG
DII 回答时间:2022-5-18 10:36:34
huanying 发表于 2022-5-18 10:01
delay延时用的是for while死循环,这种延时精度不高,当有频繁中断产生时,延时就会变长,如果要精准定时 ...

这是我刚刚用F4芯片测试的程序  问题依旧 ,延时1S打印一次  但是使用ADC_DMA后打印频率非常高
F4.PNG
huanying 回答时间:2022-5-18 11:18:21
DII 发表于 2022-5-18 10:36
这是我刚刚用F4芯片测试的程序  问题依旧 ,延时1S打印一次  但是使用ADC_DMA后打印频率非常高
...

printf  效率很低,最好不要用,而且你这是调试没什么用

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版