标题: STM32L151单片机ADC在唤醒后无法正常运行 卡死在while [打印本页]

作者: 嗯哼11    时间: 2020-12-24 13:54
标题: STM32L151单片机ADC在唤醒后无法正常运行 卡死在while
void  Adc_Init(void)
{         
        
               
                GPIO_InitTypeDef GPIO_InitStructure;
                ADC_InitTypeDef ADC_InitStructure;
                /*----------------- ADC1 configuration with DMA enabled --------------------*/
    /* Enable the HSI oscillator */
    RCC_HSICmd(ENABLE);

    /* Enable GPIOB clock */
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
    /* Configure PB.0 (ADC Channe8) in analog mode */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
    GPIO_Init(GPIOB, &GPIO_InitStructure);

    /* Check that HSI oscillator is ready */
    while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);

    /* Enable ADC1 clock */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
    /* ADC1 configuration */
    ADC_InitStructure.ADC_ScanConvMode = ENABLE;
    ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
    ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConvEdge_None;
    ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
    ADC_InitStructure.ADC_NbrOfConversion = 1;
    ADC_Init(ADC1, &ADC_InitStructure);
    /* ADC1 regular channel18 configuration */
    ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_4Cycles);   
    /* Enable ADC1 */
                ADC_TempSensorVrefintCmd(ENABLE);
    ADC_Cmd(ADC1, ENABLE);
               
                /* Wait until the ADC1 is ready */
    while(ADC_GetFlagStatus(ADC1, ADC_FLAG_ADONS) == RESET)
    {
                        Uart1_SendStr(".");
                        delay_ms(1000);
    }   
                ADC_SoftwareStartConv(ADC1);
               
}
u16 Get_Adc(u8 ch)   
{
        
          //设置指定ADC的规则组通道,一个序列,采样时间
        ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_96Cycles );        //ADC1,ADC通道,采样时间为239.5周期                                      
  delay_ms(50);
        ADC_SoftwareStartConv(ADC1);                //使能指定的ADC1的软件转换启动功能        
         
        while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC )){
        

        }
            ADC_ClearFlag (ADC1,ADC_FLAG_EOC);   
        
        
        return ADC_GetConversionValue(ADC1);        //返回最近一次ADC1规则组的转换结果
}
  卡死在while 这里了

作者: chenjh_1992    时间: 2020-12-29 13:35
初始化触发方式目前使用的是外部触发,可以更换为软件触发试试
作者: dtp2020    时间: 2023-8-8 15:50
时钟和引脚不对应
作者: 芯菲    时间: 2023-8-10 08:09
是不是在等待模拟量的标志位,才卡在哪里等待。
作者: aide51    时间: 2023-8-12 09:09
最好仿真下看看




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1