OpenEdv-开源电子网

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

求助如何使用adc+dma采集一个波形

[复制链接]

5

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
113
金钱
113
注册时间
2019-6-18
在线时间
31 小时
发表于 2019-7-25 11:41:31 | 显示全部楼层 |阅读模式
4金钱
现在我想用adc+dma采集一个波形,并通过串口把数据发到电脑上,最后把数据复制进matlab可以绘出一个连续的波形。自己写了一个完全不能用
  1. //初始化ADC
  2. void  Adc_Init(void)
  3. {   
  4.   GPIO_InitTypeDef  GPIO_InitStructure;
  5.   ADC_CommonInitTypeDef ADC_CommonInitStructure;
  6.   ADC_InitTypeDef       ADC_InitStructure;
  7.        
  8.   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//使能GPIOA时钟
  9.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); //使能ADC1时钟

  10.   //先初始化ADC1通道5 IO口
  11.   GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_5;//PA5 通道5
  12.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;//模拟输入
  13.   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;//不带上下拉
  14.   GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化  

  15.   RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1,ENABLE);          //ADC1复位
  16.   RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1,DISABLE);        //复位结束         
  17.   //ADC 通用的初始化
  18.   ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled; //DMA失能 fish
  19.   ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;//独立模式
  20.   ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;//两个采样阶段之间的延迟5个时钟
  21.   ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div4;//预分频4分频。ADCCLK=PCLK2/4=84/4=21Mhz,ADC时钟最好不要超过36Mhz
  22.   ADC_CommonInit(&ADC_CommonInitStructure);//初始化
  23.   //ADC1 初始化
  24.   ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;//12位模式
  25.   ADC_InitStructure.ADC_ScanConvMode = DISABLE;//非扫描模式       
  26.   ADC_InitStructure.ADC_ContinuousConvMode =  ENABLE;//关闭连续转换
  27.   ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;//禁止触发检测,使用软件触发
  28.   ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//右对齐       
  29.   ADC_InitStructure.ADC_NbrOfConversion = 1;//1个转换在规则序列中 也就是只转换规则序列1
  30.   ADC_Init(ADC1, &ADC_InitStructure);//ADC初始化
  31.         ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 1, ADC_SampleTime_112Cycles );        //ADC1,ADC通道,480个周期,提高采样时间可以提高精确度                            
  32.         ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;                    //从依次取ADC的值,分辨率为12位,
  33.   ADC_DMARequestAfterLastTransferCmd(ADC1,ENABLE);//源数据变化时开启DMA传输使能ADC传输
  34.   ADC_DMACmd(ADC1,ENABLE);                        //
  35.   ADC_Cmd(ADC1, ENABLE);                          //开启AD转换器       
  36. }                               
复制代码

,还望大神指正。新人只有这么多悬赏了。板子是探索者F4

最佳答案

查看完整内容[请看2#楼]

都说是新人了就多翻帖子http://www.openedv.com/forum.php?mod=viewthread&tid=282696&extra=
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2019-7-25 11:41:32 | 显示全部楼层
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165538
金钱
165538
注册时间
2010-12-1
在线时间
2117 小时
发表于 2019-7-26 03:06:12 | 显示全部楼层
帮顶
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-15 16:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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