找回密码
 立即注册
查看: 132|回复: 3

STC32G144使用定时器17触发ADC1与ADC2同步采样并DMA传输问题

[复制链接]

1

主题

2

回帖

23

积分

新手上路

积分
23
发表于 2026-10-21 12:57:01 | 显示全部楼层 |阅读模式
使用STC32G144K246,Aicube生成代码。
CPU主频108Mhz。
定时器17触发ADC1与ADC2同步采样并DMA传输,打开DMA传输完成中断,在中断中计数。
ADC1与ADC2都是四通道,ADC转换速度设置为460Khz以上,定时器17溢出时间设置为2.5us,也就是400khz频率采样。
使用定时器10作为1s中断,保存DMA传输完成中断的次数。使用USB-CDC打印到调试助手。
完整工程移植了freeRTOS和LVGL,太大了了,上传不了。
main.c (44.08 KB, 下载次数: 76) ADC_Sample.c (6.47 KB, 下载次数: 74) ADC_Sample.h (2.2 KB, 下载次数: 72) config.h (5.44 KB, 下载次数: 69)
问题:
DMA传输完成中断次数,似乎并不是1000次,而是跟随ADC转换速度进行变化。
截图202610211255386739.jpg

ADC1设置

ADC1设置

ADC2设置

ADC2设置

截图202610211256309735.jpg





回复

使用道具 举报 送花

1

主题

2

回帖

23

积分

新手上路

积分
23
 楼主| 发表于 2026-10-21 12:59:55 | 显示全部楼层
这个是AiCube的配置文件

test2.aic

117.19 KB, 下载次数: 75

回复

使用道具 举报 送花

已绑定手机

2

主题

154

回帖

470

积分

中级会员

积分
470
发表于 2026-10-21 15:51:18 | 显示全部楼层
在 ADC_DMA 模式下,转换节拍由 DMA 序列控制,而不是由 ADC_TRIGSEL 选中的触发源控制。
你在DMA中断中触发下回DMA启动,
所以dma的次数=  adc时钟频率/(一轮adc所用的时钟数*通道数);
即是你所说的“而是跟随ADC转换速度进行变化”

如果你希望 DMA 模式下每次转换之间插入间隔,用的不是 TIMER17,而是
ADCn_ITV[15:0]:设置 ADCn 转换的间隔时间(基于系统时钟)

111111.png

回复

使用道具 举报 送花

1

主题

2

回帖

23

积分

新手上路

积分
23
 楼主| 发表于 2026-10-21 22:43:28 | 显示全部楼层
jrc*** 发表于 2026-10-21 15:51
在 ADC_DMA 模式下,转换节拍由 DMA 序列控制,而不是由 ADC_TRIGSEL 选中的触发源控制。
你在DMA中断中触 ...

OK,多谢解答
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-11-8 02:08 , Processed in 0.067449 second(s), 57 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表