历史上的今天
返回首页

历史上的今天

今天是:2024年09月22日(星期日)

正在发生

2018年09月22日 | STM32 ADC多通道DMA传输

2018-09-22 来源:eefocus

 ADC多通道采集是在ADC单通道DMA传输的基础上写的,代码如下:

volatile u16 adcconverdata[2]={0,0};

static void ADC_GPIO_Config(void)

{

  GPIO_InitTypeDef  GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_2;//添加PA2的GPIO初始化代码

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;

GPIO_Init(GPIOA, &GPIO_InitStructure);

}

static void ADC_Mode_Config(void)

{

  ADC_InitTypeDef ADC_InitStructure;

  DMA_InitTypeDef DMA_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);

DMA_DeInit(DMA1_Channel1);

DMA_InitStructure.DMA_PeripheralBaseAddr=(uint32_t)&ADC1->DR;

DMA_InitStructure.DMA_MemoryBaseAddr=(uint32_t)adcconverdata;//由于采集的是多通道的数据,必须定义数组来存放数据,而数组的名字就是数组的首地址。所以不能这么写(uint32_t)&adcconverdata;

DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;

DMA_InitStructure.DMA_BufferSize=2;   //由于是两个通道,这里改成2

DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; //开启内存地址自增

DMA_InitStructure.DMA_PeripheralInc =DMA_PeripheralInc_Disable ;

DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;

DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;

DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;

DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;

DMA_InitStructure.DMA_M2M=DMA_M2M_Disable;

DMA_Init(DMA1_Channel1,&DMA_InitStructure);

DMA_Cmd(DMA1_Channel1,ENABLE);

ADC_DeInit(ADC1);

ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;

ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;

ADC_InitStructure.ADC_ScanConvMode=ENABLE; //开启扫描模式

ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;

ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;

ADC_InitStructure.ADC_NbrOfChannel=2;  //通道书为2

ADC_Init(ADC1,&ADC_InitStructure);

RCC_ADCCLKConfig(RCC_PCLK2_Div8); 

ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_239Cycles5);

ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 2, ADC_SampleTime_239Cycles5);//定义通道的转换顺序

ADC_DMACmd(ADC1,ENABLE);

  ADC_Cmd(ADC1,ENABLE);

ADC_ResetCalibration(ADC1);

while(ADC_GetResetCalibrationStatus(ADC1));

ADC_StartCalibration(ADC1);

while(ADC_GetCalibrationStatus(ADC1));

ADC_SoftwareStartConvCmd(ADC1,ENABLE);

}

void ADC_InitConfig(void)

{

  ADC_GPIO_Config();

ADC_Mode_Config();

}

上述代码中红色部分为需要修改或者添加的代码,此部分代码我已经注释,比较容易理解

下面附主函数的代码

extern volatile u16 adcconverdata[2]; 

 int main(void) 

 {

 float m[2]; 

 delay_init();     

 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

uart_init(115200); 

ADC_InitConfig(); 

 while(1)

 { 

 printf("adcconverdata[0]=%d \r\n",adcconverdata[0]); 

 printf("adcconverdata[1]=%d \r\n",adcconverdata[1]); delay_ms(500); 

 }

 }

代码在while循环里直接打印出采集到的数据。上面代码我使用的是PA1和PA2作为采集通道。


推荐阅读

史海拾趣

CUI Inc.公司的发展小趣事

CUI Inc.一直坚信,与客户的紧密合作是其成功的关键。因此,公司始终致力于与客户发展协作性伙伴关系。通过深入了解客户的需求和反馈,CUI不断优化其产品和服务,以满足客户的期望。这种以客户为中心的经营理念不仅赢得了客户的忠诚和支持,还为CUI带来了持续的业务增长和市场份额的扩大。

这些故事只是CUI Inc.在电子行业中发展起来的一部分可能情况。实际上,CUI的发展可能涉及更多的战略决策、市场变化和技术突破。如果需要更具体、详细的故事,建议查阅相关的行业报告、公司年报或新闻资讯。

Gigabit Logic Inc公司的发展小趣事
采用集成电路等现代电子元器件,提高了电路的可靠性和稳定性。
Clever Little Box公司的发展小趣事

在市场竞争日益激烈的情况下,Clever Little Box意识到,单打独斗很难取得长久的成功。于是,公司开始积极寻求与其他企业的合作,通过共赢的战略选择,实现资源共享、优势互补。这种合作模式不仅帮助公司扩大了市场份额,还提高了公司的品牌知名度和影响力。

