打印
[STM32F4]

求教大神关于STM32F4多路ADC采集用DMA存取的问题

[复制链接]
2594|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
小金牛|  楼主 | 2015-8-6 11:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

这是我使用的代码,修改库例程的,一个模拟口的采集和存取可以了,如果是多个模拟口的采集和存取,我应该怎么处理?在线等
沙发
小金牛|  楼主 | 2015-8-6 11:14 | 只看该作者
本帖最后由 小金牛 于 2015-8-6 14:28 编辑

啊山东的点点滴滴的的的的的的的的的

使用特权

评论回复
板凳
小金牛|  楼主 | 2015-8-6 11:17 | 只看该作者
上一个错了我重发,为了好看我分模块发
主函数
int main(void)
{
        u16 i;
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//ÉèÖÃϵͳÖжÏÓÅÏȼ¶·Ö×é2
        delay_init(168);    //³õʼ»¯ÑÓʱº¯Êý
        uart_init(115200);        //³õʼ»¯´®¿Ú²¨ÌØÂÊΪ115200
delay_init(168);
                LED_Init();       
                 LCD_Init();
        POINT_COLOR=RED;
                LCD_ShowString(30,50,200,16,16,"Explorer STM32F4");       
        LCD_ShowString(30,70,200,16,16,"ADC TEST");       
        LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");
        LCD_ShowString(30,110,200,16,16,"2014/5/6");          
        POINT_COLOR=BLUE;//ÉèÖÃ×ÖÌåΪÀ¶É«
        LCD_ShowString(30,130,200,16,16,"ADC1_CH5_VAL:");             
        LCD_ShowString(30,150,200,16,16,"ADC1_CH5_VOL:0.000V");        //ÏÈÔڹ̶¨Î»ÖÃÏÔʾСÊýµã  
  /* ADC configuration */
  ADC_Config();
  /* Start ADC Software Conversion */
  ADC_SoftwareStartConv(ADCx);
  while (1)
  {
                for(i=0;i<50;i++)
                {
    uwADCxConvertedVoltage = uhADCxConvertedValue[i] *3.3/4096;
                LCD_ShowxNum(134,130,uhADCxConvertedValue[1],4,16,0);    //ÏÔʾADCC²ÉÑùºóµÄԭʼֵ
                LCD_ShowxNum(134,150,uwADCxConvertedVoltage,3,16,0);    //ÏÔʾµçѹֵµÄÕûÊý²¿·Ö£¬3.1111µÄ»°£¬ÕâÀï¾ÍÊÇÏÔʾ3
                        LCD_ShowxNum(134,170,uhADCxConvertedValue[0],4,16,0);    //ÏÔʾADCC²ÉÑùºóµÄԭʼֵ
                        LCD_ShowxNum(134,200,uhADCxConvertedValue[49],4,16,0);    //ÏÔʾADCC²ÉÑùºóµÄԭʼֵ
                        delay_ms(1000);
                }
                LED0=!LED0;
                delay_ms(1000);
               
  }
}

使用特权

评论回复
地板
小金牛|  楼主 | 2015-8-6 11:18 | 只看该作者
ADC的配置有IO口的也有DMA的
static void ADC_Config(void)
{
  ADC_InitTypeDef       ADC_InitStructure;
  ADC_CommonInitTypeDef ADC_CommonInitStructure;
  DMA_InitTypeDef       DMA_InitStructure;
  GPIO_InitTypeDef      GPIO_InitStructure;

  /* Enable ADCx, DMA and GPIO clocks ****************************************/
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2, ENABLE);
  RCC_AHB1PeriphClockCmd(ADCx_CHANNEL_GPIO_CLK, ENABLE);  
  RCC_APB2PeriphClockCmd(ADCx_CLK, ENABLE);
  

  /* DMA2 Stream0 channel_2 configuration **************************************/
  DMA_InitStructure.DMA_Channel = DMA_CHANNELx;  
  DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADCx_DR_ADDRESS;
  DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&uhADCxConvertedValue;
  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
  DMA_InitStructure.DMA_BufferSize = 50;
  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
  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_High;
  DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;         
  DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;
  DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
  DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
  DMA_Init(DMA_STREAMx, &DMA_InitStructure);
  DMA_Cmd(DMA_STREAMx, ENABLE);

  /* Configure ADC3 Channel7 pin as analog input ******************************/
  GPIO_InitStructure.GPIO_Pin = GPIO_PIN;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
  GPIO_Init(GPIO_PORT, &GPIO_InitStructure);

  /* ADC Common Init **********************************************************/
  ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;
  ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div2;
  ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;
  ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;
  ADC_CommonInit(&ADC_CommonInitStructure);

  /* ADC3 Init ****************************************************************/
  ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
  ADC_InitStructure.ADC_ScanConvMode = DISABLE;
  ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
  ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
  ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1;
  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
  ADC_InitStructure.ADC_NbrOfConversion = 1;
  ADC_Init(ADCx, &ADC_InitStructure);

  /* ADC3 regular channel7 configuration **************************************/
  ADC_RegularChannelConfig(ADCx, ADC_CHANNEL, 1, ADC_SampleTime_3Cycles);

/* Enable DMA request after last transfer (Single-ADC mode) */
  ADC_DMARequestAfterLastTransferCmd(ADCx, ENABLE);

  /* Enable ADC3 DMA */
  ADC_DMACmd(ADCx, ENABLE);

  /* Enable ADC3 */
  ADC_Cmd(ADCx, ENABLE);
}

使用特权

评论回复
5
小金牛|  楼主 | 2015-8-6 11:19 | 只看该作者
这是我的定义
  #define ADCx                     ADC3
  #define ADC_CHANNEL              ADC_Channel_7
  #define ADCx_CLK                 RCC_APB2Periph_ADC3
  #define ADCx_CHANNEL_GPIO_CLK    RCC_AHB1Periph_GPIOF
  #define GPIO_PIN                 GPIO_Pin_9
  #define GPIO_PORT                GPIOF
  #define DMA_CHANNELx             DMA_Channel_2
  #define DMA_STREAMx              DMA2_Stream0
  #define ADCx_DR_ADDRESS          ((uint32_t)0x4001224C)

使用特权

评论回复
6
小金牛|  楼主 | 2015-8-6 11:19 | 只看该作者
大神快到碗里来

使用特权

评论回复
7
小金牛|  楼主 | 2015-8-6 12:03 | 只看该作者
第一次发帖怎么没人能来啊

使用特权

评论回复
8
mmuuss586| | 2015-8-6 12:31 | 只看该作者

百度上找参考的例程好像有;
F1的;

使用特权

评论回复
9
songchenping| | 2015-8-6 13:03 | 只看该作者
直接用官方的参考例程就可以了。你一下放这么多代码,看起来和费时间的。而且在没有原理图的前提下

使用特权

评论回复
10
小金牛|  楼主 | 2015-8-6 19:44 | 只看该作者
songchenping 发表于 2015-8-6 13:03
直接用官方的参考例程就可以了。你一下放这么多代码,看起来和费时间的。而且在没有原理图的前提下 ...

那些都是ADC的基本操作而已,,,,,,

使用特权

评论回复
11
airwill| | 2015-8-6 22:24 | 只看该作者
这个问题, 就不要去找百度了. 官方的外设库例程里就有现成的参考.
库路径: Project\Peripheral_Examples\ADC3_DMA

使用特权

评论回复
12
可可球| | 2015-8-9 11:54 | 只看该作者
官方的外设库例程里就有现成的参考,官方的例程要比百度的可信度高

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

8

帖子

0

粉丝