STM32F0多路ADC采样中的BUG和解决方案
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清零导致的
只需要在函数中增加 hadc.Instance->CHSELR = 0; 手动清0 寄存器即可。
下一篇:PIC单片机之看门狗
- 富士通数字退火芯片DAU明年登场[18年05月19日 12:37]
- 高通总裁拜访OPPO,传拿下R15S订单[18年05月19日 12:37]
- 经济学人:台积电先进制程将超越英特尔[18年05月19日 12:36]
- 高通恩智浦并购获批前景乐观 恩智浦股价创本周最大涨幅[18年05月19日 12:35]
- 共建智慧家庭美好未来!2018中国智慧家庭高峰论坛精彩盘点[18年05月19日 12:33]
- 乐鑫ESP32开发板正式通过Amazon FreeRTOS的验证[18年05月18日 21:30]