STM32F0多路ADC采样中的BUG和解决方案

来源:互联网 发布:rsa加密算法 c语言 编辑:程序博客网 时间:2024/06/08 06:47
<pre name="code" class="cpp">uint32_t ADC_Detect(uint32_t  AD_Channel){hadc.Instance->CHSELR = 0;ADC_ChannelConfTypeDef sConfig;sConfig.Channel = AD_Channel;        sConfig.Rank = ADC_RANK_CHANNEL_NUMBER;        sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5;        HAL_ADC_ConfigChannel(&hadc, &sConfig);  uint32_t ADC_result;/*ADC START*/if(HAL_ADC_Start(&hadc)!=HAL_OK){while(1){}}/*Wait for ADC completed*/    if (HAL_ADC_PollForConversion(&hadc, 10) != HAL_OK)  {     while(1)  {  }  }  else  {    /*Get the converted value of regular channel*/    ADC_result = HAL_ADC_GetValue(&hadc);HAL_ADC_Stop(&hadc);//ADC_result =((ADC_result*3300)>>8);return ADC_result;  }}
使用CUBE生产的ADC无法配置多路采样,多路采样采集值不对,研究后发现是底层函数没有将CHANNEL清零导致的
<pre name="code" class="cpp">只需要在函数中增加 hadc.Instance->CHSELR = 0; 手动清0 寄存器即可。


                                             
0 0