OpenEdv-开源电子网

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

关于ADC EOC位死循环等待问题

[复制链接]

3

主题

9

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2020-7-27
在线时间
3 小时
发表于 2020-8-2 14:23:10 | 显示全部楼层 |阅读模式
1金钱
起初是ADC初始化后将采样函数放在主函数里死循环,AD采样显示正常。后来放在定时器中断服务函数后就一直卡在while(!(ADC1->ISR&1<<2));不知道是什么原因。代码如下。求大佬指导


void MY_ADC1_Init(void)
{
    ADC1_Handler.Instance=ADC1;
    ADC1_Handler.Init.ClockPrescaler=ADC_CLOCK_ASYNC_DIV2;         //2·&#214;&#198;μ£&#172;ADCCLK=PER_CK/4=64/2=32MHZ
    ADC1_Handler.Init.Resolution=ADC_RESOLUTION_12B;                   //16&#206;&#187;&#196;£ê&#189;
    ADC1_Handler.Init.ScanConvMode=DISABLE;                            //·&#199;é¨&#195;è&#196;£ê&#189;
    ADC1_Handler.Init.EOCSelection=ADC_EOC_SINGLE_CONV;               //1&#216;±&#213;EOC&#214;D&#182;&#207;
          ADC1_Handler.Init.LowPowerAutoWait=DISABLE;                                        //×&#212;&#182;ˉμí1|o&#196;1&#216;±&#213;                               
    ADC1_Handler.Init.ContinuousConvMode=ENABLE;               //1&#216;±&#213;á&#172;D&#248;×a&#187;&#187;
    ADC1_Handler.Init.NbrOfConversion=1;                        //1&#184;&#246;×a&#187;&#187;&#212;ú1&#230;&#212;òDòáD&#214;D ò2&#190;íê&#199;&#214;&#187;×a&#187;&#187;1&#230;&#212;òDòáD1
    ADC1_Handler.Init.DiscontinuousConvMode=DISABLE;            //&#189;&#251;&#214;12&#187;á&#172;D&#248;2é&#209;ù&#196;£ê&#189;
    ADC1_Handler.Init.NbrOfDiscConversion=0;                    //2&#187;á&#172;D&#248;2é&#209;ùí¨μàêy&#206;a0
    ADC1_Handler.Init.ExternalTrigConv=ADC_SOFTWARE_START;      //èí&#188;t′¥·¢
    ADC1_Handler.Init.ExternalTrigConvEdge=ADC_EXTERNALTRIGCONVEDGE_NONE;//ê1ó&#195;èí&#188;t′¥·¢
          ADC1_Handler.Init.BoostMode=ENABLE;                                                        //BOOT&#196;£ê&#189;1&#216;±&#213;
          ADC1_Handler.Init.Overrun=ADC_OVR_DATA_PRESERVED;                        //óDD&#194;μ&#196;êy&#190;Yμ&#196;&#203;àoó&#214;±&#189;ó&#184;2&#184;&#199;μ&#244;&#190;éêy&#190;Y
          ADC1_Handler.Init.OversamplingMode=DISABLE;                                        //1y2é&#209;ù1&#216;±&#213;
          ADC1_Handler.Init.ConversionDataManagement=ADC_CONVERSIONDATA_DR;  //1&#230;&#212;òí¨μàμ&#196;êy&#190;Y&#189;&#246;&#189;&#246;±£′&#230;&#212;úDR&#188;&#196;′&#230;&#198;÷à&#239;&#195;&#230;
    HAL_ADC_Init(&ADC1_Handler);                                 //3&#245;ê&#188;&#187;ˉ
       
          HAL_ADCEx_Calibration_Start(&ADC1_Handler,ADC_CALIB_OFFSET,ADC_SINGLE_ENDED); //ADCD£×&#188;
       
          ADC1_ChanConf.Channel=ADC_CHANNEL_19;                                   //í¨μà
    ADC1_ChanConf.Rank=ADC_REGULAR_RANK_1;                          //1&#184;&#246;DòáD
    ADC1_ChanConf.SamplingTime=ADC_SAMPLETIME_16CYCLES_5;              //2é&#209;ùê±&#188;&#228;      
          ADC1_ChanConf.SingleDiff=ADC_SINGLE_ENDED;                                  //μ¥±&#223;2é&#188;ˉ                         
          ADC1_ChanConf.OffsetNumber=ADC_OFFSET_NONE;                    
          ADC1_ChanConf.Offset=0;   
    HAL_ADC_ConfigChannel(&ADC1_Handler,&ADC1_ChanConf);        //í¨μà&#197;&#228;&#214;&#195;

    HAL_ADC_Start(&ADC1_Handler);                               //&#191;a&#198;&#244;ADC
}




void sampling(void)
{
       
       
        u16 i;
        for(i=0;i<2700;i++)
        {
               
               
        while(!(ADC1->ISR&1<<2))
                {}                                                     
        ADC_VAL[i]=ADC1->DR;
          ADC1->ISR&=0<<2;
                       
        }
}


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

9

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2020-7-27
在线时间
3 小时
 楼主| 发表于 2020-8-2 15:47:52 | 显示全部楼层
ADC1_Handler.Init.Overrun=ADC_OVR_DATA_OVERWRITTEN;已解决
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-4-30 15:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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