OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 1732|回复: 3

关于在中断中ADC采样问题

[复制链接]

8

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
129
金钱
129
注册时间
2018-3-27
在线时间
28 小时
发表于 2018-7-25 17:21:21 | 显示全部楼层 |阅读模式
1金钱
把ADC采样放在了time.c的中断中,但是我改变时钟的频率的时候  发现采样频率并没有发生改变,有大神可以帮我看一下是哪里出问题了吗?
ADC函数:
**
  ******************************************************************************
  * @file    bsp_xxx.c
  * @Author  fire
  * @version V1.0
  * @date    2013-xx-xx
  * @brief   adc1 ó|óÃbsp / DMA Ä£ê½
  ******************************************************************************
  * @attention
  *
  * êμÑ鯽ì¨:ò°»e iSO STM32 ¿a·¢°å
  * ÂÛì3    :http://www.chuxue123.com
  * ìÔ±|    :http://firestm32.taobao.com
  *
  ******************************************************************************
  */

#include "adc.h"

#define ADC1_DR_Address    ((u32)0x40012400+0x4c)

__IO uint16_t ADC_ConvertedValue;
//__IO u16 ADC_ConvertedValueLocal;

/**
  * @brief  ê1ÄüADC1oíDMA1μÄê±Öó£¬3õê¼»ˉPC.01
  * @param  ÎT
  * @retval ÎT
  */
static void ADC1_GPIO_Config(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
       
        /* Enable DMA clock */
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
       
        /* Enable ADC1 and GPIOC clock */
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC, ENABLE);
       
        /* Configure PC.01  as analog input */
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;  //éèÖÃÎaÄ£ÄaêäèëÄ£꽿éóÃóúÄ£ÄaμçÑ1μÄêäèë
        GPIO_Init(GPIOA, &GPIO_InitStructure);                                // PB0,êäèëê±2»óÃéèÖÃËùÂê
       
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;  //éèÖÃÎaÄ£ÄaêäèëÄ£꽿éóÃóúÄ£ÄaμçÑ1μÄêäèë
        GPIO_Init(GPIOA, &GPIO_InitStructure);                                // PB1,êäèëê±2»óÃéèÖÃËùÂê
       
}

/**
  * @brief  ÅäÖÃADC1μÄ1¤×÷Ä£ê½ÎaMDAÄ£ê½
  * @param  ÎT
  * @retval ÎT
  */
