STM32CubeMX学习笔记-DAC接口使用(输出电压)

news2025/1/12 23:13:55

STM32CubeMX学习笔记-DAC接口使用(输出电压)

  • 一、DAC简介
  • 二、DAC通道选择
  • 三、新建工程
  • 四、DAC1
    • 4.1 参数配置
    • 4.2 生成代码
  • 五、库函数
  • 六、修改main函数

原创链接 1

一、DAC简介

DAC(Digital-to-Analog Converter),即数字/模拟转换模块,故名思议,它的作用就是把输入的数字编码,转换成对应的模拟电压输出,它的功能与 ADC 相反。在常见的数字信号系统中,大部分传感器信号被化成电压信号,而 ADC 把电压模拟信号转换成易于计算机存储、处理的数字编码,由计算机处理完成后,再由 DAC 输出电压模拟信号,该电压模拟信号常用来驱动某些执行器件,使人类易于感知。如音频信号的采集及还原就是这样一个过程。

STM32 具有片上 DAC 外设,它的分辨率可配置为 8 位或 12 位的数字输入信号,具有两个 DAC 输出通道,这两个通道互不影响,每个通道都可以使用 DMA 功能,都具有出错检测能力,可外部触发。

二、DAC通道选择

在 STM32 中具有 2 个这样的 DAC 部件,每个 DAC 有 1 个对应的输出通道连接到特定的引脚,即:PA4-通道 1PA5-通道 2,为避免干扰,使用 DAC 功能时,DAC 通道引脚需要被配置成模拟输入功能(AIN)。
在这里插入图片描述

三、新建工程

1. 打开 STM32CubeMX 软件,点击“新建工程”
在这里插入图片描述

2. 选择 MCU 和封装
在这里插入图片描述

3. 配置时钟
RCC 设置,选择 HSE(外部高速时钟) 为 Crystal/Ceramic Resonator(晶振/陶瓷谐振器)
在这里插入图片描述

选择 Clock Configuration,配置系统时钟 SYSCLK 为 72MHz
修改 HCLK 的值为 72 后,输入回车,软件会自动修改所有配置
在这里插入图片描述

4. 配置调试模式
非常重要的一步,否则会造成第一次烧录程序后续无法识别调试器
SYS 设置,选择 Debug 为 Serial Wire
在这里插入图片描述

四、DAC1

4.1 参数配置

Analog 中选择 DAC 设置,并选择 OUT1 Configuration 通道1
在这里插入图片描述

或者在右边图找到 PA4 引脚,选择 DAC_OUT1
在这里插入图片描述

具体配置参数如下。
在这里插入图片描述

OUT1/2 Configuration:
对应两个输出通道。
External Trigger:
外部中断EXTI9 触发 就是使用外部中断来触发DAC。
Output Buffer:
使能DAC输出缓存。

DAC 集成了 2 个输出缓存,可以用来减少输出阻抗,无需外部运放即可直接驱动外部负载。每个 DAC 通道输出缓存可以通过设置 DAC_CR 寄存器的 BOFFx 位来使能或者关闭。如果带载能力还不行,后面就接一个电压跟随器,选择运放一定要选择电流大的型号。
使能输出缓冲后,DAC 输出的最小电压为 0.2V,最大电压为 VREF±0.2,而未使能输出缓冲则输出可达到0V。
在这里插入图片描述

Trigger:
选择DAC的触发方式
Timer 2/4/5/6/7/8 Trigger Out event 定时器触发,利用这种方式可以输出特定的波形。
Software trigger 软件触发,在本模式下,向 DAC_SWTRIGR 寄存器写入配置即可触发信号进行转换。

4.2 生成代码

输入项目名和项目路径
在这里插入图片描述

选择应用的 IDE 开发环境 MDK-ARM V5

每个外设生成独立的 ’.c/.h’ 文件
不勾:所有初始化代码都生成在 main.c
勾选:初始化代码生成在对应的外设文件。 如 GPIO 初始化代码生成在 gpio.c 中。
在这里插入图片描述

点击 GENERATE CODE 生成代码
在这里插入图片描述

五、库函数

