找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2077|回复: 4
打印 上一主题 下一主题
收起左侧

STM32L151单片机ADC在唤醒后无法正常运行 卡死在while

[复制链接]
回帖奖励 5 黑币 回复本帖可获得 5 黑币奖励! 每人限 1 次
跳转到指定楼层
楼主
ID:621862 发表于 2020-12-24 13:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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 这里了
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:540513 发表于 2020-12-29 13:35 | 只看该作者
初始化触发方式目前使用的是外部触发,可以更换为软件触发试试
回复

使用道具 举报

板凳
ID:310808 发表于 2023-8-8 15:50 | 只看该作者
时钟和引脚不对应
回复

使用道具 举报

地板
ID:1063563 发表于 2023-8-10 08:09 | 只看该作者
是不是在等待模拟量的标志位,才卡在哪里等待。
回复

使用道具 举报

5#
ID:372579 发表于 2023-8-12 09:09 | 只看该作者
最好仿真下看看
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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