打印
[STM32F0]

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

[复制链接]
707|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
请问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

大哥能帮我配一下吗?

使用特权

评论回复
5
剑指蓝天|  楼主 | 2022-6-30 16:07 | 只看该作者
zhuomuniao110 发表于 2022-6-30 15:53
其实不需要配置成8位,你舍弃多余的位就行了。

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

使用特权

评论回复
6
sonicll| | 2022-6-30 16:19 | 只看该作者
zhuomuniao110 发表于 2022-6-30 15:53
其实不需要配置成8位,你舍弃多余的位就行了。

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

使用特权

评论回复
7
剑指蓝天|  楼主 | 2022-6-30 16:24 | 只看该作者
sonicll 发表于 2022-6-30 16:19
硬件降低分辨率,是可以提高转换速度的,如果对转换速度没有要求,那确实可以软件取12位数据的高8位来用 ...

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

使用特权

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

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

使用特权

评论回复
9
dongnanxibei| | 2022-6-30 17:13 | 只看该作者
硬件降低分辨率就可以拉

使用特权

评论回复
10
剑指蓝天|  楼主 | 2022-6-30 18:03 | 只看该作者
sonicll 发表于 2022-6-30 17:02
你贴出来的代码没有发现问题,你单步调试看看,ADC_Init这个函数,把ADC_Resolution写进寄存器的时候,到 ...

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

使用特权

评论回复
11
剑指蓝天|  楼主 | 2022-6-30 18:04 | 只看该作者
dongnanxibei 发表于 2022-6-30 17:13
硬件降低分辨率就可以拉

硬件怎么降分辨率?谢谢

使用特权

评论回复
12
sonicll| | 2022-7-1 10:03 | 只看该作者
剑指蓝天 发表于 2022-6-30 18:03
代码没问题为什么读出来的是12位?

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

使用特权

评论回复
13
剑指蓝天|  楼主 | 2022-7-1 14:08 | 只看该作者
sonicll 发表于 2022-7-1 10:03
你贴出来的代码没问题,不代表你其他的代码也没问题,都给你说了单步调试看寄存器,你先自己试一下啊 ...

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

使用特权

评论回复
14
zhuomuniao110| | 2022-7-12 20:09 | 只看该作者

使用特权

评论回复
15
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 */

}

使用特权

评论回复
16
dongnanxibei| | 2022-8-10 17:23 | 只看该作者
关键问题就是抓住问题的关键,如何抓住关键问题的问题关键呢?多看手册了。

使用特权

评论回复
17
heweibig| | 2022-8-10 21:48 | 只看该作者
配置好了吗?是否可以分享下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

33

帖子

1

粉丝