OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7612|回复: 4

发个程序,AD16通道采样.DMA

[复制链接]

102

主题

318

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
1875
金钱
1875
注册时间
2011-12-21
在线时间
545 小时
发表于 2012-7-22 09:39:38 | 显示全部楼层 |阅读模式
如题,我的方案是每次只采样一个通道,DMA连续采样多次,然后换下一个通道。没有用连续循环采样因为不方便操作而且容易错位。
程序是VE的,LCD是7寸大屏。
仅供参考

ADC_多通道 _DMA_非扫描循环.rar

228.04 KB, 下载次数: 252

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2012-7-22 10:31:30 | 显示全部楼层
回复【楼主位】玻璃之城2046:
---------------------------------
谢谢分享
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

18

主题

158

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
400
金钱
400
注册时间
2011-11-23
在线时间
0 小时
发表于 2012-7-22 11:14:37 | 显示全部楼层
回复【楼主位】玻璃之城2046:
---------------------------------
        RCC->APB2ENR|=1<<2;   //使能IO口 A
GPIOA->CRL=0X00000000;//PA0-PA7  0~7通道 模拟输入
GPIOB->CRL&=0xffffff00; //PB0-PB1 8~9通道
GPIOC->CRL&=0XFF000000;//PC0-PC5  10-15通道
楼主,你用了16个通道去采集,可是你怎么没有使能PB C 的IO口啊~
回复 支持 反对

使用道具 举报

36

主题

1263

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1612
金钱
1612
注册时间
2012-6-15
在线时间
39 小时
发表于 2012-7-25 17:01:11 | 显示全部楼层
不会错位啊
回复 支持 反对

使用道具 举报

36

主题

1263

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1612
金钱
1612
注册时间
2012-6-15
在线时间
39 小时
发表于 2012-7-25 17:03:53 | 显示全部楼层
我的程序是这样配置的 
时钟 开启--
/****** ADC初始化 ********
--通道数 9 采集10次
--DMA循环采集
**************************/
DMA1_Channel1->Config(
true, //使能
ADChannelNum*ADGetTimes, //传输数据数量
DMAChannelType::Circular, //循环模式
(u32)&ADC1->DR, //外设地址
(u32)&ADValues, //内存地址
DMAChannelType::ReadFromPhi, //传输方向
false, //外设增量
true, //内存增量
DMAChannelType:_16b, //外设数据宽度
DMAChannelType:_16b, //内存数据宽度
DMAChannelType:_L, //优先级
DMAChannelType::Null //中断禁止
);
ADC1->Config(ADChannelNum);
ADC1->RegularChannelConfig( ADCType::Chn_5,  1 );
ADC1->RegularChannelConfig( ADCType::Chn_4,  2 );
ADC1->RegularChannelConfig( ADCType::Chn_1,  3 );
ADC1->RegularChannelConfig( ADCType::Chn_0,  4 );
ADC1->RegularChannelConfig( ADCType::Chn_13, 5 );
ADC1->RegularChannelConfig( ADCType::Chn_12, 6 );
ADC1->RegularChannelConfig( ADCType::Chn_11, 7 );
ADC1->RegularChannelConfig( ADCType::Chn_10, 8 );
ADC1->RegularChannelConfig( ADCType::Chn_16, 9 , ADCType::T_239p5 ); //芯片温度

ADC1->TempAndVrefEnable(true);
ADC1->DMAEnable(true);
ADC1->Enable(true);
ADC1->RegularSoftTrigEnable(true);

ADC1->RstCalibration();
while(ADC1->WaitRstCalibration());
ADC1->Calibration();
while(ADC1->WaitCalibration());

ADC1->RegularSoftTrigEnable(true);

值的处理
void Application::GetADValues(u16 *adv)
{
for(int n=0; n<ADChannelNum; n++)
{
u16 max=ADValues[n], min=ADValues[n],curr;
u32 sum = 0;
for(int i=0; i<ADGetTimes; i++)
{
curr = ADValues[n+i*ADChannelNum] ;
if(min > curr) min = curr;
if(max < curr) max = curr;
sum += curr;
}
sum -= max + min;
adv[n] = sum / (ADGetTimes-2) ;

//adv[n] = 3.3 * adv[n] / 4095 ;
}
}


在线连续运行 几个月 也没有任何异常 
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-26 23:13

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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