static void ADC1_Mode_Config(void)
{
        DMA_InitTypeDef DMA_InitStructure;
        ADC_InitTypeDef ADC_InitStructure;
       
        /* DMA channel1 configuration */
        DMA_DeInit(DMA1_Channel1);
       
        DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;                                 //ADCμØÖ·
        DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADC_ConvertedValue;        //Äú′æμØÖ·
        DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
        DMA_InitStructure.DMA_BufferSize = 2;  //í¨μàμÄ′óD¡éèÖÃÎa2
        DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;        //íaéèμØÖ·1춨
        DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;                                  //Äú′æμØÖ·μYÔö
        DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;        //°ë×Ö
        DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
        DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;                                                                                //Ñ-»·′«êä
       
        DMA_InitStructure.DMA_Priority = DMA_Priority_High;
        DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
        DMA_Init(DMA1_Channel1, &DMA_InitStructure);
       
        /* Enable DMA channel1 */
        DMA_Cmd(DMA1_Channel1, ENABLE);
       
        /* ADC1 configuration */       
        ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;                        //¶àá¢ADCÄ£ê½
        //Õaàïê1óÃáËADC1μÄí¨μà9oíí¨μà8£¬ËùòÔê1Äüé¨ÃèÄ£ê½
        ADC_InitStructure.ADC_ScanConvMode = ENABLE ;                                          //½ûÖ1é¨Ãèģ꽣¬é¨ÃèÄ£ê½óÃóú¶àí¨μà2é¼ˉ
       
        ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;                        //¿aÆôá¬Dø×a»»Ä£ê½£¬¼′2»í£μؽøDDADC×a»»
        ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;        //2»ê1óÃía2¿′¥·¢×a»»
        ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;         //2é¼ˉêy¾Yóò¶ÔÆë
        ADC_InitStructure.ADC_NbrOfChannel = 2;                                                                         //òa×a»»μÄí¨μàêyÄ¿2 ·Ö±eêÇí¨μà11oíí¨μà8
        ADC_Init(ADC1, &ADC_InitStructure);
       
        /*ÅäÖÃADCê±Öó£¬ÎaPCLK2μÄ8·ÖÆμ£¬¼′9MHz*/
        RCC_ADCCLKConfig(RCC_PCLK2_Div6);
        /*ÅäÖÃADC1μÄí¨μà11Îa55.        5¸ö2éÑùÖüÆú£¬DòáDÎa1 */
       
        //ÕaàïÎòÃÇÅäÖÃμÄêÇADC1μÄí¨μà8oíí¨μà9
        //í¨μà8êÇÎòÃÇ×Ô¼oo¸½óμÄ¿a·¢°åμÄμçÑ1Ö죬ò2êÇ×îÏè½øDDAD×a»»μÄí¨μà
        //í¨μà9êÇ¿a·¢°åéÏμÄμçÑ1Ö죬ò2êÇμú¶t′Î2aμ½μÄμçÑ1Öμ
        ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_55Cycles5);
        ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 2, ADC_SampleTime_55Cycles5);
       
        /* Enable ADC1 DMA */
        ADC_DMACmd(ADC1, ENABLE);
       
        /* Enable ADC1 */
        ADC_Cmd(ADC1, ENABLE);
       
        /*¸′λD£×¼¼Ä′æÆ÷ */   
        ADC_ResetCalibration(ADC1);
        /*μè′yD£×¼¼Ä′æÆ÷¸′λíê3é */
        while(ADC_GetResetCalibrationStatus(ADC1));
       
        /* ADCD£×¼ */
        ADC_StartCalibration(ADC1);
        /* μè′yD£×¼íê3é*/
        while(ADC_GetCalibrationStatus(ADC1));
       
        /* óéóúûóD2éóÃía2¿′¥·¢£¬ËùòÔê1óÃèí¼t′¥·¢ADC×a»» */
        ADC_SoftwareStartConvCmd(ADC1, ENABLE);
}

/**
  * @brief  ADC13õê¼»ˉ
  * @param  ÎT
  * @retval ÎT
  */
void ADC1_Init(void)
{
        ADC1_GPIO_Config();
        ADC1_Mode_Config();
}
/*********************************************END OF FILE**********************/


时钟函数:
#include "timer.h"
#include "led.h"
#include "usart.h"
#define M 2  //2é¼ˉí¨μàμÄ×î′óêy
int flag=0;
int vol=0 ;
int volp=0;
extern __IO uint16_t ADC_ConvertedValue[M];
//////////////////////////////////////////////////////////////////////////////////         
//±¾3ìDòÖ»1©Ñ§Ï°ê1óã¬Î′¾-×÷ÕßDí¿é£¬2»μÃóÃóúÆäËüèÎoÎóÃí¾
//ALIENTE¾«ó¢STM32¿a·¢°å
//¶¨ê±Æ÷ Çy¶ˉ′úÂë          
//ÕyμãÔ-×ó@ALIENTEK
//¼¼êõÂÛì3:www.openedv.com
//DT¸ÄèÕÆú:2012/9/4
//°æ±¾£oV1.1
//°æè¨ËùóD£¬μá°æ±Ø¾¿¡£
//Copyright(C) 1ãÖYêDDÇòíμç×ó¿Æ¼¼óDÏT1«Ë¾ 2009-2019
//All rights reserved                                                                          
//********************************************************************************
//V1.1 20120904
//1,Ôö¼óTIM3_PWM_Initoˉêy¡£
//2,Ôö¼óLED0_PWM_VALo궨ò壬¿ØÖÆTIM3_CH2Âö¿í                                                                          
//////////////////////////////////////////////////////////////////////////////////  
             
