请问STM32F031 ADC配置成 8位分辨率
请问STM32F031 ADC配置 成8位分辨率 。读出的数据却是12位的。电压1V 如果12位1*4095*/3.3=1240
电压1V 如果8位1*4095*/3.3=77
求指教
ADC_InitStructure.ADC_Resolution = ADC_Resolution_8b;//ADC_Resolution_12b;//12位精度
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; //规定模式装换工作在连续模式
ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None; //不用外不触发
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//数据对其为右对齐
ADC_InitStructure.ADC_ScanDirection = ADC_ScanDirection_Upward; //ADC的扫描方向
ADC_Init(ADC1, &ADC_InitStructure); 检查一下CFGR1寄存器里的RES是00还是10 其实不需要配置成8位,你舍弃多余的位就行了。 sonicll 发表于 2022-6-30 15:51
检查一下CFGR1寄存器里的RES是00还是10
大哥能帮我配一下吗? zhuomuniao110 发表于 2022-6-30 15:53
其实不需要配置成8位,你舍弃多余的位就行了。
舍去?怎么弄? 8位要快点吧? zhuomuniao110 发表于 2022-6-30 15:53
其实不需要配置成8位,你舍弃多余的位就行了。
硬件降低分辨率,是可以提高转换速度的,如果对转换速度没有要求,那确实可以软件取12位数据的高8位来用 sonicll 发表于 2022-6-30 16:19
硬件降低分辨率,是可以提高转换速度的,如果对转换速度没有要求,那确实可以软件取12位数据的高8位来用 ...
现在就是想慢点不要哪么高精度。所以想配成8位ADC。但读出来的数据使终是12的。能帮忙配置下吗? 剑指蓝天 发表于 2022-6-30 16:24
现在就是想慢点不要哪么高精度。所以想配成8位ADC。但读出来的数据使终是12的。能帮忙配置下吗? ...
你贴出来的代码没有发现问题,你单步调试看看,ADC_Init这个函数,把ADC_Resolution写进寄存器的时候,到底写入了多少 硬件降低分辨率就可以拉 sonicll 发表于 2022-6-30 17:02
你贴出来的代码没有发现问题,你单步调试看看,ADC_Init这个函数,把ADC_Resolution写进寄存器的时候,到 ...
代码没问题为什么读出来的是12位? dongnanxibei 发表于 2022-6-30 17:13
硬件降低分辨率就可以拉
硬件怎么降分辨率?谢谢 剑指蓝天 发表于 2022-6-30 18:03
代码没问题为什么读出来的是12位?
你贴出来的代码没问题,不代表你其他的代码也没问题,都给你说了单步调试看寄存器,你先自己试一下啊 sonicll 发表于 2022-7-1 10:03
你贴出来的代码没问题,不代表你其他的代码也没问题,都给你说了单步调试看寄存器,你先自己试一下啊 ...
谢谢。。我理解了。ADC数据后4位是不转换的。。 static void MX_ADC_Init(void)
{
/* USER CODE BEGIN ADC_Init 0 */
/* USER CODE END ADC_Init 0 */
ADC_ChannelConfTypeDef sConfig = {0};
/* USER CODE BEGIN ADC_Init 1 */
/* USER CODE END ADC_Init 1 */
/** Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion)
*/
hadc.Instance = ADC1;
hadc.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
hadc.Init.Resolution = ADC_RESOLUTION_8B;
hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc.Init.ScanConvMode = ADC_SCAN_DIRECTION_FORWARD;
hadc.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
hadc.Init.LowPowerAutoWait = DISABLE;
hadc.Init.LowPowerAutoPowerOff = DISABLE;
hadc.Init.ContinuousConvMode = DISABLE;
hadc.Init.DiscontinuousConvMode = DISABLE;
hadc.Init.ExternalTrigConv = ADC_SOFTWARE_START;
hadc.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
hadc.Init.DMAContinuousRequests = DISABLE;
hadc.Init.Overrun = ADC_OVR_DATA_PRESERVED;
if (HAL_ADC_Init(&hadc) != HAL_OK)
{
Error_Handler();
}
/** Configure for the selected ADC regular channel to be converted.
*/
sConfig.Channel = ADC_CHANNEL_0;
sConfig.Rank = ADC_RANK_CHANNEL_NUMBER;
sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5;
if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN ADC_Init 2 */
/* USER CODE END ADC_Init 2 */
} 关键问题就是抓住问题的关键,如何抓住关键问题的问题关键呢?多看手册了。 配置好了吗?是否可以分享下
页:
[1]