[STM32F0] 请问STM32F031 ADC配置成 8位分辨率

[复制链接]
1054|16
 楼主| 剑指蓝天 发表于 2022-6-30 15:30 | 显示全部楼层 |阅读模式
请问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 | 显示全部楼层
  1. static void MX_ADC_Init(void)
  2. {

  3.   /* USER CODE BEGIN ADC_Init 0 */

  4.   /* USER CODE END ADC_Init 0 */

  5.   ADC_ChannelConfTypeDef sConfig = {0};

  6.   /* USER CODE BEGIN ADC_Init 1 */

  7.   /* USER CODE END ADC_Init 1 */
  8.   /** Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion)
  9.   */
  10.   hadc.Instance = ADC1;
  11.   hadc.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
  12.   hadc.Init.Resolution = ADC_RESOLUTION_8B;
  13.   hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT;
  14.   hadc.Init.ScanConvMode = ADC_SCAN_DIRECTION_FORWARD;
  15.   hadc.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
  16.   hadc.Init.LowPowerAutoWait = DISABLE;
  17.   hadc.Init.LowPowerAutoPowerOff = DISABLE;
  18.   hadc.Init.ContinuousConvMode = DISABLE;
  19.   hadc.Init.DiscontinuousConvMode = DISABLE;
  20.   hadc.Init.ExternalTrigConv = ADC_SOFTWARE_START;
  21.   hadc.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
  22.   hadc.Init.DMAContinuousRequests = DISABLE;
  23.   hadc.Init.Overrun = ADC_OVR_DATA_PRESERVED;
  24.   if (HAL_ADC_Init(&hadc) != HAL_OK)
  25.   {
  26.     Error_Handler();
  27.   }
  28.   /** Configure for the selected ADC regular channel to be converted.
  29.   */
  30.   sConfig.Channel = ADC_CHANNEL_0;
  31.   sConfig.Rank = ADC_RANK_CHANNEL_NUMBER;
  32.   sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5;
  33.   if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK)
  34.   {
  35.     Error_Handler();
  36.   }
  37.   /* USER CODE BEGIN ADC_Init 2 */

  38.   /* USER CODE END ADC_Init 2 */

  39. }
dongnanxibei 发表于 2022-8-10 17:23 | 显示全部楼层
关键问题就是抓住问题的关键,如何抓住关键问题的问题关键呢?多看手册了。
heweibig 发表于 2022-8-10 21:48 | 显示全部楼层
配置好了吗?是否可以分享下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

37

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部