5968|8

74

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

ADC共使用4通道,每次2通道通过DMA读取;怎么实现2组切换? [复制链接]

现在我的程序里面需要用到ADC的4个通道,
1.ADC1_0,ADC2_1为一组,负责320组数据,每次16个数据的采集工作;
2.ADC1_10,ADC2_11为一组,负责对另外输入ADC信号进行处理;
两组不会同时工作,请问程序中怎么样设置和实现?
此帖出自stm32/stm8论坛

最新回复

                                 哦,明白了。谢谢  详情 回复 发表于 2010-3-31 18:22
点赞 关注
 

回复
举报

81

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
void         ADC_Configuration(void)                 {
        ADC_InitTypeDef ADC_InitStructure;
        ADC_InitStructure.ADC_Mode = ADC_Mode_RegSimult; //ADC1和ADC2工作在独立模式
          ADC_InitStructure.ADC_ScanConvMode = ENABLE;        //指定转换工作在扫描(多信道)模式
          ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;//指定转换工作在连续模式
          ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;                         //由软件控制开始转换,而不是外部触发器。
          ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//ADC数据右对齐
          ADC_InitStructure.ADC_NbrOfChannel = 1;        //指定将要进行转换的ADC 信道号1
          ADC_Init(ADC1, &ADC_InitStructure);
          ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_13Cycles5);        //ADC1 regular channels configuration
          ADC_DMACmd(ADC1, ENABLE);                 //使能ADC1 DMA请求
                                                                       
        ADC_InitStructure.ADC_Mode = ADC_Mode_RegSimult;     //配置
          ADC_InitStructure.ADC_ScanConvMode = ENABLE;
          ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
          ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
          ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
          ADC_InitStructure.ADC_NbrOfChannel = 1;
          ADC_Init(ADC2, &ADC_InitStructure);
           ADC_RegularChannelConfig(ADC2, ADC_Channel_1, 1, ADC_SampleTime_13Cycles5);  /* ADC2 regular channels configuration */
          ADC_ExternalTrigConvCmd(ADC2, ENABLE);                                  /* Enable ADC2 external trigger conversion */
          ADC_DMACmd(ADC2, ENABLE);
       
        ADC_Cmd(ADC1, ENABLE);           //使能ADC1外围模块
          ADC_TempSensorVrefintCmd(ENABLE);                                                //Enable Vrefint channel17
        ADC_ResetCalibration(ADC1);        //重置ADC1校准寄存器
          while(ADC_GetResetCalibrationStatus(ADC1));        //等待ADC1校准寄存器准备就绪
        ADC_StartCalibration(ADC1);          //开始ADC1校准过程
          while(ADC_GetCalibrationStatus(ADC1));          //等待ADC1校准过程结束
        ADC_Cmd(ADC2, ENABLE);  /* Enable ADC2 */
        ADC_ResetCalibration(ADC2);         /* Enable ADC2 reset calibaration register */
          while(ADC_GetResetCalibrationStatus(ADC2));        /* Check the end of ADC2 reset calibration register */
        ADC_StartCalibration(ADC2);          /* Start ADC2 calibaration */
          while(ADC_GetCalibrationStatus(ADC2));   /* Check the end of ADC2 calibration */
        ADC_SoftwareStartConvCmd(ADC1, ENABLE); /* Start ADC1 Software Conversion */
        while(!DMA_GetFlagStatus(DMA1_FLAG_TC1));         /* Test on DMA1 channel1 transfer complete flag */
          DMA_ClearFlag(DMA1_FLAG_TC1);        /* Clear DMA1 channel1 transfer complete flag */
}
此帖出自stm32/stm8论坛
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
                                 上面的是第一组ADC的初始化函数,第二种类似处理;现在不知道怎么样让DMA处理的时候可以在2组中间进行相应切换,请大家赐教!
此帖出自stm32/stm8论坛
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

4
 
                                 只需要改变ADC模块的配置,不需要改变DMA模块的配置。
此帖出自stm32/stm8论坛
 
 
 

回复

54

帖子

0

TA的资源

一粒金砂(初级)

5
 
2010-3-31 17-31-52.png
这个是同步规则的模式,现在我有定义ADC1中0和10,ADC中1和11,
1.请问如果采用DMA模式,读到的是否为0,1;10,11;0,1;10,11依次类推?
2.如何可以实现只读取其中一组数据?
此帖出自stm32/stm8论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

6
 
你应该在处理第一组时配置一次,只需配置通道0和1;然后在处理第二组时再配置一次,只需配置通道10和11。

不能只进行一次的配置。
此帖出自stm32/stm8论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

7
 
现在我的ADC初始化函数有2个,按照2个组来写的;调用ADC_Configuration配置ADC1_0和ADC2_1;调用ADC_Configuration2配置ADC1_10和ADC2_11。
按照你的说法第1次调用ADC_Configuration,第2次ADC_Configuration2函数调用的时候,第1次调用ADC_Configuration里面的ADC1_0和ADC2_1通道会自动关闭。
不用把第1次调用配置的通道用什么方法关闭对吧?
此帖出自stm32/stm8论坛
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

8
 
怎么叫关闭?

因为ADC_NbrOfChannel = 1,每个ADC模块只有一个通道参与转换,怎么会有关不关闭的问题?
此帖出自stm32/stm8论坛
 
 
 

回复

90

帖子

0

TA的资源

一粒金砂(初级)

9
 
                                 哦,明白了。谢谢
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表