GD32F350使用ADC+DMA采集ADC的同时开启TIMER13定时器进行信号输入捕获,发现捕获出错

[复制链接]
 楼主| xiaox314 发表于 2025-5-25 19:50 | 显示全部楼层 |阅读模式
GD32F350 使用ADC+DMA采集ADC的同时,开启TIMER13定时器进行信号输入捕获,发现TIMER13捕获出错。分别运行就不会有问题,例如先进行ADC+DMA采集完后再进行TIMER13的捕获也是正常的,同时进行就不对。
zhouyong77 发表于 2025-5-26 07:57 来自手机 | 显示全部楼层
是不是ADC和定时器的配置存在冲突了
daichaodai 发表于 2025-5-26 08:11 来自手机 | 显示全部楼层
检查一下两者之间是不是有什么冲突配置项
dffzh 发表于 2025-5-26 11:13 | 显示全部楼层
本帖最后由 dffzh 于 2025-5-26 11:14 编辑

应该是两者的代码配置有点问题吧,可以试试按以下方向排查一下:
1、如果都用了中断,确认一下中断优先级配置;
2、如果都用了DMA,确认一下DMA资源配置;
3、确认一下GPIO引脚资源是不是有复用冲突?
ADC采集用的哪个IO口?
TIMER捕获用的哪个IO口?
发来,我有空帮你看下用户手册。
xionghaoyun 发表于 2025-5-26 11:29 | 显示全部楼层
1.优先级 2.ADC开始采集把中断使能关了
 楼主| xiaox314 发表于 2025-5-29 09:33 | 显示全部楼层
dffzh 发表于 2025-5-26 11:13
应该是两者的代码配置有点问题吧,可以试试按以下方向排查一下:
1、如果都用了中断,确认一下中断优先级配 ...

具体程序是PA1用于ADC采集(过采样32次),使用DMA传输4次采集数据,在这个过程中使用TIMER2_CH0(PA6)口用外部输入频率为输入时钟,累计12500次输出比较模式翻转TIMER2_CH2输出(PB0),(PB0和PB1连接)然后触发TIMER13_CH0(PB1)进行捕获采集,TIMER13开了更新和捕获中断,现在发现的是只要遇到捕获信号时,TIMER13的更新中断就没进(例如TIMER13, 8ms进一次更新中断,但遇到捕获信号,PB1由低变高时,或由高变低时,16ms后才进更新中断)。如果不同时使用ADC+DMA采集,又是正常的
dffzh 发表于 2025-5-29 10:01 | 显示全部楼层
本帖最后由 dffzh 于 2025-5-29 11:10 编辑
xiaox314 发表于 2025-5-29 09:33
具体程序是PA1用于ADC采集(过采样32次),使用DMA传输4次采集数据,在这个过程中使用TIMER2_CH0(PA6) ...

1、看下DMA中断和TIMER13更新中断的优先级配置情况(主优先级和子优先级分别是多少)?
2、ADC采样频率和DMA传输速率降低试试呢;
3、DMA是什么模式?是循环模式吗?
4、用逻辑分析仪或示波器对比测试一下正常时和异常时的捕获信号的波形,看是否正常?看波形排查是比较有效的方式;
5、类似问题,我们一般会在debug时看下相关外设的相关寄存器位的状态是否正常;
比如触发更新中断异常时,看下更新中断对应的寄存器标志位是0还是1,到底是标志位有了没进中断还是标志位都没置位。
409946837d00e12dd2.png


147186837cf8e2af66.png
 楼主| xiaox314 发表于 2025-5-29 13:45 | 显示全部楼层
dffzh 发表于 2025-5-29 10:01
1、看下DMA中断和TIMER13更新中断的优先级配置情况(主优先级和子优先级分别是多少)?
2、ADC采样频率和D ...

1. DMA的中断是nvic_irq_enable(DMA_Channel0_IRQn,1,1);TIMER13的中断是nvic_irq_enable(TIMER13_IRQn, 0, 1);
 楼主| xiaox314 发表于 2025-5-29 13:50 | 显示全部楼层
dffzh 发表于 2025-5-29 10:01
1、看下DMA中断和TIMER13更新中断的优先级配置情况(主优先级和子优先级分别是多少)?
2、ADC采样频率和D ...

2.ADC是1M的时钟,DMA是开了循环模式;不开循环模式,每次采集需把DMA重新初始化一遍,这样也会导致TIMER13捕获出错
3.正常时和异常时,输入的波形(待捕获)都是一样的,就是监测到TIMER13更新中断异常
dffzh 发表于 2025-5-29 14:05 | 显示全部楼层
xiaox314 发表于 2025-5-29 13:50
2.ADC是1M的时钟,DMA是开了循环模式;不开循环模式,每次采集需把DMA重新初始化一遍,这样也会导致TIMER ...
看来只能把代码工程发来,我才能帮忙继续分析分析了,方便的话就发。
麻花油条 发表于 2025-5-29 15:47 | 显示全部楼层
检查DMA通道和定时器通道是否配置正确,避免硬件资源冲突。
powerantone 发表于 2025-5-29 15:49 | 显示全部楼层
DMA、定时器配置是否正确。
probedog 发表于 2025-5-29 15:50 | 显示全部楼层
代码逻辑问题?
classroom 发表于 2025-5-29 15:51 | 显示全部楼层
建议在代码中添加错误处理机制。
flycamelaaa 发表于 2025-5-29 16:30 | 显示全部楼层
ADC、DMA和TIMER13的时钟不稳定可能导致数据传输错误或捕获失败。
stormwind123 发表于 2025-5-29 18:30 | 显示全部楼层
如果用了中断,检查中断优先级设置是否合理。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

737

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部

17

主题

737

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部