问答

汇集网友智慧,解决技术难题

21ic问答首页 - MM32F031K6T的ADC转换速率好像达不到1Msps

MM32F031K6T的ADC转换速率好像达不到1Msps

deadphenix2022-02-26
回答 +关注 18
10765人浏览 16人回答问题 分享 举报
16 个回答
  • 估计要用dma或者上系统了
  • 应该能同时都满足要求的
  • 提高优先级能解决问题吗
  • 然后就能达到了是吗
  • 如果跑系统的话会有所改善吗
  • 楼主同时运行pwm程序了吗
  • 本帖最后由 deadphenix 于 2022-2-28 10:22 编辑

    发现不是ADC的问题,而是PWM的问题,我在ADCDMA转换中设置了TIM的比较寄存器CCR1,这个突然占用了很大的开销。如果在ADC的DMA中断中屏蔽掉“TIM_SetCompare1(TIM1, 200);“,则ADC转换时间是正常的,但加上该句之后,就很耗时了,按理这个应该很快才对,为什么TIM1->CCR1的设置会很耗时呢?

    void DMA1_Channel1_IRQHandler(void)
    {
    //        ADC_SoftwareStartConvCmd(ADC1, DISABLE);                                     //Stop Conversion
            DMA_ClearITPendingBit(DMA1_IT_TC1);                                          //Clear interrupt flag
            u16 chan = 0;
            measCount++;
            TIM_SetCompare1(TIM1, 200);
    //                ADC_SoftwareStartConvCmd(ADC1, ENABLE);
    //    ADCflag = 1;                                                                //Erected transmission complete flag

    }


    void PWM_TIM1_ConfigInit()
    {
        GPIO_InitTypeDef GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        TIM_OCInitTypeDef  TIM_OCInitStructure;

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);

        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
        GPIO_PinAFConfig(GPIOA, GPIO_PinSource8, GPIO_AF_2);

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;                                   //TIM1_CH1
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                             
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
            
        TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
        TIM_TimeBaseStructure.TIM_Period = 400;                                    
        TIM_TimeBaseStructure.TIM_Prescaler = 6;                                 
        TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;                              
        TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;               
        TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);                           

        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
        TIM_OCInitStructure.TIM_Pulse = 100;
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
        TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;
        TIM_OC1Init(TIM1, &TIM_OCInitStructure);
        TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);

        TIM_ARRPreloadConfig(TIM1, ENABLE);
        TIM_Cmd(TIM1, ENABLE);

        TIM_CtrlPWMOutputs(TIM1, ENABLE);
    }
12

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