STM32 ADC连续采集

ADC

ADC 即模拟数字转换器,英文详称 Analog-to-digital converter,可以将外部的模拟信号转换为数字信号。
STM32 的 ADC 是 12 位逐次逼近型的模拟数字转换器。
ADC 中的各个通道的 A/D 转换可以单次、连续、扫描或间断模式执行。
ADC 的结果可以以左对齐或者右对齐存储在 16 位数据寄存器中

STM32F103 的 ADC 主要特性我们可以总结为以下几条:
1、 12 位分辨率;
2、转换结束、注入转换结束和发生模拟看门狗事件时产生中断
3、单次和连续转换模式
4、自校准
5、带内嵌数据一致性的数据对齐
6、采样间隔可以按通道分别编程
7、规则转换和注入转换均有外部触发选项
8、间断模式
9、双重模式(带 2 个或以上 ADC 的器件)
10、 ADC 转换时间:时钟为 72MHz 为 1.17us
11、 ADC 供电要求: 2.4V 到 3.6V
12、 ADC 输入范围: VREF–≤VIN≤VREF+
13、规则通道转换期间有 DMA 请求产生

当 ADC 的多个通道以任意顺序进行转换就诞生了成组转换,这里有两种成组转换类型:规则组和注入组。
规则组(规则通道)
规则组,按字面理解,“规则”就是按照一定的顺序,相当于正常运行的程序,平常用到最多也是规则组。
注入组(注入通道)
注入组,按字面理解,“注入”就是打破原来的状态,相当于中断。当程序执行的时候,中断是可以打断程序的执行。
同这个类似,注入组转换可以打断规则组的转换。假如在规则组转换过程中,注入组启动,那么注入组被转换完成之后,规则组才得以继续转换。

ADC采样
    hadc1.Init.ContinuousConvMode = ENABLE;   //连续转换

单次转换模式(Single Conversion Mode):在单次转换模式下,ADC按照设定的配置执行一次转换,然后停止转换并等待进一步的触发。这种模式适用于需要单次获取转换结果的应用场景。

连续转换模式(Continuous Conversion Mode):在连续转换模式下,ADC在完成一次转换后自动开始下一次转换,无需外部触发。这种模式适用于需要持续采样的应用场景,如数据采集。

	hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE; //非扫描模式 

非扫描模式(Single Conversion Mode):在非扫描模式下,只能选择一个通道进行转换。转换完成后,可以手动或通过中断等方式改变通道选择来执行下一次转换。

扫描模式(Scan Mode):在扫描模式下,可以通过设置多个输入通道进行连续转换。ADC将按照通道号的顺序对设置的多个通道进行转换,并将结果按顺序保存在对应的数据寄存器中。可以通过使用EOC(End of Conversion)标志或DMA传输等方式来获取每个通道的转换结果。

DMA
	HAL_ADC_Start_DMA(&hadc1,(uint32_t *)vol,16);
	__HAL_DMA_GET_COUNTER(&UART1TxDMA_Handler);//得到当前还剩余多少个数据

将DMA设置为循环模式

hdma_adc1.Init.Mode =DMA_CIRCULAR;

将DMA的中断关闭

不关闭可能导致主循环无法执行,具体原因不详

总结

实现连续采集的步骤
1.开启连续转换模式
2.开启扫描模式
3.DMA配置为循环模式

你可能感兴趣的:(stm32,嵌入式硬件,单片机)