野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12840|回复: 4

请问怎么用定时器触发adc啊

[复制链接]
发表于 2017-4-2 19:55:58 | 显示全部楼层 |阅读模式
请各位帮我看看哪里有问题,我这是用例程改的
  1. static void ADCx_GPIO_Config(void)
  2. {
  3.         GPIO_InitTypeDef GPIO_InitStructure;
  4.        
  5.         // ′ò¿a ADC IO¶Ë¿úê±Öó
  6.         macADC_GPIO_APBxClock_FUN ( macADC_GPIO_CLK, ENABLE );
  7.        
  8.         // ÅäÖà ADC IO òy½ÅÄ£ê½
  9.         GPIO_InitStructure.GPIO_Pin = macADC_PIN;
  10.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
  11.        
  12.         // 3õê¼»ˉ ADC IO
  13.         GPIO_Init(macADC_PORT, &GPIO_InitStructure);                               
  14. }
复制代码
  1. static void ADCx_Mode_Config(void)
  2. {
  3.         ADC_InitTypeDef ADC_InitStructure;       

  4.         // ′ò¿aADCê±Öó
  5.         macADC_APBxClock_FUN ( macADC_CLK, ENABLE );
  6.        
  7.         // ADC Ä£ê½ÅäÖÃ
  8.         // Ö»ê1óÃò»¸öADC£¬êôóúμ¥Ä£ê½
  9.         ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
  10.        
  11.         // ½ûÖ1é¨Ãèģ꽣¬¶àí¨μà2Åòa£¬μ¥í¨μà2»Dèòa
  12.         ADC_InitStructure.ADC_ScanConvMode = DISABLE ;

  13.         // á¬Dø×a»»Ä£ê½
  14.         ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;

  15.         // óö¨ê±Æ÷¶tCC2′¥·¢
  16.         ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T2_CC2 ;

  17.         // ×a»»½á1ûóò¶ÔÆë
  18.         ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
  19.        
  20.         // ×a»»í¨μà1¸ö
  21.         ADC_InitStructure.ADC_NbrOfChannel = 1;       
  22.                
  23.         // 3õê¼»ˉADC
  24.         ADC_Init(macADCx, &ADC_InitStructure);
  25.        
  26.         // ÅäÖÃADCê±Öó£ÎaPCLK2μÄ8·ÖÆ죬¼′9MHz
  27.         RCC_ADCCLKConfig(RCC_PCLK2_Div8);
  28.        
  29.         // ÅäÖà ADC í¨μà×a»»Ë3DòÎa1£¬μúò»¸ö×a»»£¬2éÑùê±¼äÎa1¸öê±ÖóÖüÆú
  30.         ADC_RegularChannelConfig(macADCx, macADC_CHANNEL, 1, ADC_SampleTime_1Cycles5);
  31.        
  32.         // ADC ×a»»½áêø2úéúÖD¶Ï£¬ÔúÖD¶Ï·tÎñ3ìDòÖD¶áè¡×a»»Öμ
  33.         ADC_ITConfig(macADCx, ADC_IT_EOC, ENABLE);
  34.        
  35.         // ¿aÆôADC £¬2¢¿aê¼×a»»
  36.         ADC_Cmd(macADCx, ENABLE);
  37.        
  38.         // 3õê¼»ˉADC D£×¼¼Ä′æÆ÷  
  39.         ADC_ResetCalibration(macADCx);
  40.         // μè′yD£×¼¼Ä′æÆ÷3õê¼»ˉíê3é
  41.         while(ADC_GetResetCalibrationStatus(macADCx));
  42.        
  43.         // ADC¿aê¼D£×¼
  44.         ADC_StartCalibration(macADCx);
  45.         // μè′yD£×¼íê3é
  46.         while(ADC_GetCalibrationStatus(macADCx));
  47.        
  48.         // óö¨ê±Æ÷2′¥·¢
  49.         ADC_ExternalTrigConvCmd(macADCx, ENABLE);
  50. }[code]static void ADC_NVIC_Config(void)
  51. {
  52.   NVIC_InitTypeDef NVIC_InitStructure;

  53.   // ÅäÖÃÖD¶ÏóÅÏ輶
  54.   NVIC_InitStructure.NVIC_IRQChannel = ADC1_2_IRQn;
  55.   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  56.   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  57.   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  58.   NVIC_Init(&NVIC_InitStructure);
  59. }
  60. static void TIM2_Configuration(void)
  61. {
  62.        
  63.   TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;  
  64.         TIM_OCInitTypeDef TIM_OCInitStructure;   
  65.   RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);       
  66.        
  67.        
  68.         TIM_TimeBaseStructure.TIM_Period = 1000-1;
  69.         TIM_TimeBaseStructure.TIM_Prescaler = 71;
  70.         TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;  
  71.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  72.   TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);        
  73.         TIM_TimeBaseInit(TIM2, & TIM_TimeBaseStructure);  
  74.   
  75.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;//ÏÂÃæÏêϸËμÃ÷
  76.         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//TIM_OutputState_Disable;
  77.   TIM_OCInitStructure.TIM_Pulse = 500;  
  78.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;//èç1ûPWM1ÎaLow,PWM2òaÎaHigh
  79.         TIM_OC1Init(TIM2, & TIM_OCInitStructure);   
  80.    
  81.   TIM_CtrlPWMOutputs(TIM2, ENABLE);
  82.   TIM_Cmd(TIM2, DISABLE);
  83.        
  84.                   
  85. }


  86. /**
  87.   * @brief  ADC3õê¼»ˉ
  88.   * @param  ÎT
  89.   * @retval ÎT
  90.   */
  91. void ADCx_Init(void)
  92. {
  93.         ADCx_GPIO_Config();
  94.         ADCx_Mode_Config();
  95.         ADC_NVIC_Config();
  96.         TIM2_Configuration();       
  97. }  
复制代码
[/code]
回复

使用道具 举报

 楼主| 发表于 2017-4-2 19:58:03 | 显示全部楼层
之前例程软件触发是可以的,然后我按照网上的改了就是采集不到数据,这个例程是ADC-单通道(NO DMA)的,但是发送到上位机的电压值一直为0
回复 支持 反对

使用道具 举报

发表于 2017-4-5 09:06:07 | 显示全部楼层
adc触发源改成定时器触发,不是外部触发
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-5 16:56:02 | 显示全部楼层
flyleaf 发表于 2017-4-5 09:06
adc触发源改成定时器触发,不是外部触发

ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T2_CC2 ;这句话不是已经设置成了定时器触发了吗
回复 支持 反对

使用道具 举报

发表于 2017-4-13 21:41:18 | 显示全部楼层
本帖最后由 陈加勇 于 2017-4-13 21:53 编辑

adc的触发源是选择对了的,但是你没有写触发检测方式,其他ADC_InitTypeDef.ADC_ExternalTrigConvEdge  ,可以设置成上边缘触发,也可以设置成其他的。我先帮你测试一下哈,可能我没有说对。
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-23 15:48 , Processed in 0.041235 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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