//í¨óö¨ê±Æ÷3ÖD¶Ï3õê¼»ˉ
//Õaàïê±ÖóÑ¡ÔñÎaAPB1μÄ2±¶£¬¶øAPB1Îa36M
//arr£o×Ô¶ˉ֨װÖμ¡£
//psc£oê±ÖóÔ¤·ÖÆμêy
//Õaàïê1óÃμÄêǶ¨ê±Æ÷3!
void TIM3_Int_Init(u16 arr,u16 psc)
{
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        NVIC_InitTypeDef NVIC_InitStructure;

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //ê±Öóê1Äü

        TIM_TimeBaseStructure.TIM_Period = arr; //éèÖÃÔúÏÂò»¸ö¸üDÂê¼t×°èë»î¶ˉμÄ×Ô¶ˉÖØ×°ÔØ¼Ä′æÆ÷ÖüÆúμÄÖμ         ¼Æêyμ½5000Îa500ms
        TIM_TimeBaseStructure.TIM_Prescaler =psc; //éèÖÃóÃà′×÷ÎaTIMxê±ÖóÆμÂê3yêyμÄÔ¤·ÖÆμÖμ  10KhzμļÆêyÆμÂê  
        TIM_TimeBaseStructure.TIM_ClockDivision = 0; //éèÖÃê±Öó·Ö¸î:TDTS = Tck_tim
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIMÏòéϼÆêyÄ£ê½
        TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //¸ù¾YTIM_TimeBaseInitStructÖDÖ¸¶¨μÄ2Îêy3õê¼»ˉTIMxμÄê±¼ä»ùêyμ¥λ

        TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //ê1ÄüÖ¸¶¨μÄTIM3ÖD¶Ï,ÔêDí¸üDÂÖD¶Ï

        NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;  //TIM3ÖD¶Ï
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  //ÏèÕ¼óÅÏè¼¶0¼¶
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  //′óóÅÏè¼¶3¼¶
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQí¨μà±»ê1Äü
        NVIC_Init(&NVIC_InitStructure);  //¸ù¾YNVIC_InitStructÖDÖ¸¶¨μÄ2Îêy3õê¼»ˉíaéèNVIC¼Ä′æÆ÷

        TIM_Cmd(TIM3, ENABLE);  //ê1ÄüTIMxíaéè
                                                         
}
//¶¨ê±Æ÷3ÖD¶Ï·tÎñ3ìDò
void TIM3_IRQHandler(void)   //TIM3ÖD¶Ï
{
        if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //¼ì2éÖ¸¶¨μÄTIMÖD¶Ï·¢éúóë·ñ:TIM ÖD¶ÏÔ′
                {
                  //Çå3yTIMxμÄÖD¶Ï′y′|àíλ:TIM ÖD¶ÏÔ′
               
               
                TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );
                        //LED0=!LED0;
                        vol=ADC_ConvertedValue[0];       
                        volp=ADC_ConvertedValue[1];
                        flag=1;
                }               
                       
                       
                 //DAC_SetChannel1Data(DAC_Align_12b_R, dacval);
                //adcx=Get_Adc_Average(ADC_Channel_1,10);
                //vol=adcx;
         // printf("%6d\n",vol);
       
}



主函数:
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
//#include "lcd.h"
#include "usart.h"                  
//#include "dac.h"
#include "adc.h"
#include "timer.h"
#include "usmart.h"
#include "bsp_AdvanceTim.h"
#define M 2  //2é¼ˉí¨μàμÄ×î′óêy
//int vol;
//void Dac1_Set_Vol(u16 vol);
extern __IO uint16_t ADC_ConvertedValue[M];
long int xindian1[4],xindian2[4];//′æ·ÅμÃμ½μÄμçÑ1
int adcx0=0, adcx1=0, adcx2=0,adcx3=0;
extern int flag;
extern int flag1;
int vol1=0;
extern int vol;
extern int volp;
int dacval=0;
int dacval1=0;
int k=0,n=1,i=0;
int adccount=0;
int adccount1=0;
int adccount2=0;
int max=0,min=0,mid=0;
/************************************************
ALIENTEK¾«ó¢STM32¿a·¢°åêμÑé20
DAC êμÑé      
¼¼êõÖ§3Ö£owww.openedv.com
ìÔ±|μêÆì£ohttp://eboard.taobao.com
1Ø×¢Î¢DÅ1«Öúƽì¨Î¢DÅoÅ£o"ÕyμãÔ-×ó"£¬Ãa·Ñ»ñè¡STM32×êáÏ¡£
1ãÖYêDDÇòíμç×ó¿Æ¼¼óDÏT1«Ë¾  
×÷ÕߣoÕyμãÔ-×ó @ALIENTEK
************************************************/



