剑指蓝天 发表于 2022-6-30 15:30

请问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);

sonicll 发表于 2022-6-30 15:51

检查一下CFGR1寄存器里的RES是00还是10

zhuomuniao110 发表于 2022-6-30 15:53

其实不需要配置成8位,你舍弃多余的位就行了。

剑指蓝天 发表于 2022-6-30 16:06

sonicll 发表于 2022-6-30 15:51
检查一下CFGR1寄存器里的RES是00还是10

大哥能帮我配一下吗?

剑指蓝天 发表于 2022-6-30 16:07

zhuomuniao110 发表于 2022-6-30 15:53
其实不需要配置成8位,你舍弃多余的位就行了。

舍去?怎么弄?    8位要快点吧?

sonicll 发表于 2022-6-30 16:19

zhuomuniao110 发表于 2022-6-30 15:53
其实不需要配置成8位,你舍弃多余的位就行了。

硬件降低分辨率,是可以提高转换速度的,如果对转换速度没有要求,那确实可以软件取12位数据的高8位来用

剑指蓝天 发表于 2022-6-30 16:24

sonicll 发表于 2022-6-30 16:19
硬件降低分辨率,是可以提高转换速度的,如果对转换速度没有要求,那确实可以软件取12位数据的高8位来用 ...

现在就是想慢点不要哪么高精度。所以想配成8位ADC。但读出来的数据使终是12的。能帮忙配置下吗?

sonicll 发表于 2022-6-30 17:02

剑指蓝天 发表于 2022-6-30 16:24
现在就是想慢点不要哪么高精度。所以想配成8位ADC。但读出来的数据使终是12的。能帮忙配置下吗? ...

你贴出来的代码没有发现问题,你单步调试看看,ADC_Init这个函数,把ADC_Resolution写进寄存器的时候,到底写入了多少

dongnanxibei 发表于 2022-6-30 17:13

硬件降低分辨率就可以拉

剑指蓝天 发表于 2022-6-30 18:03

sonicll 发表于 2022-6-30 17:02
你贴出来的代码没有发现问题,你单步调试看看,ADC_Init这个函数,把ADC_Resolution写进寄存器的时候,到 ...

代码没问题为什么读出来的是12位?

剑指蓝天 发表于 2022-6-30 18:04

dongnanxibei 发表于 2022-6-30 17:13
硬件降低分辨率就可以拉

硬件怎么降分辨率?谢谢

sonicll 发表于 2022-7-1 10:03

剑指蓝天 发表于 2022-6-30 18:03
代码没问题为什么读出来的是12位?

你贴出来的代码没问题,不代表你其他的代码也没问题,都给你说了单步调试看寄存器,你先自己试一下啊

剑指蓝天 发表于 2022-7-1 14:08

sonicll 发表于 2022-7-1 10:03
你贴出来的代码没问题,不代表你其他的代码也没问题,都给你说了单步调试看寄存器,你先自己试一下啊 ...

谢谢。。我理解了。ADC数据后4位是不转换的。。

zhuomuniao110 发表于 2022-7-12 20:09

zhuomuniao110 发表于 2022-7-12 21:02

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 */

}

dongnanxibei 发表于 2022-8-10 17:23

关键问题就是抓住问题的关键,如何抓住关键问题的问题关键呢?多看手册了。

heweibig 发表于 2022-8-10 21:48

配置好了吗?是否可以分享下
页: [1]
查看完整版本: 请问STM32F031 ADC配置成 8位分辨率