找回密码
 立即注册
查看: 108|回复: 4

ADC+DMA

[复制链接]
已绑定手机

11

主题

17

回帖

141

积分

注册会员

积分
141
发表于 2026-7-30 10:59:36 | 显示全部楼层 |阅读模式
/******************** ADC 配置 ********************/
void        ADC_config(void)
{
        ADC_InitTypeDef                ADC_InitStructure;                //结构定义

        ADC_InitStructure.ADC_SMPduty   = 31;                //ADC 模拟信号采样时间控制, 0~31(注意: SMPDUTY 一定不能设置小于 10)
        ADC_InitStructure.ADC_CsSetup   = 0;                //ADC 通道选择时间控制 0(默认),1
        ADC_InitStructure.ADC_CsHold    = 1;                //ADC 通道选择保持时间控制 0,1(默认),2,3
        ADC_InitStructure.ADC_Speed     = ADC_SPEED_2X16T;                //设置 ADC 工作时钟频率        ADC_SPEED_2X1T~ADC_SPEED_2X16T
        ADC_InitStructure.ADC_AdjResult = ADC_RIGHT_JUSTIFIED;        //ADC结果调整,        ADC_LEFT_JUSTIFIED,ADC_RIGHT_JUSTIFIED
        ADC_Inilize(&ADC_InitStructure);                //初始化
        ADC_PowerControl(ENABLE);                                //ADC电源开关, ENABLE或DISABLE
        NVIC_ADC_Init(DISABLE,Priority_0);                //中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3
}


/******************** DMA 配置 ********************/
void        DMA_config(void)
{
        DMA_ADC_InitTypeDef                DMA_ADC_InitStructure;                //结构定义

        DMA_ADC_InitStructure.DMA_Enable = ENABLE;                        //DMA使能          ENABLE,DISABLE
        DMA_ADC_InitStructure.DMA_Channel = 0xffff;                        //ADC通道使能寄存器, 1:使能, bit15~bit0 对应 ADC15~ADC0
        DMA_ADC_InitStructure.DMA_Buffer = (u16)DmaAdBuffer;        //ADC转换数据存储地址
        DMA_ADC_InitStructure.DMA_Times = ADC_4_Times;        //每个通道转换次数, ADC_1_Times,ADC_2_Times,ADC_4_Times,ADC_8_Times,ADC_16_Times,ADC_32_Times,ADC_64_Times,ADC_128_Times,ADC_256_Times
        DMA_ADC_Inilize(&DMA_ADC_InitStructure);                //初始化
        NVIC_DMA_ADC_Init(ENABLE,Priority_0,Priority_0);                //中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0~Priority_3; 总线优先级(低到高) Priority_0~Priority_3
        DMA_ADC_TRIG();                //触发启动转换
}       

截图202607301043264501.jpg
在使用ADC+DMA时    DMA搬运数据只能像上面的格式一样吗?   我想是不是能够让DMA每次只搬运ADC转换的数据 然后存入数组中让其自增   这样我就可以让搬运次数和数组大小匹配

回复

使用道具 举报 送花

已绑定手机

7

主题

411

回帖

6596

积分

论坛元老

积分
6596
发表于 2026-7-30 11:19:52 | 显示全部楼层
下次就从+2n位置开始呗,只需最后的最后把平均值的位置留够.
回复

使用道具 举报 送花

已绑定手机

11

主题

17

回帖

141

积分

注册会员

积分
141
 楼主| 发表于 2026-7-30 11:38:12 | 显示全部楼层
lcws*** 发表于 2026-7-30 11:19
下次就从+2n位置开始呗,只需最后的最后把平均值的位置留够.

那数组所申请的内存大了很多吧
回复

使用道具 举报 送花

已绑定手机

7

主题

411

回帖

6596

积分

论坛元老

积分
6596
发表于 2026-7-30 12:17:21 | 显示全部楼层
mppq*** 发表于 2026-7-30 11:38
那数组所申请的内存大了很多吧

哦,我以为你只需转换一个通道,用一个数组来存N次的DMA数据。
这么说来你是要一次DMA转换多个通道是吗?估计是没办法省略每个通道最后4字节的数据,手册里我也没找到相关选项。
回复

使用道具 举报 送花

83

主题

8216

回帖

1万

积分

超级版主

积分
17634
发表于 2026-7-30 12:36:31 | 显示全部楼层
必须按这个格式,无法修改。
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-9-22 11:32 , Processed in 0.067484 second(s), 68 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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