[STM32F0] STM32F0 adc采集

[复制链接]
1277|1
 楼主| ofsummer 发表于 2016-4-24 10:38 | 显示全部楼层 |阅读模式
代码修改自库函数例程ADC_LowPower和IO_Toggle,下面是代码:
  1. #define BSRR_VAL        0x0300

  2. ADC_InitTypeDef          ADC_InitStructure;
  3. GPIO_InitTypeDef         GPIO_InitStructure;
  4. TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  5. TIM_OCInitTypeDef        TIM_OCInitStructure;

  6. void delay_ms(int i)
  7. {
  8.   int s;
  9.   while(i--)
  10. {
  11.   s=8000;
  12.   while(s--);
  13. }
  14. }

  15. int main(void)
  16. {
  17.   RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);
  18.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
  19.   RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

  20.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;
  21.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  22.   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  23.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  24.   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  25.   GPIO_Init(GPIOC, &GPIO_InitStructure);

  26.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 ;
  27.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
  28.   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
  29.   GPIO_Init(GPIOC, &GPIO_InitStructure);

  30.   /* TIM3 Configuration*/
  31.   TIM_DeInit(TIM3);
  32.   
  33.   TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
  34.   
  35.   TIM_OCStructInit(&TIM_OCInitStructure);
  36.    
  37.   /* Time base configuration */
  38.   TIM_TimeBaseStructure.TIM_Period = 0xFF;
  39.   TIM_TimeBaseStructure.TIM_Prescaler = 0x0;
  40.   TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;
  41.   TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  
  42.   TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
  43.   
  44.   /* TIM3 TRGO selection */
  45.   TIM_SelectOutputTrigger(TIM3, TIM_TRGOSource_Update);

  46.   ADC_DeInit(ADC1);
  47.   ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
  48.   ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
  49.   ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_Rising;   
  50.   ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T3_TRGO;
  51.   ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
  52.   ADC_InitStructure.ADC_ScanDirection = ADC_ScanDirection_Upward;
  53.   ADC_Init(ADC1, &ADC_InitStructure);
  54.   ADC_ChannelConfig(ADC1, ADC_Channel_11 , ADC_SampleTime_28_5Cycles);   
  55.   ADC_GetCalibrationFactor(ADC1);
  56.   ADC_WaitModeCmd(ADC1, ENABLE);
  57.   ADC_AutoPowerOffCmd(ADC1, ENABLE);
  58.   ADC_Cmd(ADC1, ENABLE);     
  59.   while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_ADEN));

  60. TIM_Cmd(TIM3, ENABLE);

  61.   ADC_StartOfConversion(ADC1);

  62.   while (1)
  63.   {
  64.     /* Get ADC1 converted data */
  65.     ADC1ConvertedValue = ADC_GetConversionValue(ADC1);
  66.    
  67.     /* Compute the voltage */
  68.     ADC1ConvertedVoltage = (ADC1ConvertedValue * 3300)/0xFFF;
  69.     /* Set PC8 and PC9 */
  70.     GPIOC->BSRR = BSRR_VAL;
  71.     delay_ms((int)(ADC1ConvertedVoltage/5));
  72.     /* Reset PC8 and PC9 */
  73.     GPIOC->BRR = BSRR_VAL;
  74.     delay_ms((int)(ADC1ConvertedVoltage/5));
  75.   }
  76. }



orangebanana 发表于 2016-4-24 20:40 | 显示全部楼层
这个用的是dma方式吧,没见到adc采集的那块
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

71

帖子

1

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