/* IO operation functions *****************************************************/
HAL_StatusTypeDef HAL_DAC_Start(DAC_HandleTypeDef* hdac, uint32_t Channel);     //开启DAC输出
HAL_StatusTypeDef HAL_DAC_Stop(DAC_HandleTypeDef* hdac, uint32_t Channel);   //关闭DAC输出
HAL_StatusTypeDef HAL_DAC_Start_DMA(DAC_HandleTypeDef* hdac, uint32_t Channel, uint32_t* pData, uint32_t Length, uint32_t Alignment); //需要函数中不断开启   //开启DAC的DMA输出
HAL_StatusTypeDef HAL_DAC_Stop_DMA(DAC_HandleTypeDef* hdac, uint32_t Channel); //关闭DAC的DMA输出
HAL_StatusTypeDef HAL_DAC_SetValue(DAC_HandleTypeDef* hdac, uint32_t Channel, uint32_t Alignment, uint32_t Data);  //设置DAC输出值
uint32_t HAL_DAC_GetValue(DAC_HandleTypeDef* hdac, uint32_t Channel);  //获取DAC输出值

六、修改main函数

与 ADC 外设类似,DAC 也使用 VREF+ 引脚作为参考电压,在设计原理图的时候一般把 VSSA 接地,把 VREF+ 和 VDDA 接 3.3V,可得到 DAC 的输出电压范围为:0~3.3V。
如果想让输出的电压范围变宽,可以在外部加一个电压调理电路,把 0~3.3V 的 DAC 输出抬升到特定的范围即可。

12位模式下DAC输出电压计算公式如下:

DAC 输出电压 = VREF+ * ( DOR / 4095 )

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_DAC_Init();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    HAL_DAC_SetValue(&hdac, DAC_CHANNEL_1, DAC_ALIGN_12B_R, 2048);
    HAL_DAC_Start(&hdac, DAC_CHANNEL_1);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

当 DOR 我们赋值 2048 时,实际输出的电压为 2048 / 4096 x 3.3V = 1.65V


  1. 链接:https://www.jianshu.com/p/a8c5176c8304 作者:Leung_ManWah ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1061893.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

番外--常用文件目录类命令

