新手上路
- 积分
- 20
- 金钱
- 20
- 注册时间
- 2020-7-27
- 在线时间
- 3 小时
|
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·ÖÆμ£¬ADCCLK=PER_CK/4=64/2=32MHZ
ADC1_Handler.Init.Resolution=ADC_RESOLUTION_12B; //16λÄ£ê½
ADC1_Handler.Init.ScanConvMode=DISABLE; //·Çé¨ÃèÄ£ê½
ADC1_Handler.Init.EOCSelection=ADC_EOC_SINGLE_CONV; //1رÕEOCÖD¶Ï
ADC1_Handler.Init.LowPowerAutoWait=DISABLE; //×Ô¶ˉμí1|oÄ1رÕ
ADC1_Handler.Init.ContinuousConvMode=ENABLE; //1رÕá¬Dø×a»»
ADC1_Handler.Init.NbrOfConversion=1; //1¸ö×a»»Ôú1æÔòDòáDÖD ò2¾íêÇÖ»×a»»1æÔòDòáD1
ADC1_Handler.Init.DiscontinuousConvMode=DISABLE; //½ûÖ12»á¬Dø2éÑùÄ£ê½
ADC1_Handler.Init.NbrOfDiscConversion=0; //2»á¬Dø2éÑùí¨μàêyÎa0
ADC1_Handler.Init.ExternalTrigConv=ADC_SOFTWARE_START; //èí¼t′¥·¢
ADC1_Handler.Init.ExternalTrigConvEdge=ADC_EXTERNALTRIGCONVEDGE_NONE;//ê1óÃèí¼t′¥·¢
ADC1_Handler.Init.BoostMode=ENABLE; //BOOTÄ£ê½1رÕ
ADC1_Handler.Init.Overrun=ADC_OVR_DATA_PRESERVED; //óDDÂμÄêy¾YμÄËàoóÖ±½ó¸2¸Çμô¾éêy¾Y
ADC1_Handler.Init.OversamplingMode=DISABLE; //1y2éÑù1رÕ
ADC1_Handler.Init.ConversionDataManagement=ADC_CONVERSIONDATA_DR; //1æÔòí¨μàμÄêy¾Y½ö½ö±£′æÔúDR¼Ä′æÆ÷àïÃæ
HAL_ADC_Init(&ADC1_Handler); //3õê¼»ˉ
HAL_ADCEx_Calibration_Start(&ADC1_Handler,ADC_CALIB_OFFSET,ADC_SINGLE_ENDED); //ADCD£×¼
ADC1_ChanConf.Channel=ADC_CHANNEL_19; //í¨μà
ADC1_ChanConf.Rank=ADC_REGULAR_RANK_1; //1¸öDòáD
ADC1_ChanConf.SamplingTime=ADC_SAMPLETIME_16CYCLES_5; //2éÑùê±¼ä
ADC1_ChanConf.SingleDiff=ADC_SINGLE_ENDED; //μ¥±ß2é¼ˉ
ADC1_ChanConf.OffsetNumber=ADC_OFFSET_NONE;
ADC1_ChanConf.Offset=0;
HAL_ADC_ConfigChannel(&ADC1_Handler,&ADC1_ChanConf); //í¨μàÅäÖÃ
HAL_ADC_Start(&ADC1_Handler); //¿aÆô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;
}
}
|
|