推荐星级:
  • 1
  • 2
  • 3
  • 4
  • 5

获得赏金
10.00元
扫描模式下的ADC读取数据和DMA转运 mulan keil 一步步配置

更新时间:2024-08-02 07:58:44 大小:15M 上传用户:mulanhk查看TA发布的资源 标签:adcdmakeil 下载积分:2分 评价赚积分 (如何评价?) 打赏 收藏 评论(0) 举报

资料介绍


项目内容:

在两种模式(扫描非连续模式,扫描连续模式)下的,ADC读取数据,DMA转运数据。

1. 扫描非连续(手动实现转运数据)避免造成数据覆盖

2. 扫描连续,单片机自行实现数据转运更新

包含:

3. stm32cubemx的详细配置步骤

4. keil的详细代码编写

5.最终效果实现图


核心目的:

本项目的核心目的,和实现目标,在合适的时机把ADC读取到的数据给在恰当的时机通过DMA转运出去,防止造成数据的覆盖。



一、与单次扫描差异

1. 规则组添加

单次扫描只需要添加1个通道放在序列1中,现在由于是多通道,所以规则组需要添加多个通道

2. 初始化ADC时

初始化ADC时需要设置单次扫描模式,并且把总通道数设置为4

3. 初始化DMA

由于规则组只有一个结果寄存器(ADC->DR)单次转换就一个结果直接存在这个寄存器里


原理图

image.png

项目配置:
一、扫描非连续模式,在ADC读出数据后,需要编写代码转换数据

STM32CUBEMX参数设置:


  1.  ADC设置

image.png

打开ADC通道,选择四个通道IN0,IN1,IN2,IN3

ADC的参数配置:

image.png

1. 设置为扫描模式

2. 设置为非连续模式

3. 设置需要被扫描的通道数

DMA的参数配置:

image.png

1. 添加一个DMA通道,选中转运的对象ADC通道

2. 设置为Normal模式

3. 选择对应的数据大小Half Word

OLED的GPIO参数配置:

image.png

1. 选择作为OLED时钟线和数据线引脚的端口

2. 将两者都设置为开漏输出模式

3. 分别给两个引脚重命名为SCL和SDA

时钟树配置:

image.png


注意在ADC的分频系数中选择6分频,以保证频率在合理范围内

代码编写:

image.png

分别在库中加入OLED的源文件,头文件和字模库

  1.  在main函数中校准ADC

image.png

2. 找DMA对象

因为在后续过程中在main使用DMA对象,所以需要把DMA对象设置为EXTERN,这样可以在main中使用它。转到自动生成的ADC初始化函数。

image.png

image.png

在ADC.h中对hdma_adc1进行extern,这样就可以全局调用了


3. 定义单片机执行程序中所需变量

image.png

4. 主循环中重复循环执行的程序

image.png

依次显示所读取到的数据值


最终效果显示图

image.png

二、扫描连续模式,在ADC读取数据后可以自动转换数据

在扫描非连续的基础上修改。

image.png

把ADC这里的参数配置成Enabled

image.png


将DMA的模式设置为循环模式

image.png


在原有基础上,修改这行代码


最终效果实现图

image.png


部分文件列表

文件名大小
ADC_ContinueF_scanF_DMA/
ADC_ContinueF_scanF_DMA/.mxproject8KB
ADC_ContinueF_scanF_DMA/ADC_ContinueF_scanF_DMA.ioc6KB
ADC_ContinueF_scanF_DMA/Core/
ADC_ContinueF_scanF_DMA/Core/Inc/
ADC_ContinueF_scanF_DMA/Core/Inc/adc.h1KB
ADC_ContinueF_scanF_DMA/Core/Inc/dma.h1KB
ADC_ContinueF_scanF_DMA/Core/Inc/gpio.h1KB
ADC_ContinueF_scanF_DMA/Core/Inc/main.h2KB
ADC_ContinueF_scanF_DMA/Core/Inc/OLED.h1KB
ADC_ContinueF_scanF_DMA/Core/Inc/OLED_FONT.h
...
  • 21ic小能手打赏了10.00

全部评论(0)

暂无评论

上传资源 上传优质资源有赏金

  • 打赏
  • 30日榜单

推荐下载