嵌入式技术论坛
直播中

张龙祥

8年用户 1227经验值
擅长:连接器
私信 关注
[问答]

请问STM32F4xx系列ADC采样一次数据是几个字节?

请问一下这个是不是代表ADC采样一次的数据大小是2个字节?
假如我设置分辨率为8位,数据大小是否是一个字节存入16位寄存器?

回帖(1)

风来吴山

2022-5-9 09:43:31
STM32 ADC转换结果在ADCx->DR寄存器中,这个寄存器是一个32位的寄存器,但是只有16bit可用。
下方以L4的RM0394文档为例,其他类似:

为了客观,不管L4,编辑一下帖子,下方的截图是F4的RM0090文档的DR寄存器:

在HAL库中,读取ADC转换结果提供的接口函数是HAL_ADC_GetValue,返回的是uint32,你可以根据你设置的左对齐/右对齐方式,将结果移位到你需要的uint8_t变量即可。
uint32_t HAL_ADC_GetValue(ADC_HandleTypeDef* hadc)
{      
  /* Return the selected ADC converted value */
  return hadc->Instance->DR;
}
在LL库中,其实也没啥区别,10位/8位/6位分辨率,都是返回的uint16_t
__STATIC_INLINE uint16_t LL_ADC_REG_ReadConversionData10(ADC_TypeDef *ADCx)
{
  return (uint16_t)(READ_BIT(ADCx->DR, ADC_DR_DATA));
}
__STATIC_INLINE uint8_t LL_ADC_REG_ReadConversionData8(ADC_TypeDef *ADCx)
{
  return (uint16_t)(READ_BIT(ADCx->DR, ADC_DR_DATA));
}
__STATIC_INLINE uint8_t LL_ADC_REG_ReadConversionData6(ADC_TypeDef *ADCx)
{
  return (uint16_t)(READ_BIT(ADCx->DR, ADC_DR_DATA));
}
结论:你可以将转换结果放入到uint8_t变量中。但是自己要根据左/右对齐方式,将接口函数读取出来的uint16_t/uint32_t移位处理一下,再赋值给uint8_t的变量即可。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分