关于ADC+DMA中断的问题,想请教一下各位。

2019-07-21 04:18发布

本帖最后由 BUGMAN 于 2019-3-14 19:42 编辑

时序图 时序图
ICG为25HZ的PWM信号,下降沿触发产生信号A,信号A为500K的PWM脉冲,脉冲持续3700个后,变为低电平。

想要这样的脉冲是想要用来触发AD转换,然后后面多出来的时间用来USB传输数据到上位机。
目前我设想的方案是,ICG信号(TIM3产生)通过主从模式让其下降沿使能启动A信号(TIM4产生),A信号上升沿触发启动AD转换,AD转换再触发DMA将数据转移到前面设好的数组里,采集3700个数据后进入中断,关闭TIM4同时USB_USART_SendData()函数传输数据。在SH下一个下降沿到来前完成中断,SH下一个下降沿到来时又会使能TIM4。

目前的问题就是不知道如何在采集3700个数字后进入中断。
之前我以为将DMA设置里的DMA_BufferSize设为3700,在将DMA设为循环模式,AD转换一次传一个数据,传3700个数据之后就能进入传输完成中断了。结果发现并不是我预料的那样。


DMA与ADC设置代码 DMA与ADC设置代码





求各位指点一下,真的感谢!

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
26条回答
BUGMAN
1楼-- · 2019-07-21 04:58
 精彩回答 2  元偷偷看……
BUGMAN
2楼-- · 2019-07-21 08:54
本帖最后由 BUGMAN 于 2019-3-16 11:17 编辑
nashui_sx 发表于 2019-3-15 22:52
降低主频正好使adc是500k估计会影响你的usb
所以你的思路应该最适合你,
或者这个500k能变通,不过是采 ...

终于搞出来啦,我的思路是可以的,发现问题出在PWM波触发ADC的那步,我一开始设置PWM波的占空比为50%,我以为是上升沿触发AD转换,后来发现当PWM波处于高电平的时候,AD转换就一直在进行,因此DMA也一直在工作,当DMA累计搬了3700个数后,就进入中断了,因此AD转换并没有按500K的频率进行。
我的设置方法是将PWM波的占空比调的足够小,保证一次PWM波周期只能进行一次AD转换,这样也就只能进行一次DMA转换,因此3700个脉冲波后就会进入中断。
再次感谢老哥帮忙!
nashui_sx
3楼-- · 2019-07-21 14:36
本帖最后由 nashui_sx 于 2019-3-14 20:14 编辑

假如25hz的信号是外部的  500k采样周期用 ADC_SampleTime 和ADC_TwoSamplingDelay 保证采样周期    应该SH下降沿的时候进外部中断  启动adc dma   dma数据量3700  dma中断证明采集完成给信号usb发送

假如25hz是自己设定的    500k采样周期用 ADC_SampleTime 和ADC_TwoSamplingDelay 保证采样周期   启动adc dma 定时器触发模式  dma数据量3700  采样频率定时器触发模式设定25hz  dma中断证明采集完成给信号usb发送

应该是这样的

edmund1234
4楼-- · 2019-07-21 19:53
如果说你不是想获取PWM的平均值, 就不应该用ADC。
用TIM的PWM input mode就可以了
零三翟邢止胃
5楼-- · 2019-07-21 22:47
nashui_sx 发表于 2019-3-14 20:13
假如25hz的信号是外部的  500k采样周期用 ADC_SampleTime 和ADC_TwoSamplingDelay 保证采样周期    应该SH ...

我这个25HZ信号是由STM32F103内部的TIM3产生的,F1里有这两个函数吗?
BUGMAN
6楼-- · 2019-07-21 23:16
 精彩回答 2  元偷偷看……

一周热门 更多>