int main(void)
{         
        delay_init();                     //Ñóê±oˉêy3õê¼»ˉ          
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//éèÖÃÖD¶ÏóÅÏè¼¶·Ö×éÎa×é2£o2λÇàÕ¼óÅÏè¼¶£¬2λÏìó|óÅÏè¼¶
        uart_init(115200);                 //′®¿ú3õê¼»ˉÎa115200
        //KEY_Init();                          //3õê¼»ˉ°′¼ü3ìDò
        LED_Init();                             //LED¶Ë¿ú3õê¼»ˉ
        //LCD_Init();                                  //LCD3õê¼»ˉ
  ADC1_Init();                          //ADC3õê¼»ˉ
//        Dac1_Init();                                //DAC3õê¼»ˉ
        ADVANCE_TIM_Init();
        TIM3_Int_Init(4,71);//10KhzμļÆêyÆμÂ꣬¼Æêyμ½5000Îa500ms  
         //TIM3_Int_Init(4999,7199);
//TIM2_PWM_Init(4999,7199);
                         
        while(1)
        {
               
                if(flag==1)
                {
                       
                //DisplayCurve1(volp,vol);
                        if(adccount<200)
                        {
                        dacval +=vol;
                        dacval1 +=volp;       
                        adccount++;
                        }
                        else
                        {
                        //dacval=dacval/200;
                          dacval1=dacval1/200;
                                dacval=dacval/200;
                                DisplayCurve1(dacval1,dacval);
                                 adccount=0;
                                dacval=0;       
                         dacval1=0;
                       
                        }
                        flag=0;[mw_shl_code=c,true]/**
  ******************************************************************************
  * @file    bsp_xxx.c
  * @author  fire
  * @version V1.0
  * @date    2013-xx-xx
  * @brief   adc1 ó|ó&#195;bsp / DMA &#196;£ê&#189;
  ******************************************************************************
  * @attention
  *
  * êμ&#209;é&#198;&#189;ì¨:ò°&#187;e iSO STM32 &#191;a·¢°&#229;
  * &#194;&#219;ì3    :http://www.chuxue123.com
  * ì&#212;±|    :http://firestm32.taobao.com
  *
  ******************************************************************************
  */
  
#include "adc.h"

#define ADC1_DR_Address    ((u32)0x40012400+0x4c)

__IO uint16_t ADC_ConvertedValue;
//__IO u16 ADC_ConvertedValueLocal;

/**
  * @brief  ê1&#196;üADC1oíDMA1μ&#196;ê±&#214;ó£&#172;3&#245;ê&#188;&#187;ˉPC.01
  * @param  &#206;T
  * @retval &#206;T
  */
static void ADC1_GPIO_Config(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
       
        /* Enable DMA clock */
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
       
        /* Enable ADC1 and GPIOC clock */
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC, ENABLE);
       
        /* Configure PC.01  as analog input */
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;  //éè&#214;&#195;&#206;a&#196;£&#196;aê&#228;è&#235;&#196;£ê&#189;&#191;éó&#195;óú&#196;£&#196;aμ&#231;&#209;1μ&#196;ê&#228;è&#235;
        GPIO_Init(GPIOA, &GPIO_InitStructure);                                // PB0,ê&#228;è&#235;ê±2&#187;ó&#195;éè&#214;&#195;&#203;ù&#194;ê
       
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;  //éè&#214;&#195;&#206;a&#196;£&#196;aê&#228;è&#235;&#196;£ê&#189;&#191;éó&#195;óú&#196;£&#196;aμ&#231;&#209;1μ&#196;ê&#228;è&#235;
        GPIO_Init(GPIOA, &GPIO_InitStructure);                                // PB1,ê&#228;è&#235;ê±2&#187;ó&#195;éè&#214;&#195;&#203;ù&#194;ê
       
}

/**
  * @brief  &#197;&#228;&#214;&#195;ADC1μ&#196;1¤×÷&#196;£ê&#189;&#206;aMDA&#196;£ê&#189;
  * @param  &#206;T
  * @retval &#206;T
  */
static void ADC1_Mode_Config(void)
{
        DMA_InitTypeDef DMA_InitStructure;
        ADC_InitTypeDef ADC_InitStructure;
       
        /* DMA channel1 configuration */
        DMA_DeInit(DMA1_Channel1);
       
        DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;                                 //ADCμ&#216;&#214;·
        DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADC_ConvertedValue;        //&#196;ú′&#230;μ&#216;&#214;·
        DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
        DMA_InitStructure.DMA_BufferSize = 2;  //í¨μàμ&#196;′óD&#161;éè&#214;&#195;&#206;a2
        DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;        //íaéèμ&#216;&#214;·1ì&#182;¨
        DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;                                  //&#196;ú′&#230;μ&#216;&#214;·μY&#212;&#246;
        DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;        //°&#235;×&#214;
        DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
        DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;                                                                                //&#209;-&#187;·′&#171;ê&#228;
       
        DMA_InitStructure.DMA_Priority = DMA_Priority_High;
        DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
        DMA_Init(DMA1_Channel1, &DMA_InitStructure);
       
        /* Enable DMA channel1 */
        DMA_Cmd(DMA1_Channel1, ENABLE);
       
        /* ADC1 configuration */       
        ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;                        //&#182;àá¢ADC&#196;£ê&#189;
        //&#213;aà&#239;ê1ó&#195;á&#203;ADC1μ&#196;í¨μà9oíí¨μà8£&#172;&#203;ùò&#212;ê1&#196;üé¨&#195;è&#196;£ê&#189;
        ADC_InitStructure.ADC_ScanConvMode = ENABLE ;                                          //&#189;&#251;&#214;1é¨&#195;è&#196;£ê&#189;£&#172;é¨&#195;è&#196;£ê&#189;ó&#195;óú&#182;àí¨μà2é&#188;ˉ
       
        ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;                        //&#191;a&#198;&#244;á&#172;D&#248;×a&#187;&#187;&#196;£ê&#189;£&#172;&#188;′2&#187;í£μ&#216;&#189;&#248;DDADC×a&#187;&#187;
        ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;        //2&#187;ê1ó&#195;ía2&#191;′¥·¢×a&#187;&#187;
        ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;         //2é&#188;ˉêy&#190;Yóò&#182;&#212;&#198;&#235;
        ADC_InitStructure.ADC_NbrOfChannel = 2;                                                                         //òa×a&#187;&#187;μ&#196;í¨μàêy&#196;&#191;2 ·&#214;±eê&#199;í¨μà11oíí¨μà8
        ADC_Init(ADC1, &ADC_InitStructure);
       
        /*&#197;&#228;&#214;&#195;ADCê±&#214;ó£&#172;&#206;aPCLK2μ&#196;8·&#214;&#198;μ£&#172;&#188;′9MHz*/
        RCC_ADCCLKConfig(RCC_PCLK2_Div6);
        /*&#197;&#228;&#214;&#195;ADC1μ&#196;í¨μà11&#206;a55.        5&#184;&#246;2é&#209;ù&#214;ü&#198;ú£&#172;DòáD&#206;a1 */
       
        //&#213;aà&#239;&#206;ò&#195;&#199;&#197;&#228;&#214;&#195;μ&#196;ê&#199;ADC1μ&#196;í¨μà8oíí¨μà9
        //í¨μà8ê&#199;&#206;ò&#195;&#199;×&#212;&#188;oo&#184;&#189;óμ&#196;&#191;a·¢°&#229;μ&#196;μ&#231;&#209;1&#214;μ£&#172;ò2ê&#199;×&#238;&#207;è&#189;&#248;DDAD×a&#187;&#187;μ&#196;í¨μà
        //í¨μà9ê&#199;&#191;a·¢°&#229;é&#207;μ&#196;μ&#231;&#209;1&#214;μ£&#172;ò2ê&#199;μú&#182;t′&#206;2aμ&#189;μ&#196;μ&#231;&#209;1&#214;μ
        ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_55Cycles5);
        ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 2, ADC_SampleTime_55Cycles5);
       
        /* Enable ADC1 DMA */
        ADC_DMACmd(ADC1, ENABLE);
       
        /* Enable ADC1 */
        ADC_Cmd(ADC1, ENABLE);
       
        /*&#184;′&#206;&#187;D£×&#188;&#188;&#196;′&#230;&#198;÷ */   
        ADC_ResetCalibration(ADC1);
        /*μè′yD£×&#188;&#188;&#196;′&#230;&#198;÷&#184;′&#206;&#187;íê3é */
        while(ADC_GetResetCalibrationStatus(ADC1));
       
        /* ADCD£×&#188; */
        ADC_StartCalibration(ADC1);
        /* μè′yD£×&#188;íê3é*/
        while(ADC_GetCalibrationStatus(ADC1));
       
        /* óéóú&#195;&#187;óD2éó&#195;ía2&#191;′¥·¢£&#172;&#203;ùò&#212;ê1ó&#195;èí&#188;t′¥·¢ADC×a&#187;&#187; */
        ADC_SoftwareStartConvCmd(ADC1, ENABLE);
}