Chyao Shiunn Electronic Industrial Ltd公司的发展小趣事

随着市场竞争的加剧,Chyao Shiunn意识到品质管理的重要性。公司开始加强产品质量的控制,从原材料的采购到生产流程的每一个环节都严格把关。同时,公司还加大了品牌宣传力度,通过参加行业展会、举办技术研讨会等方式提升品牌知名度。这些举措不仅提高了公司的市场份额,也增强了客户对公司的信任。

CHINFA公司的发展小趣事

在环保日益受到重视的今天,CHINFA公司积极响应国家号召,践行绿色环保理念。公司致力于研发和生产节能、环保的电子产品,通过技术创新和材料替代,减少了对环境的污染和破坏。同时,公司还加强了对生产废弃物的处理和回收利用,实现了资源的循环利用和可持续发展。

AC Photonics Inc公司的发展小趣事

AC Photonics Inc深知品质是企业生存和发展的关键。因此,公司始终将品质管理放在首位,从原材料采购到生产流程控制,再到产品出厂检验,都严格遵循国际标准和行业规范。同时,公司还注重品牌建设,通过参加行业展会、举办技术研讨会等方式,不断提升品牌知名度和美誉度。这些努力使得AC Photonics Inc的产品在市场上获得了广泛的认可和好评。

问答坊 | AI 解惑

u盘坏了自己修

虽然外壳写着清华紫光,但这个年头没有什么是可信的。 拆开一看flash是三星的K9G8G08U0M,不知道是不是黑芯片改装的,控制芯片是CBM2080。 U盘的指示灯不亮,就先检查了电源芯片,是一个sot-89封装的,看不出型号,结果输出没有3.3v,外接了一 ...…

查看全部问答>

两片FPGA顺序连接?

两片FPGA顺序连接,应该怎么连接啊?都需要连接那些管脚呢?求助各位高手!…

查看全部问答>

在消费电子设备中如何选择和集成MEMS运动处理方案

本帖最后由 jameswangsynnex 于 2015-3-3 20:02 编辑 对设备在三维空间中的运动进行测量及智能处理的运动处理技术,将是下一个重大的**性技术,会对未来的手持消费电子设备、人机接口、及导航和控制产生重大影响。 这场变革的推动力量是基于微机电 ...…

查看全部问答>

求购 S3C4510B 的开发板(只要能用就行)

求购 S3C4510B 的开发板,最好微芯力的 最近找了份4510b的资料,看着不错可惜没有板子练。真是郁闷啊!不知道哪为高手还有收藏! 有的话留个言! 电话:13141280460 qq:406672875…

查看全部问答>

夏宇闻FPGA培训视频

由北京至芯科技发布$(\'swf_DqE\').innerHTML=AC_FL_RunContent(\'width\', \'550\', \'height\', \'400\', \'allowNetworking\', \'internal\', \'allowScriptAccess\', \'never\', \'src\', encodeURI(\'http://6.cn/p/Rghljq8e/T5cppjmtuYifw.sw ...…

查看全部问答>

关于STM32内部温度传感器的问题?

香版主您好!!!我现在的项目是用STM32的内部温度传感器来估算环境温度,初始化了AD,DMA,也做了AD校准,采样也是按推荐的17.1uS,开始的时候用内置晶振,根据温度计算公式(推荐值)做了几十台样机,发现误差在允许范围内。接着生产了1000台 ...…

查看全部问答>

香兄请指点一下:TIM1不能翻转管脚。

原固件库中的例子FWLibexamplesTIMOCToggle使用TIM2,无问题。将其中的TIM2改为TIM1,并修改了相应的设置(如下),发现可进中断,但各输出管脚(pin8、9、10、11)一直为低电平,不能翻转,不知何故?请指教。改为tim1后的main.c/*********** ...…

查看全部问答>

关于STM32闪存擦写次数与数据保存期限的重要说明

ST在2008年3月21日更新了STM32增强型(STM32F103)和STM32基本型(STM32F101)的数据手册。在最新的数据手册中,再次确认STM32的闪存存储器的擦写次数指标,在整个工作温度范围超过10,000次,即STM32F101基本型的-40摄氏度至+85摄氏度,STM32F103 ...…

查看全部问答>

有谁用FFT呀

人谁用过FFT,我也想作一个音乐的显示屏,但是知道FFT怎么作…

查看全部问答>