1.ADC驱动(STM32)
ADC模块中,**常规模式(Regular Mode)和注入模式(Injected Mode)**是两种不同的ADC工作模式
常规模式:用于普通的ADC转换,是默认的ADC工作模式。
注入模式:用于对特定通道进行高优先级的ADC采样。
特性 |
常规模式(Regular Mode) |
注入模式(Injected Mode) |
优先级 |
低 |
高 |
采样通道 |
支持多通道,按顺序扫描 |
支持多通道,但专用优先处理 |
DMA的兼容性 |
支持,适合连续采样传输 |
通常不使用 DMA |
场景 |
采集温度、湿度等非关键的环境传感器数据 |
采集电流、电压等高优先级的实时数据 |
1.1 常规模式
-
转换触发方式:软件启动或者外部硬件触发(比如使用函数开启读取数据这种)
-
数据转换完存储在ADC的数据寄存器(ADC_DR)中(这个知道就行,平常也用不到)
-
支持、适合使用DMA进行连续数据传输
-
可配置扫描模式,对多个通道依次采样
-
转换通道数可以通过
NbrOfConversion
配置
1.1.1 初始化代码
下面的代码按照:配置ADC参数、初始化ADC、启动校准、配置常规模式的参数、写入常规通道顺序写的
int32_t stm32_adc_init(void)
{
// 定义ADC配置结构体(常规模式)
ADC_ChannelConfTypeDef sConfig = {0};
// 初始化ADC3的实例
hadc3.Instance = ADC3;
// 配置ADC的初始化参数
hadc3.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV4; // 异步时钟分频因子设为4
hadc3.Init.Resolution = ADC_RESOLUTION_12B; // 分辨率为12位
hadc3.Init.DataAlign = ADC3_DATAALIGN_RIGHT; // 数据右对齐
hadc3.Init.ScanConvMode = ADC_SCAN_E