打印
[STM32F7]

stm32外设之ADC|DAC总结

[复制链接]
1887|68
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
慢动作|  楼主 | 2022-11-23 14:42 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
AC, AD, ADC, DAC, ST
最近看了一张图觉得很有意思,可以看看我们目前的阶段hhh

adc是很重要的外部设备,使用adc可以进行很多方面的测量等,但是基本的教程如正点原子,野火等这方面都讲的比较单一,只是知道怎么用就够了,而没有让我们更好的去了解这样的一个设备,因此这里我来将我的理解做一个总结。

使用特权

评论回复
沙发
慢动作|  楼主 | 2022-11-23 14:45 | 只看该作者
其实at官方也有一本很好的资料讲了这些东西,概述了st的adc的一些功能,如下所示:

使用特权

评论回复
板凳
慢动作|  楼主 | 2022-11-23 14:46 | 只看该作者
本文用到的实验平台:

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

使用特权

评论回复
地板
慢动作|  楼主 | 2022-11-23 14:46 | 只看该作者
DAC

1、直接触发

使用特权

评论回复
5
慢动作|  楼主 | 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);

使用特权

评论回复
6
慢动作|  楼主 | 2022-11-23 14:49 | 只看该作者
注意这里初始化代码不可以写成:

使用特权

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

使用特权

评论回复
8
慢动作|  楼主 | 2022-11-23 14:50 | 只看该作者
使用波形发生器

使用特权

评论回复
9
慢动作|  楼主 | 2022-11-23 14:51 | 只看该作者
定时器还是配置为事件更新

使用特权

评论回复
10
慢动作|  楼主 | 2022-11-23 14:52 | 只看该作者
初始化中加入代码

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

使用特权

评论回复
11
慢动作|  楼主 | 2022-11-23 14:54 | 只看该作者
效果如下

关于这里频率的计算:

使用特权

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

使用特权

评论回复
13
慢动作|  楼主 | 2022-11-23 14:55 | 只看该作者
这里不需要用他的内部波形功能了

使用特权

评论回复
14
慢动作|  楼主 | 2022-11-23 14:58 | 只看该作者
开启dma并设置循环模式

使用特权

评论回复
15
慢动作|  楼主 | 2022-11-23 15:16 | 只看该作者
这里定时器还是选择事件来更新

使用特权

评论回复
16
慢动作|  楼主 | 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
};

使用特权

评论回复
17
慢动作|  楼主 | 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

使用特权

评论回复
18
慢动作|  楼主 | 2022-11-23 15:18 | 只看该作者
使用示波器得到下面的结果

使用特权

评论回复
19
慢动作|  楼主 | 2022-11-23 15:19 | 只看该作者
这里计算方法还是一样的,就大概是112khz

使用特权

评论回复
20
慢动作|  楼主 | 2022-11-23 15:20 | 只看该作者
二、ADC

1、stm32adc的理解

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

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

使用特权

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

本版积分规则

67

主题

699

帖子

0

粉丝