[STM32F4] STM32F407ADC采样实验

[复制链接]
 楼主| cowboy2014 发表于 2015-9-26 07:32 | 显示全部楼层 |阅读模式
本帖最后由 cowboy2014 于 2015-9-26 07:34 编辑

最近公司又做了一款407的样板,正好需要用到407的ADC功能,需要用PC.2来检测RFID芯片的射频电源功率,首先看了下407的数据手册  
可以配置到ADC1/2/3任何一个控制器的信道12上面.我打算将PC.2映射到ADC3上面和使用DMA功能,又看了下DMA的请求映射表,ADC3使用的DMA2的流0信道2
1.jpg
编程思路:
首先将DMA和IO以及ADC的时钟使能,其次将相应的IO配置成输入模式,最后配置DMA和ADC
2.jpg
注意


 楼主| cowboy2014 发表于 2015-9-26 07:34 | 显示全部楼层
  1. /*定义ADC3的数据寄存器地址,DMA功能要用到外设的数据地址
  2. *ADC3的数据地址为外设基地址+偏移地址,基地址在RM0090 Reference
  3. *manual(参考手册)的地址映射表里,为0x40012200,ADC_DR
  4. *偏移地址为0x4C,故实际地址为0x40012200+0x4C = 0x4001224C */
  5. #define ADC3_DR_Address   ((uint32_t)0x4001224C)

  6. 代码详见:

  7. void Adc3_Init(void)

  8.         {

  9.                         /* Enable peripheral clocks ------------------------------------------------*/

  10.                 /* Enable DMA1 clock */

  11.                 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2 | RCC_AHB1Periph_GPIOC, ENABLE);

  12.                RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC3, ENABLE);

  13.                 GPIO_Configuration();

  14.                 DMA_Configuration();


  15.         }

  16. void DMA_Configuration(void)

  17. {

  18.         ADC_InitTypeDef ADC_InitStructure;

  19.   DMA_InitTypeDef DMA_InitStructure;

  20.         ADC_CommonInitTypeDef ADC_CommonInitStructure;

  21.   /* DMA2 Stream0 channel0 configuration **************************************/

  22.   DMA_InitStructure.DMA_Channel = DMA_Channel_2;  

  23.   DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADC3_DR_Address;

  24.   DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&ADCConvertedValue;

  25.   DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;

  26.   DMA_InitStructure.DMA_BufferSize = 1;

  27.   DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;

  28.   DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;

  29.   DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;

  30.   DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;

  31.   DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;

  32.   DMA_InitStructure.DMA_Priority = DMA_Priority_High;

  33.   DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;         

  34.   DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;

  35.   DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;

  36.   DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;

  37.   DMA_Init(DMA2_Stream0, &DMA_InitStructure);

  38.   DMA_Cmd(DMA2_Stream0, ENABLE);

  39.   /* ADC Common Init **********************************************************/

  40.   ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;

  41.   ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div2;

  42.   ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;

  43.   ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;

  44.   ADC_CommonInit(&ADC_CommonInitStructure);

  45.   /* ADC3 Init ****************************************************************/

  46.   ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;

  47.   ADC_InitStructure.ADC_ScanConvMode = DISABLE;

  48.   ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;

  49.   ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;

  50.   ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;

  51.   ADC_InitStructure.ADC_NbrOfConversion = 1;

  52.   ADC_Init(ADC3, &ADC_InitStructure);

  53.   /* ADC3 regular channel12 configuration *************************************/

  54.   ADC_RegularChannelConfig(ADC3, ADC_Channel_12, 1, ADC_SampleTime_3Cycles);

  55. /* Enable DMA request after last transfer (Single-ADC mode) */

  56.   ADC_DMARequestAfterLastTransferCmd(ADC3, ENABLE);

  57.   /* Enable ADC3 DMA */

  58.   ADC_DMACmd(ADC3, ENABLE);

  59.   /* Enable ADC3 */

  60.   ADC_Cmd(ADC3, ENABLE);

  61.         /* Start ADC3 Software Conversion */

  62.   ADC_SoftwareStartConv(ADC3);   //如果不是外部触发则必须软件开始转换

  63. }




  64. /**

  65.   * [url=home.php?mod=space&uid=247401]@brief[/url]  Configures the different GPIO ports.

  66.   * @param  None

  67.   * @retval None

  68.   */

  69. void GPIO_Configuration(void)

  70. {

  71.   GPIO_InitTypeDef GPIO_InitStructure;

  72.   /* Configure PC.2 (ADC Channel2) PC.1 (ADC Channel1) as analog input -------------------------*/

  73.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_2;

  74.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;

  75.   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;

  76.   GPIO_Init(GPIOC, &GPIO_InitStructure);

  77. }
 楼主| cowboy2014 发表于 2015-9-26 07:35 | 显示全部楼层
运行效果图片:
3.jpg
boy1990 发表于 2015-9-26 10:02 | 显示全部楼层
哈哈 看的不懂,楼主,这个主要是用来干嘛的呢?,,实现了哪些功能??
mmuuss586 发表于 2015-9-26 10:50 | 显示全部楼层

谢谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

78

主题

821

帖子

5

粉丝
快速回复 在线客服 返回列表 返回顶部