[STM32F7]

stm32外设之ADC|DAC总结

[复制链接]
480|58
手机看帖
扫描二维码
随时随地手机跟帖
慢动作|  楼主 | 2022-11-23 14:42 | 显示全部楼层 |阅读模式
AC, AD, ADC, DAC, ST
最近看了一张图觉得很有意思,可以看看我们目前的阶段hhh
38490637dc0bd9b778.png
adc是很重要的外部设备,使用adc可以进行很多方面的测量等,但是基本的教程如正点原子,野火等这方面都讲的比较单一,只是知道怎么用就够了,而没有让我们更好的去了解这样的一个设备,因此这里我来将我的理解做一个总结。

使用特权

评论回复
慢动作|  楼主 | 2022-11-23 14:45 | 显示全部楼层
其实at官方也有一本很好的资料讲了这些东西,概述了st的adc的一些功能,如下所示:
96415637dc186aacbe.png

使用特权

评论回复
慢动作|  楼主 | 2022-11-23 14:46 | 显示全部楼层
本文用到的实验平台:

野火MINI-stm32开发板
STM32CUBE-IDE开发工具

使用特权

评论回复
慢动作|  楼主 | 2022-11-23 14:46 | 显示全部楼层
DAC

1、直接触发

40535637dc1bcd70b6.png

使用特权

评论回复
慢动作|  楼主 | 2022-11-23 14:47 | 显示全部楼层
在初始化中编辑如下代码

  HAL_DAC_SetValue(&hdac, DAC_CHANNEL_1, DAC_ALIGN_12B_R, 2048);
  HAL_DAC_Start(&hdac,DAC_CHANNEL_1);
  HAL_DAC_SetValue(&hdac, DAC_CHANNEL_2, DAC_ALIGN_12B_R, 4095);
  HAL_DAC_Start(&hdac,DAC_CHANNEL_2);

使用特权

评论回复
慢动作|  楼主 | 2022-11-23 14:49 | 显示全部楼层
注意这里初始化代码不可以写成:
50683637dc26e129e6.png

使用特权

评论回复
慢动作|  楼主 | 2022-11-23 14:50 | 显示全部楼层
这样两个io口输出的都是DAC2的参数,具体原因还不太清楚,实验结果是这样的

使用特权

评论回复
慢动作|  楼主 | 2022-11-23 14:50 | 显示全部楼层
使用波形发生器

29866637dc2b71036e.png

使用特权

评论回复
慢动作|  楼主 | 2022-11-23 14:51 | 显示全部楼层
定时器还是配置为事件更新
13682637dc2ca97667.png

使用特权

评论回复
慢动作|  楼主 | 2022-11-23 14:52 | 显示全部楼层
初始化中加入代码

  HAL_TIM_Base_Start(&htim2);
  HAL_DAC_Start(&hdac, DAC_CHANNEL_1);

使用特权

评论回复
慢动作|  楼主 | 2022-11-23 14:54 | 显示全部楼层
效果如下
21797637dc385e84b2.png
关于这里频率的计算:
3831637dc3938554a.png

使用特权

评论回复
慢动作|  楼主 | 2022-11-23 14:54 | 显示全部楼层
前面是定时器周期,然后他是单次累加上去的,所以就是从0-4095这样加上去,再从4095-0这样一个来回,就是一次正弦波,所以计数4096*2次,所以周期大概就在439HZ

使用特权

评论回复
慢动作|  楼主 | 2022-11-23 14:55 | 显示全部楼层
这里不需要用他的内部波形功能了
5646637dc3e8afe68.png

使用特权

评论回复
慢动作|  楼主 | 2022-11-23 14:58 | 显示全部楼层
开启dma并设置循环模式

99399637dc4065b205.png

使用特权

评论回复
慢动作|  楼主 | 2022-11-23 15:16 | 显示全部楼层
这里定时器还是选择事件来更新
92777637dc8ca74cf9.png

使用特权

评论回复
慢动作|  楼主 | 2022-11-23 15:17 | 显示全部楼层
这里我们准备好需要的正弦波的数据

uint16_t sin_Data[] = {
                2048, 2460, 2856, 3218, 3532, 3786, 3969, 4072, 4093, 4031, 3887, 3668, 3382, 3042, 2661,
                2255, 1841, 1435, 1054, 714, 428, 209, 65, 3, 24, 127, 310, 564, 878, 1240, 1636, 2048
};

使用特权

评论回复
慢动作|  楼主 | 2022-11-23 15:18 | 显示全部楼层
添加初始化函数

  HAL_TIM_Base_Start(&htim2);
  HAL_DAC_Start_DMA(&hdac, DAC_CHANNEL_2, (uint32_t *)sin_Data, 32, DAC_ALIGN_12B_R

使用特权

评论回复
慢动作|  楼主 | 2022-11-23 15:18 | 显示全部楼层
使用示波器得到下面的结果
9923637dc95aa099b.png

使用特权

评论回复
慢动作|  楼主 | 2022-11-23 15:19 | 显示全部楼层
这里计算方法还是一样的,就大概是112khz
18485637dc96d99780.png

使用特权

评论回复
慢动作|  楼主 | 2022-11-23 15:20 | 显示全部楼层
二、ADC

1、stm32adc的理解

首先来看下正点原子的教程中写的:
在这里插入图片描述

这里其实就是一个很好的总结了,首先是独立模式和双重模式,就是ADC外设单独使用,比如ADC1,ADC2这样的,不同的外设使用起来互不干扰,双重模式是啥呢,就是两个ADC一起使用,交替进行。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

51

主题

504

帖子

0

粉丝