/**
  * @brief  ADC13&#245;ê&#188;&#187;ˉ
  * @param  &#206;T
  * @retval &#206;T
  */
void ADC1_Init(void)
{
        ADC1_GPIO_Config();
        ADC1_Mode_Config();
}
/*********************************************END OF FILE**********************/







#include "timer.h"
#include "led.h"
#include "usart.h"
#define M 2  //2é&#188;ˉí¨μàμ&#196;×&#238;′óêy
int flag=0;
int vol=0 ;
int volp=0;
extern __IO uint16_t ADC_ConvertedValue[M];
//////////////////////////////////////////////////////////////////////////////////         
//±&#190;3ìDò&#214;&#187;1&#169;&#209;§&#207;°ê1ó&#195;£&#172;&#206;′&#190;-×÷&#213;&#223;Dí&#191;é£&#172;2&#187;μ&#195;ó&#195;óú&#198;&#228;&#203;üè&#206;o&#206;ó&#195;í&#190;
//ALIENTE&#190;&#171;ó¢STM32&#191;a·¢°&#229;
//&#182;¨ê±&#198;÷ &#199;y&#182;ˉ′ú&#194;&#235;          
//&#213;yμ&#227;&#212;-×ó@ALIENTEK
//&#188;&#188;ê&#245;&#194;&#219;ì3:www.openedv.com
//DT&#184;&#196;è&#213;&#198;ú:2012/9/4
//°&#230;±&#190;£oV1.1
//°&#230;è¨&#203;ùóD£&#172;μá°&#230;±&#216;&#190;&#191;&#161;£
//Copyright(C) 1&#227;&#214;YêDD&#199;òíμ&#231;×ó&#191;&#198;&#188;&#188;óD&#207;T1&#171;&#203;&#190; 2009-2019
//All rights reserved                                                                          
//********************************************************************************
//V1.1 20120904
//1,&#212;&#246;&#188;óTIM3_PWM_Initoˉêy&#161;£
//2,&#212;&#246;&#188;óLED0_PWM_VALoê&#182;¨ò&#229;£&#172;&#191;&#216;&#214;&#198;TIM3_CH2&#194;&#246;&#191;í                                                                          
//////////////////////////////////////////////////////////////////////////////////  
             
