• ADC采样间隔问题+TRGO作为ADC的触发源头


    为了控制采样时间,可以使用一个定时器的TRGO(定时器里每次发生更新事件时会有这个信号产生)作为定时器的外部触发。

    从定时器框图可以看出,TRGO为TIMx的一个输出.不过这个输出是内部使用的。

    void myADC_Init() 
     { 
                     ADC_InitTypeDef ADC_InitStruct; 
                     GPIO_InitTypeDef GPIO_InitStruct; 
                     RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 ,ENABLE); 
                     RCC_ADCCLKConfig(RCC_PCLK2_Div6); 
      
                    //ADC1_Init 
                     GPIO_InitStruct.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_0; 
                     GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AIN; 
                     GPIO_Init(GPIOA,&GPIO_InitStruct); 
                      
                    ADC_DeInit(ADC1); 
                     ADC_InitStruct.ADC_Mode = ADC_Mode_Independent; 
                     ADC_InitStruct.ADC_NbrOfChannel = 1; 
                     ADC_InitStruct.ADC_ContinuousConvMode = DISABLE; 
                     ADC_InitStruct.ADC_ScanConvMode = DISABLE; 
                     ADC_InitStruct.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T3_TRGO; 
                     ADC_InitStruct.ADC_DataAlign =ADC_DataAlign_Right; 
                     ADC_Init(ADC1,&ADC_InitStruct); 
              
                    ADC_ExternalTrigConvCmd(ADC1,ENABLE); 
                     //ENABLE ADC1 
                     ADC_RegularChannelConfig(ADC1,0,1,ADC_SampleTime_1Cycles5); 
              
                    ADC_DMACmd(ADC1,ENABLE); 
                     ADC_Cmd(ADC1,ENABLE); 
                      
                    ADC_ResetCalibration(ADC1); 
                     while(ADC_GetResetCalibrationStatus(ADC1)); 
                     ADC_StartCalibration(ADC1); 
                     while(ADC_GetCalibrationStatus(ADC1)); 
              

      
    void TIM3_Init() 
     { 
                     TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct; 
                     NVIC_InitTypeDef NVIC_InitStruct; 
              
                    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); 
                      
                    TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1; 
                     TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up; 
                     TIM_TimeBaseInitStruct.TIM_Period = 72000000/SampleRate; 
                     TIM_TimeBaseInitStruct.TIM_Prescaler = 0; 
                     TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStruct); 
                      
                    TIM_SelectOutputTrigger(TIM3,TIM_TRGOSource_Update); //选择TRGO触发源为计时器更新时间 
              
                    TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); 
                     NVIC_InitStruct.NVIC_IRQChannel = TIM3_IRQn; 
                     NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0; 
                     NVIC_InitStruct.NVIC_IRQChannelSubPriority = 3; 
                     NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; 
                     NVIC_Init(&NVIC_InitStruct); 
                     TIM_Cmd(TIM3,ENABLE); 
              
    }

  • 相关阅读:
    站内信DB设计实现
    redis.conf配置详细解析
    MySQL中的锁(表锁、行锁)
    App开放接口api安全性—Token签名sign的设计与实现
    Linux下恢复误删除的文件
    系统资源监控工具
    MySQL性能监控工具-MONyog
    jstack Dump 日志文件中的线程状态
    数据库性能测试方案示例
    [转载]ant和maven的区别
  • 原文地址:https://www.cnblogs.com/dadidelearning/p/10059822.html
Copyright © 2020-2023  润新知