[STM32F4] 基于HAL库的STM32F4的 单通道ADC+DMA

[复制链接]
2588|48
 楼主| yutingwei 发表于 2023-10-29 01:47 | 显示全部楼层 |阅读模式
AD, ADC, DM, DMA, ST

如何用STM32F407对于单通道ADC-DMA进行配置。

实验板子:STM32F407VET6

基础配置
  • SYS配置
  • 57019653d493cc294b.png
  • Dubug这个选项我们选择Serial Wire ,我这用的是ST-LINK下载器,如果你们使用的其他下载器,比如JTAG,则选择其他的。

 楼主| yutingwei 发表于 2023-10-29 01:48 | 显示全部楼层
2.RCC配置
89684653d49569775e.png
 楼主| yutingwei 发表于 2023-10-29 01:48 | 显示全部楼层
对于高速时钟和低速时钟我们都选择上面的选项,这样之后的时钟树才能配置,否者后面的时钟树配置会无法配置。
 楼主| yutingwei 发表于 2023-10-29 01:48 | 显示全部楼层
3.USART配置
22985653d49690deeb.png
 楼主| yutingwei 发表于 2023-10-29 01:48 | 显示全部楼层
串口的Mode选择异步通讯,波特率我一般选的是115200,你选9600也没问题,但你的这的波特率要和串口助手上的波特率相对应,否者也可能出不来值。
 楼主| yutingwei 发表于 2023-10-29 01:48 | 显示全部楼层
ADC的配置
1、ADC配置
70862653d4979aa471.png
 楼主| yutingwei 发表于 2023-10-29 01:48 | 显示全部楼层
Data Alignment : 对齐模式,可选左对齐和右对齐,一般选择右对齐模式

1、Conversion Mode:扫描转换模式是否开启

2、Continuous Conversion Mode:连续转换模式是否开启

3、Discontinuous Conversion Mode:不连续转换模式 是否开启

4、DMA Continuous Selection :DMA 连续选择 。 因为我使用的是DMA所以这里需要打开。

5和6、External Trigger Conversion Source:触发开始转换事件选择:这里我选择定时器3作为触发开始,触发方式选择上升沿作为触发方式
 楼主| yutingwei 发表于 2023-10-29 01:49 | 显示全部楼层
98691653d498bb4981.png MA的配置
 楼主| yutingwei 发表于 2023-10-29 01:49 | 显示全部楼层
 楼主| yutingwei 发表于 2023-10-29 01:49 | 显示全部楼层
3、定时器3的配置
13114653d49a0722a0.png
 楼主| yutingwei 发表于 2023-10-29 01:49 | 显示全部楼层
在Clock Source 选择内部时钟(interal Clock),紧接着是预分频系数和计数周期
采样率=84M/(PRC+1)(ARR+1),TIMER3挂在APB2上,APB2的时钟频率是84MHZ.
当你需要什么样的采样率可以自己去设置,有个前提,PRC和ARR不能同时为0,选择更新事件作为触发事件.
我这里配置的采样率是100K。
 楼主| yutingwei 发表于 2023-10-29 01:49 | 显示全部楼层
时钟树配置
34539653d49b36aa69.png
 楼主| yutingwei 发表于 2023-10-29 01:49 | 显示全部楼层
我所使用的是STM32F407vet6,最高主频168MHZ,我们直接把性能给他拉满,在红框内输入168回车就行了,后面的他会自动帮你配好分频系数等等。
 楼主| yutingwei 发表于 2023-10-29 01:49 | 显示全部楼层
代码生成
99771653d49c5b76b8.png
 楼主| yutingwei 发表于 2023-10-29 01:50 | 显示全部楼层
 楼主| yutingwei 发表于 2023-10-29 01:50 | 显示全部楼层
这里1和2,都可以选,但是选1是复制所有的文件目录,所以每个文件都比较大,选2的话,只保留重要文件目录,文件不会太大。我一般会选择2,因为这样每个工程的大小不会太大,不会太占内存。3的配置就跟上面的一样。
 楼主| yutingwei 发表于 2023-10-29 01:50 | 显示全部楼层
之后生成.c文件就行了。
 楼主| yutingwei 发表于 2023-10-29 01:50 | 显示全部楼层
代码编写
70811653d49e18a746.png
 楼主| yutingwei 发表于 2023-10-29 01:50 | 显示全部楼层
之后在main.c中添加#include "stdio.h"就行了
14088653d49ec10080.png
 楼主| yutingwei 发表于 2023-10-29 01:50 | 显示全部楼层
在main函数之前先定义一个16位变量(在使用ADC_DMA时那个变量必须是16位的,之前这个变量写的32位的,结果一直没出来,最后debug出来的,花了很多的时间
您需要登录后才可以回帖 登录 | 注册

本版积分规则

58

主题

514

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部