//í¨ó&#195;&#182;¨ê±&#198;÷3&#214;D&#182;&#207;3&#245;ê&#188;&#187;ˉ
//&#213;aà&#239;ê±&#214;ó&#209;&#161;&#212;&#241;&#206;aAPB1μ&#196;2±&#182;£&#172;&#182;&#248;APB1&#206;a36M
//arr£o×&#212;&#182;ˉ&#214;&#216;×°&#214;μ&#161;£
//psc£oê±&#214;ó&#212;¤·&#214;&#198;μêy
//&#213;aà&#239;ê1ó&#195;μ&#196;ê&#199;&#182;¨ê±&#198;÷3!
void TIM3_Int_Init(u16 arr,u16 psc)
{
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        NVIC_InitTypeDef NVIC_InitStructure;

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //ê±&#214;óê1&#196;ü

        TIM_TimeBaseStructure.TIM_Period = arr; //éè&#214;&#195;&#212;ú&#207;&#194;ò&#187;&#184;&#246;&#184;üD&#194;ê&#194;&#188;t×°è&#235;&#187;&#238;&#182;ˉμ&#196;×&#212;&#182;ˉ&#214;&#216;×°&#212;&#216;&#188;&#196;′&#230;&#198;÷&#214;ü&#198;úμ&#196;&#214;μ         &#188;&#198;êyμ&#189;5000&#206;a500ms
        TIM_TimeBaseStructure.TIM_Prescaler =psc; //éè&#214;&#195;ó&#195;à′×÷&#206;aTIMxê±&#214;ó&#198;μ&#194;ê3yêyμ&#196;&#212;¤·&#214;&#198;μ&#214;μ  10Khzμ&#196;&#188;&#198;êy&#198;μ&#194;ê  
        TIM_TimeBaseStructure.TIM_ClockDivision = 0; //éè&#214;&#195;ê±&#214;ó·&#214;&#184;&#238;:TDTS = Tck_tim
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM&#207;òé&#207;&#188;&#198;êy&#196;£ê&#189;
        TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //&#184;ù&#190;YTIM_TimeBaseInitStruct&#214;D&#214;&#184;&#182;¨μ&#196;2&#206;êy3&#245;ê&#188;&#187;ˉTIMxμ&#196;ê±&#188;&#228;&#187;ùêyμ¥&#206;&#187;

        TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //ê1&#196;ü&#214;&#184;&#182;¨μ&#196;TIM3&#214;D&#182;&#207;,&#212;êDí&#184;üD&#194;&#214;D&#182;&#207;

        NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;  //TIM3&#214;D&#182;&#207;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  //&#207;è&#213;&#188;ó&#197;&#207;è&#188;&#182;0&#188;&#182;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  //′óó&#197;&#207;è&#188;&#182;3&#188;&#182;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQí¨μà±&#187;ê1&#196;ü
        NVIC_Init(&NVIC_InitStructure);  //&#184;ù&#190;YNVIC_InitStruct&#214;D&#214;&#184;&#182;¨μ&#196;2&#206;êy3&#245;ê&#188;&#187;ˉíaéèNVIC&#188;&#196;′&#230;&#198;÷

        TIM_Cmd(TIM3, ENABLE);  //ê1&#196;üTIMxíaéè
                                                         
}
//&#182;¨ê±&#198;÷3&#214;D&#182;&#207;·t&#206;&#241;3ìDò
void TIM3_IRQHandler(void)   //TIM3&#214;D&#182;&#207;
{
        if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //&#188;ì2é&#214;&#184;&#182;¨μ&#196;TIM&#214;D&#182;&#207;·¢éúó&#235;·&#241;:TIM &#214;D&#182;&#207;&#212;′
                {
                  //&#199;&#229;3yTIMxμ&#196;&#214;D&#182;&#207;′y′|àí&#206;&#187;:TIM &#214;D&#182;&#207;&#212;′
               
               
                TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );
                        //LED0=!LED0;
                        vol=ADC_ConvertedValue[0];       
                        volp=ADC_ConvertedValue[1];
                        flag=1;
                }               
                       
                       
                 //DAC_SetChannel1Data(DAC_Align_12b_R, dacval);
                //adcx=Get_Adc_Average(ADC_Channel_1,10);
                //vol=adcx;
         // printf("%6d\n",vol);
       
}


