这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » 【原创】嵌入式笔记--from杰

共1条 1/1 1 跳转至

【原创】嵌入式笔记--from杰

工程师
2025-06-19 18:59:32     打赏

ADC转换

一、 ADC 轮询法:最直接的读取方式

图片1.png


/*操作步骤======

1、打开ADC1通道10

2、配置ADC

3、通道配置周期

======end*/

 

ADC 配置完成后(通常通过 STM32CubeMX 生成初始化代码),我们如何获取转换结果呢?最简单直接的方法就是轮询法 (Polling)

1、打开ADC1通道10

图片2.png

2、配置ADC

图片3.png

1)分辨率

12bit

决定 ADC 能分辨的最小电压变化,通常以位 (bits) 表示。STM32 的 ADC 通常支持 12 位、10 位、8 位或 6 位分辨率。一般选12 bits

分辨率高->精度高->转换时间长。

2)数据对齐

Right Alignment

ADC 转换结果是一个数字值(如 12 位),但它存储在 16 位或 32 位的数据寄存器 (ADC_DR) 中。数据对齐方式决定了有效数据位在寄存器中的位置。一般选右对齐

右对齐(Right Alignment):有效数据位位于寄存器的低位 (LSB)。例如,12 位结果存储在 bit 11 到 bit 0。读取值即为 0-4095。

左对齐(Left Alignment):有效数据位位于寄存器的高位 (MSB)。例如,12 位结果存储在 bit 15 到 bit 4。这种方式在某些需要更高精度比例计算或与 8 位系统兼容时可能有用,但读取后通常需要右移 4 位。

 

3)转换模式

Single Conversion Mode

定义 ADC 如何进行转换轮询一般选单次转换,DMA选连续转换

单次转换Single Conversion Mode): 每次触发(软件或硬件)只进行一次转换,然后停止。需要再次触发才能进行下一次转换。常用于轮询法或简单的中断法。

连续转换Continuous Conversion Mode ):首次触发后,ADC 会自动连续不断地进行转换,每次转换完成后立即开始下一次转换,直到手动停止。常用于配合 DMA 进行高速连续采样。

单次转换:每次触发只会转换一次。

连续转换:首次触发后会一直进行转换,直到手动结束。

3、通道配置周期

图片4.png

图片5.png

此模式选择最大周期(480 Cycles)。

(二)代码部分配置

图片6.png

(1)adc_task放入到调度器中。

注意:如果在cubeMX中配置ADC为连续转换模式,需要加HAL_ADC_Stop手动停止。

如果是单词转换模式,不需要HAL_ADC_Stop手动停止。

 

一、 ADC DMA + 定时处理:解放 CPU 的初步尝试

轮询法虽然简单,但 CPU 一直在忙着等待,效率太低。为了让 CPU 能在 ADC 转换的同时处理其他任务,我们可以请出强大的帮手——DMA (Direct Memory Access)

图片7.png

使能DMA后因为是连续转换模式,所以会一直进行转换。周期性任务会周期进行数据(数据累加求平均值)输出。

(一)cubeMX配置

/*操作步骤======

1、配置ADC_DMA

2、配置ADC

======end*/

1、配置ADC_DMA

图片8.png

1)配置DMA模式

DMA 传输模式Mode):选择循环模式

Normal: 传输完指定长度的数据后停止。

Circular常用 传输到缓冲区末尾后自动回到缓冲区开头继续传输,形成环形缓冲区。这是 ADC 连续采样配合 DMA 的核心配置

2)配置数据宽度(外设 Peripheral / 内存 Memory)

图片9.png

注意:选用word的作用:一是为了使数据对齐,二是输入数据的参数使uint32

2、配置ADC

图片10.png

1、配置循环请求

配置ADC循环转化模式和DMA的循环请求

相当于ADC一直转化搬运。

 

(一)代码部分配置

/*代码

图片11.png



共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]