STM32 ADC采样详解
文章目录
5 ADC采样
5.1 ADC 采样基本与对齐
ADC采样是模拟量转化为数字量,DAC转换是数字量转化为模拟量。DMA可以用来做内存搬运,好处是不会占用CPU内存。使能ADC采样时,其有单信号采样(Single-ended)和差分信号采样(Differential),要根据原理图上的信号线数量来具体决定。ADC有很多通道1,有的通道支持差分信号采样,有的通道并不支持。
一般的ADC采样器是12位的,会把电压分成4096份,常见的数据对齐方式有左对齐和右对齐两种方法。所以:
5.2 常用的采样模式
部分ADC模式:
ps:number of conversion:一定要根据ADC采样的个数来调整,他会决定我们分配几个RANK来存储数据。
5.3 ADC采样声音光强例程
CubeMX的配置:
//添加如下代码到adc.h
extern int adc_sampel_lux_mic(uint32_t *lux, uint32_t *mic);
//添加如下代码到adc.c
enum
{
LIG_ADC,
MIC_ADC,
MAX_ADC,
};
int adc_sampel_lux_mic(uint32_t *lux, uint32_t *mic)
{
uint8_t i;
uint32_t timeout=0xffffff;
for(i=0; i<MAX_ADC; i++)
{
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1, timeout);//等待转换完成
if (i == LIG_ADC)
{
*lux = HAL_ADC_GetValue(&hadc1);
}
if (i == MIC_ADC)
{
*mic= HAL_ADC_GetValue(&hadc1);
}
HAL_Delay(10);
}
HAL_ADC_Stop(&hadc1);
return 0;
}
5.4 ADC采样常用函数
//开启adc1的ADC采样
HAL_ADC_Start(&hadc1);
///查询函数,查询EOC标志位。每次采样,CPU在这里都要等待采样完成才能进行下一步,这段时间CUP没有干其他事,所以降低了CUP使用率
HAL_ADC_PollForConversion(&hadc1, timeout);
//获取ADC采样的值
HAL_ADC_GetValue(&hadc1);
//停止ADC采样
HAL_ADC_Stop(&hadc1);
作者:小小志想写好代码