#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
//#include "lcd.h"
#include "usart.h"                  
//#include "dac.h"
#include "adc.h"
#include "timer.h"
#include "usmart.h"
#include "bsp_AdvanceTim.h"
#define M 2  //2é&#188;ˉí¨μàμ&#196;×&#238;′óêy
//int vol;
//void Dac1_Set_Vol(u16 vol);
extern __IO uint16_t ADC_ConvertedValue[M];
long int xindian1[4],xindian2[4];//′&#230;·&#197;μ&#195;μ&#189;μ&#196;μ&#231;&#209;1
int adcx0=0, adcx1=0, adcx2=0,adcx3=0;
extern int flag;
extern int flag1;
int vol1=0;
extern int vol;
extern int volp;
int dacval=0;
int dacval1=0;
int k=0,n=1,i=0;
int adccount=0;
int adccount1=0;
int adccount2=0;
int max=0,min=0,mid=0;
/************************************************
ALIENTEK&#190;&#171;ó¢STM32&#191;a·¢°&#229;êμ&#209;é20
DAC êμ&#209;é      
&#188;&#188;ê&#245;&#214;§3&#214;£owww.openedv.com
ì&#212;±|μê&#198;ì£ohttp://eboard.taobao.com
1&#216;×¢&#206;¢D&#197;1&#171;&#214;ú&#198;&#189;ì¨&#206;¢D&#197;o&#197;£o"&#213;yμ&#227;&#212;-×ó"£&#172;&#195;a·&#209;&#187;&#241;è&#161;STM32×êá&#207;&#161;£
1&#227;&#214;YêDD&#199;òíμ&#231;×ó&#191;&#198;&#188;&#188;óD&#207;T1&#171;&#203;&#190;  
×÷&#213;&#223;£o&#213;yμ&#227;&#212;-×ó @ALIENTEK
************************************************/