------------- task00: 00:常用文件目录类命令1-18.(pwd; cd;ls; more;less;head;tail; mkdir;rmdir;cp;mv;rm&#xff1b…

第八章 排序 三、希尔排序

目录 一、算法思想 二、例子 三、代码实现 五、验证 六、空间复杂度 七、时间复杂度 八、稳定性 一、算法思想 先追求表中元素部分有序,在逐渐逼近表中元素全部有序。 二、例子 1、我们要升序排列此表 2、取一个差值作为子表的划分的条件,希尔本…

SSM - Springboot - MyBatis-Plus 全栈体系(十九)

第四章 SpringMVC 二、SpringMVC 接收数据 1. 访问路径设置 RequestMapping 注解的作用就是将请求的 URL 地址和处理请求的方式(handler 方法)关联起来,建立映射关系。SpringMVC 接收到指定的请求,就会来找到在映射关系中对应的…

CTFHUB - SSRF

目录 SSRF漏洞 攻击对象 攻击形式 产生漏洞的函数 file_get_contents() fsockopen() curl_exec() 提高危害 利用的伪协议 file dict gopher 内网访问 伪协议读取文件 端口扫描 POST请求 总结 上传文件 总结 FastCGI协议 CGI和FastCGI的区别 FastCGI协议 …

盒子阴影和网页布局

盒子阴影 box-shadow: 10px 10px 10px 4px rgba(0,0,0,.3);//最后一个是透明度 传统网页布局的三种方式 标准流 就是按照规定好的默认方式排列 1.块级元素:div、hr、p、h1~h2、ul、ol、dl、form、table 行内元素会按照书顺序,从左到右顺序排列&#…

1.2 数据模型

思维导图: 前言: **1.2.1 什么是模型** - **定义**:模型是对现实世界中某个对象特征的模拟和抽象。例如,一张地图、建筑设计沙盘或精致的航模飞机都可以视为具体的模型。 - **具体模型与现实生活**:具体模型可以很容…

剑指offer——JZ55 二叉树的深度 解题思路与具体代码【C++】

一、题目描述与要求 二叉树的深度_牛客题霸_牛客网 (nowcoder.com) 题目描述 输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度,根节点的深度…

【简单了解一下红黑树】

文章目录 红黑树1.简介2.为什么需要红黑树?3.性质4. 红黑树的效率4.1 红黑树效率4.2 红黑树和AVL树的比较 5.AVL树 vs 红黑树5.1 AVL树5.2 红黑树5.3 如何选择 红黑树 1.简介 红黑树是一种自平衡的二叉查找树,是一种高效的查找树。它是由 Rudolf Bayer …

微信公众号开发与本地调试详细教程

在进行微信公众号开发时,本地调试是一个关键的步骤。本文将详细介绍如何进行微信公众号开发并在本地环境中进行调试。我们将以Nginx为例,演示如何配置虚拟主机,使用ngrok进行内网穿透,以及进行网页授权和JS SDK的测试。 1. 准备工…

Compose Canvas基础

Compose Canvas基础 前言Canvas是什么drawxxx()绘制方法drawCircle 画圆不填充颜色设置线条的宽度 drawRect 画矩形drawPoints 画点pointMode drawOval 画椭圆drawLine 画线drawRoundRect 画圆角矩形drawArc 绘制弧形或扇形useCenter drawPath 画自定义图形 总结 前言 阅读本文…

【C++ 学习 ㉕】- 万字详解 unordered_map 和 unordered_set(哈希表的查找和容器的模拟实现)

目录 一、unordered_map 的基本介绍 二、unordered_set 的基本介绍 三、相关练习 3.1 - 在长度 2N 的数组中找出重复 N 次的元素 3.2 - 存在重复元素 3.3 - 两句话中的不常见单词 四、哈希表的查找 4.1 - 哈希表的基本概念 4.2 - 哈希函数的构造方法 4.3 - 处理冲突的…

用go获取IPv4地址,WLAN的IPv4地址,本机公网IP地址详解

文章目录 获取IPv4地址获取WLAN的IPv4地址获取本机公网IP地址 获取IPv4地址 下面的代码会打印出本机所有的IPv4地址。这个方法可能会返回多个IP地址,因为一台机器可能有多个网络接口,每个接口可能有一个或多个IP地址。 package mainimport ("fmt&…

阿里云服务器地域和可用区查询表_地域可用区大全

阿里云服务器地域和可用区有哪些?阿里云服务器地域节点遍布全球29个地域、88个可用区,包括中国大陆、中国香港、日本、美国、新加坡、孟买、泰国、首尔、迪拜等地域,同一个地域下有多个可用区可以选择,阿里云服务器网分享2023新版…

批量剪辑技巧:视频去色处理,让色彩焕然一新!

你是否曾经遇到过这样的问题:大量视频需要处理,但色彩总是达不到你的要求?现在,我们将向你展示如何通过批量剪辑技巧,轻松去除视频原色,让色彩焕然一新! 首先,我们要进入【视频剪辑…

##***

本文涵盖了一种名为"快速编写论文,课设辅助器"的智能人工智能(AI)系统。该系统旨在提供高效的论文和课程设计撰写辅助功能。通过利用先进的自然语言处理和机器学习算法,该系统能够自动生成与特定主题相关的内容&#xf…

苹果mac电脑securecrt下载 附securecrt破解文件

SecureCRT for Mac是一款由VanDyke Software公司开发的终端仿真软件,专为Mac OS X系统设计,用于提供安全SSH、Telnet和其他协议的远程访问和管理。它适用于各种操作系统和设备,如Windows、Linux和UNIX等,为Mac用户提供了广泛的连接…

嵌入式学习笔记(46) NandFlash的结构

9.2.1 Nand的单元组织:block与page(大页Nand与小页Nand) (1)Nand的页和以前讲过的块设备(尤其是硬盘)的扇区是类似的。扇区最早在磁盘中是512字节,后来也有些高级硬盘扇区不是512字节,而是1024…

高中生自学Python,这里给大家一些建议

高一学业压力比较重,如果你还是选择自学Python,每天可以抽出一两个小时来学习的话,也是可以的。下面是我给你的5点建议: 找浅显易懂,例子比较好的教程,从头到尾看下去。不要看很多本,专注于一本…

C/C++:[Error] ld returned 1 exit status 解决方案

好久没用了,今天写了会儿代码,各种BUg,emmmmmm 出现了很多次以下这个问题:[Error] ld returned 1 exit status 可能问题&解决方式: 常见的语法/单词拼写错误:常见的Main,printf,scanf等拼写错误 函数名或者声明有…

行与走,放慢自己,思考回顾。

为什么要出去行与走? 1、出去行与走看到祖国的大美风景,可以更深刻的认识到我们祖国的美好。 2、可以放空心情,排除掉积攒在写字楼内的方格子里面的郁闷和烦恼。 3、可以为自己的身体和心灵找一个安静和清澈净土。 4、在行和走之间&#…