OpenEdv-开源电子网

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

【求助】关于多路ADC采集并用DMA读数据

[复制链接]

13

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
111
金钱
111
注册时间
2013-8-13
在线时间
0 小时
发表于 2013-8-31 19:02:41 | 显示全部楼层 |阅读模式
    我有三个模拟量通道,需要用ADC0的0、1、2通道来转换成数字量,并且读取出来,编程后只能读出0通道的值,其他通道的值和0通道一样。 求解啊 求解啊。。 对DMA概念很模糊啊 又很急。望各位大虾们解释啊。。感激啊。。。
main函数:
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "key.h"
#include "usart.h"
#include "exti.h"
#include "wdg.h"
#include "timer.h"
#include "pwm.h"
#include "adc.h"
 
 int main(void)
 {
SystemInit();
delay_init(72);      //延时初始化
NVIC_Configuration();
uart_init(9600);
  LED_Init();
KEY_Init();          //按键初始化
Adc_Init();
DMA_Configuration();  
while(1)
{
Read_ADC1_MultiChannel(ADC_Channel_0);
Read_ADC1_MultiChannel(ADC_Channel_1);
Read_ADC1_MultiChannel(ADC_Channel_2);
}
 }
另外读取数字量的函数:
void Read_ADC1_MultiChannel(unsigned char u8_channNo)
{  
        unsigned short  ADC_data = 0;
        unsigned char i,id;
        ADC_SoftwareStartConvCmd(ADC1, DISABLE);
                
        for(i=4;i>0;i--)
        {        
                ADC_RegularChannelConfig(ADC1, u8_channNo, 1,  ADC_SampleTime_239Cycles5 );
                ADC_SoftwareStartConvCmd(ADC1, ENABLE);                         /* 软件启动 ADC1 */                
                do
                {
                        id = ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC);                         /* 读取转换标志 */
                }        while(!id);                                                                                 /* 等待,直到转换完成 */
                
                ADC_data += ADC_GetConversionValue(ADC1);                              
                ADC_SoftwareStartConvCmd(ADC1, DISABLE);                                 /* 软件停止 ADC1 */                                                                          
        }
                                 
        ADC_data = ADC_data >> 4;                                                                         /* 取 16 次采样平均值 */        
        ADC_data = (unsigned int)(((unsigned int)ADC_data)*3300>>12);/* 把采集到的数值转换成电压数据 */


        MultiChannel_AsciiBuff[0] = ADC_data/1000%10 + 0x30;
        MultiChannel_AsciiBuff[1] = ADC_data/100%10 + 0x30;
        MultiChannel_AsciiBuff[2] = ADC_data/10%10 + 0x30;                                                 /* 数据分离送 USART1 显示 */
        MultiChannel_AsciiBuff[3] = ADC_data%10 + 0x30;
        MultiChannel_AsciiBuff[4] = 0;

printf("MultiChannel_AsciiBuff:\t%d.%d%d%dv\n",MultiChannel_AsciiBuff[0],MultiChannel_AsciiBuff[1],MultiChannel_AsciiBuff[2],MultiChannel_AsciiBuff[3]) ; 

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

使用道具 举报

39

主题

2026

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2020
金钱
2020
注册时间
2013-5-1
在线时间
87 小时
发表于 2013-8-31 22:14:03 | 显示全部楼层
这个是六路AD采样加DMA的,参考下

六路ADC (DMA传输).zip

349.88 KB, 下载次数: 602

博观而约取,厚积而薄发。
回复 支持 反对

使用道具 举报

13

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
111
金钱
111
注册时间
2013-8-13
在线时间
0 小时
 楼主| 发表于 2013-9-3 19:11:07 | 显示全部楼层
回复【2楼】745021926:
---------------------------------
我试试吧  谢谢。。。
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2018-8-24
在线时间
2 小时
发表于 2018-9-23 20:17:38 | 显示全部楼层
这个试验成功了

按键实验.zip

5.72 MB, 下载次数: 328

回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-19 22:30

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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