int main(void)
{         
        delay_init();                     //&#209;óê±oˉêy3&#245;ê&#188;&#187;ˉ          
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//éè&#214;&#195;&#214;D&#182;&#207;ó&#197;&#207;è&#188;&#182;·&#214;×é&#206;a×é2£o2&#206;&#187;&#199;à&#213;&#188;ó&#197;&#207;è&#188;&#182;£&#172;2&#206;&#187;&#207;ìó|ó&#197;&#207;è&#188;&#182;
        uart_init(115200);                 //′&#174;&#191;ú3&#245;ê&#188;&#187;ˉ&#206;a115200
        //KEY_Init();                          //3&#245;ê&#188;&#187;ˉ°′&#188;ü3ìDò
        LED_Init();                             //LED&#182;&#203;&#191;ú3&#245;ê&#188;&#187;ˉ
        //LCD_Init();                                  //LCD3&#245;ê&#188;&#187;ˉ
  ADC1_Init();                          //ADC3&#245;ê&#188;&#187;ˉ
//        Dac1_Init();                                //DAC3&#245;ê&#188;&#187;ˉ
        ADVANCE_TIM_Init();
        TIM3_Int_Init(4,71);//10Khzμ&#196;&#188;&#198;êy&#198;μ&#194;ê£&#172;&#188;&#198;êyμ&#189;5000&#206;a500ms  
         //TIM3_Int_Init(4999,7199);
//TIM2_PWM_Init(4999,7199);
                         
        while(1)
        {
               
                if(flag==1)
                {
                       
                //DisplayCurve1(volp,vol);
                        if(adccount<200)
                        {
                        dacval +=vol;
                        dacval1 +=volp;       
                        adccount++;
                        }
                        else
                        {
                        //dacval=dacval/200;
                          dacval1=dacval1/200;
                                dacval=dacval/200;
                                DisplayCurve1(dacval1,dacval);
                                 adccount=0;
                                dacval=0;       
                         dacval1=0;
                       
                        }
                        flag=0;
          }
               
        }
}
[/mw_shl_code]          }
               
        }
}


最佳答案

查看完整内容[请看2#楼]

原因找到了 当我改为35时就是每2us中断溢出,而我设定的是55.5+12.5共68个周期,又是双ADC那就变成136个周期了136/12M是113us肯定不对 要把ADC采样时间设定的比中断溢出时间小才可以
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

8

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
129
金钱
129
注册时间
2018-3-27
在线时间
28 小时
 楼主| 发表于 2018-7-25 17:21:22 | 显示全部楼层
原因找到了  当我改为35时就是每2us中断溢出,而我设定的是55.5+12.5共68个周期,又是双ADC那就变成136个周期了136/12M是113us肯定不对  要把ADC采样时间设定的比中断溢出时间小才可以
回复

使用道具 举报

8

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
129
金钱
129
注册时间
2018-3-27
在线时间
28 小时
 楼主| 发表于 2018-7-25 17:28:36 | 显示全部楼层
改变采样频率的时候我修改的是TIM3_Int_Init(4,71) ,  这个函数 以前没有发现这个问题,近段时间要使用更高频率采样,发现修改TIM3_Int_Init(4,71)的参数,将71改为35,10s内得到的采样点是不变的,然而当我把71修改为143,10s内得到的采样点大概下降为一半,是我哪里设置的参数有问题吗?  采样率怎么只能降不能升,希望有会的大声帮忙解答一下
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-7-26 01:41:24 | 显示全部楼层
帮顶
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-17 22:49

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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