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

控制/MCU

1883人已加入

描述

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 寄存器即可。 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
评论(0)
发评论
447204956 2022-10-20
0 回复 举报
不知道我的问题是不是和你一样,我先去试试,感谢博主 收起回复

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分