• STM32F4xx -- 单通道ADC+DMA功能实现


    1、测试硬件:

      STM32F405
      所用IO:PA3,PC2,PC3
    2、软件实现:

      使能DMA2,初始化IO口,设置ADC.

     1 volatile uint16_t ADC_DualConvertedValueTab[3];    //必须使用volatile关键字,每次调用时重新取值
     2 
     3 void DMA2_Configuration() {
     4     DMA_InitTypeDef DMA_InitStructure;
     5 
     6     DMA_InitStructure.DMA_Channel = DMA_Channel_0;
     7     DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&(ADC1->DR);
     8     DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&ADC_DualConvertedValueTab;
     9     DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
    10     DMA_InitStructure.DMA_BufferSize = 3;    //与通道数设置一致
    11     DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
    12     DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
    13     DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
    14     DMA_InitStructure.DMA_MemoryDataSize = DMA_PeripheralDataSize_HalfWord;
    15     DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
    16     DMA_InitStructure.DMA_Priority = DMA_Priority_High;
    17     DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;            //DMA_FIFOMode_Disable        DMA_FIFOMode_Enable
    18     DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;
    19     DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
    20     DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
    21     DMA_Init(DMA2_Stream0, &DMA_InitStructure);
    22     DMA_Cmd(DMA2_Stream0, ENABLE);
    23 }
    24 
    25 void ADC1_Config()
    26 {
    27   ADC_InitTypeDef ADC_InitStructure;
    28 
    29   ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
    30   ADC_InitStructure.ADC_ScanConvMode = ENABLE;
    31   ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
    32   ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
    33   ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;    //ADC_DataAlign_Right  ADC_DataAlign_Left  设置数据右对齐
    34   ADC_InitStructure.ADC_NbrOfConversion = 3;
    35   ADC_Init(ADC1, &ADC_InitStructure);
    36 
    37     //设置通道顺序,里面的设置数与ADC_InitStructure.ADC_NbrOfConversion = 3;对应
    38   ADC_RegularChannelConfig(ADC1, ADC_Channel_3, 1, ADC_SampleTime_112Cycles);
    39   ADC_RegularChannelConfig(ADC1, ADC_Channel_12, 2, ADC_SampleTime_112Cycles);
    40   ADC_RegularChannelConfig(ADC1, ADC_Channel_13, 3, ADC_SampleTime_112Cycles);
    41 }
    42 
    43 void Adc_Configuration()
    44 {
    45     DMA2_Configuration();
    46     ADC_CommonInitTypeDef ADC_CommonInitStructure;
    47     GPIO_InitTypeDef GPIO_InitStructure;
    48 
    49     GPIO_StructInit(&GPIO_InitStructure);
    50     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
    51     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
    52     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
    53     GPIO_Init(GPIOA, &GPIO_InitStructure);
    54 
    55     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3;
    56     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
    57     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
    58     GPIO_Init(GPIOC, &GPIO_InitStructure);
    59 
    60     ADC1_Config();
    61 
    62     ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;
    63     ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div2;
    64     ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;        //ADC_DMAAccessMode_Disabled    ADC_DMAAccessMode_1
    65     ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_20Cycles;
    66     ADC_CommonInit(&ADC_CommonInitStructure);
    67 
    68     ADC_DMARequestAfterLastTransferCmd(ADC1,ENABLE);    //单通道使用
    69 
    70     ADC_Cmd(ADC1, ENABLE);
    71 
    72     ADC_DMACmd(ADC1, ENABLE);
    73 
    74     ADC_SoftwareStartConv(ADC1);
    75 }
  • 相关阅读:
    【BZOJ】1626: [Usaco2007 Dec]Building Roads 修建道路(kruskal)
    【BZOJ】1669: [Usaco2006 Oct]Hungry Cows饥饿的奶牛(lis)
    【BZOJ】1666: [Usaco2006 Oct]Another Cow Number Game 奶牛的数字游戏(刷水严重)
    【BZOJ】1699: [Usaco2007 Jan]Balanced Lineup排队(rmq/树状数组)
    【BZOJ】1625: [Usaco2007 Dec]宝石手镯(01背包)
    【BZOJ】1617: [Usaco2008 Mar]River Crossing渡河问题(dp)
    【BZOJ】1618: [Usaco2008 Nov]Buying Hay 购买干草(dp)
    【BZOJ】1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛(dp/-bfs)
    【BZOJ】1613: [Usaco2007 Jan]Running贝茜的晨练计划(dp)
    【BZOJ】1612: [Usaco2008 Jan]Cow Contest奶牛的比赛(floyd/dfs)
  • 原文地址:https://www.cnblogs.com/longxi/p/10607781.html
Copyright © 2020-2023  润新知