当前位置: 首页 > news >正文

嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记12:DAC数模转换


系列文章目录

嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记01:赛事介绍与硬件平台

嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记02:开发环境安装

嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记03:G4时钟结构

嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记04:从零开始创建工程模板并开始点灯

嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记05:Systick滴答定时器

嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记06:按键输入

嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记07:ADC模数转换

嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记08:LCD液晶屏

嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记09:EEPROM

嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记10:USART串口通讯

嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记11:数字电位器MCP4017

嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记12:DAC数模转换

嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记13:RTC实时时钟

嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记14:PWM捕获

嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记15:PWM输出

嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记16:第十四届省赛真题


目录

系列文章目录

前言

一、基础知识

二、程序设计

总结


前言

DAC是将数字量转化成模拟量的器件,我们可以通过编程来实现输出某个特定的电压值,也就是模拟量。STM32G4内部集成了一个DAC模块,我们通过对STM32的编程就可以实现在它的特定的管脚上输出一个特定的电压,当然这个电压是可以通过我们的程序进行变化的,比如我们可以让他输出一个三角波或者正弦波都是可以的,只要在0-3.3V的范围之内就可以。当然,DAC输出也会受限于内部DAC器件的位数和精度。

一、基础知识

首先我们要了解一下STM32的哪个管脚可以作为DAC输出来使用,我们可以打开数据手册,在第四章管脚描述的部分找到管脚定义,搜索DAC就可以找到。

PA4可以作为DAC1的输出1通道,PA5可以作为DAC1的输出2通道,所以PA4、PA5就是我们这个芯片的DAC输出管脚。

对应的开发板上有一个J3的排针,也就是我们的拓展接口。我们通过对PA4、PA5的排针进行电压测量就可以知道我们编程的正不正确(通过万用表或者示波器)。

我们再看一下参考手册中关于DAC的基本描述,可以看到它是一个12位的DAC,也就是可以输出的数字量的范围是0-4095,即0-FFF。它也可以配置成8位。在12位模式下,数据可以配置成左对齐或者右对齐,也就是要用两个字节来对它进行输出控制(因为8<12<16),如果是左对齐的话就是FFF0,如果是右对齐就是0FFF,我们一般是用右对齐,这样它的范围就是0-0FFF,也就是0到4095。(如果是左对齐,就是0000,0010-FFF0,就不是很方便,所以我们推荐用右对齐)。然后,DAC有两个输出通道,每个通道有自己独立的转换器,在双DAC通道模式下,转换可以独立发生也可以同时发生,这个看我们的编程,可以让他同时输出也可以单独输出。

然后我们主要看一下DAC的特性:

  • 有四个DAC接口,每个最多两个输出通道(我们这个芯片版本是阉割版本,因为管脚太少)
  • 可以设置左对齐或者右对齐的12位模式(只选右对齐就可以了)
  • 可以同步更新(我们也不需要用到)
  • 内置噪声波形和三角波形的发生
  • 内置锯齿波的发生
  • 双通道可以同时输出也可以独立输出
  • 可以用到DMA(用不到)
  • 可以由外部触发输出,也可以由软件控制输出
  • DAC输出模式由buffered模式和unbuffered模式(缓存机制:来一连串指令可以逐个输出,unbuffered模式则只输出最后一个,我们一般工作在buffered模式)
  • ……

这部分最关键的就是要知道我们的DAC的接口PA4、PA5,以及它是12位的右对齐。

二、程序设计

这部分主要就是讲如何在STM32上编程控制DAC的两个管脚输出电压,并且这个电压我们的程序是可以控制的。

首先我们看一下程序设计步骤:

1.将“模板”用CubeMX生成代码

2.配置DAC输出的IO口:PA4->DAC1_OUT1,PA5->DAC1_OUT2

3.DAC输出模式:输出到外部引脚(connected to external pin)

4.将dac.c和dac.h移植到“编程工程”

  • main.c包含dac.h
  • 添加DAC相关的HAL库驱动文件
  • 在conf.h文件中启动DAC模块
  • DAC1初始化(MX_DAC1_Init)
  • 调用HAL_DAC_SetValue和HAL_DAC_Start函数编写程序

如图配置引脚:

设置外部引脚输出(不用勾选外部触发,用软件输出就可以了):

其他的不需要配置,保持默认就可以了。然后我们生成代码。有的人可能会问DAC要不要配置时钟,我们这里是不需要的,用系统时钟就可以了,因为DAC的触发主要是通过外部触发或者内部软件触发,所以时钟是不需要进行配置的。

生成代码后我们就可以把DAC进行移植,这个步骤我们之前已经进行过很多次了,程序设计步骤中写的也很详细,就不细说了。

然后我们就可以用HAL_DAC_SetValue()和HAL_DAC_Start()来编写程序生成电压。HAL_DAC_SetValue()有四个参数,第一个是DAC的处理结构体,直接写&hadc1就行了。第二个参数是它的通道,DAC_CHANNEL_1或者DAC_CHANNEL_2。第三个参数是对齐方式,我们前面说到是用12位右对齐,所以是DAC_ALIGN_12B_R。第四个是输入的数据(0-4095)。4095对应的就是3.3V,如1365对应的就是1.1V 。

这些参数的定义都是可以在函数定义里面找到的,如果考场上记不住就直接到定义里找。

例如:

HAL_DAC_SetValue(&hdac1,DAC_CHANNEL_1,DAC_ALIGN_12B_R,1365)

就是在PA4上输出1365的模拟电压1.1V(因为4095/3=1365)

设置完DAC的值后要启动一下HAL_DAC_Start(&hdac1,DAC_CHANNEL_1),这个参数只需要写一个是哪个结构体和哪个通道就可以了。

void DAC_Process(void)
{HAL_DAC_SetValue(&hdac1,DAC_CHANNEL_1,DAC_ALIGN_12B_L,1365);HAL_DAC_Start(&hdac1,DAC_CHANNEL_1);//PA4输出1.1VHAL_DAC_SetValue(&hdac1,DAC_CHANNEL_2,DAC_ALIGN_12B_L,2730);HAL_DAC_Start(&hdac1,DAC_CHANNEL_2);//PA5输出2.2V
}while (1)
{DAC_Process();
}

需要注意的是我们DAC是先设值再启动,不同于ADC是先启动再设值。

当然,上面这个程序我们也可以这样写:

u8 dac_val1,dac_val2;
void DAC_Process(float dac_volt1,dac_volt2)
{dac_val1=dac_volt1/3.3f*4095;dac_val2=dac_volt2/3.3f*4095;HAL_DAC_SetValue(&hdac1,DAC_CHANNEL_1,DAC_ALIGN_12B_L,dac_val1);HAL_DAC_Start(&hdac1,DAC_CHANNEL_1);//PA4输出1.1VHAL_DAC_SetValue(&hdac1,DAC_CHANNEL_2,DAC_ALIGN_12B_L,dac_val2);HAL_DAC_Start(&hdac1,DAC_CHANNEL_2);//PA5输出2.2V
}while (1)
{DAC_Process(1.1f,2.2f);
}

这样调用的时候直接输入需要的电压就行了。

总结

这一节的重点在于要知道DAC的接口PA4、PA5,以及它是12位的右对齐,知道要配置外部引脚输出,还要会写HAL_DAC_SetValue()和HAL_DAC_Start()的程序。

相关文章:

嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记12:DAC数模转换

系列文章目录 嵌入式|蓝桥杯STM32G431&#xff08;HAL库开发&#xff09;——CT117E学习笔记01&#xff1a;赛事介绍与硬件平台 嵌入式|蓝桥杯STM32G431&#xff08;HAL库开发&#xff09;——CT117E学习笔记02&#xff1a;开发环境安装 嵌入式|蓝桥杯STM32G431&#xff08;…...

迅饶科技 X2Modbus 网关 GetUser 信息泄露漏洞复现

0x01 产品简介 X2Modbus是上海迅饶自动化科技有限公司Q开发的一款功能很强大的协议转换网关, 这里的X代表各家不同的通信协议, 2是T0的谐音表示转换, Modbus就是最终支持的标准协议是Modbus协议。用户可以根据现场设备的通信协议进行配置,转成标准的Modbus协议。在PC端仿真…...

修改亚马逊云科技账户的密码和MFA

要使用AWS CLI删除当前账户的多因素认证(MFA)设备并修改密码&#xff0c;你需要先确保已安装并配置了AWS CLI&#xff0c;并且你的账户有足够的权限执行这些操作。下面是如何分步进行的指导&#xff1a; 1. 删除MFA设备 首先&#xff0c;你需要找出MFA设备的序列号或ARN。可以…...

提升性能与精准追踪:SkyWalking自定义跟踪忽略插件

前言 当使用分布式追踪系统时&#xff0c;有时需要排除某些端点或路径&#xff0c;以减轻追踪系统的负载或减少不必要的数据收集。为了满足这种需求&#xff0c;SkyWalking 提供了一个可选的插件&#xff0c;即 apm-trace-ignore-plugin&#xff0c;它允许自定义需要跳过的路径…...

第十三届蓝桥杯大赛软件赛省赛CC++大学B组

第十三届蓝桥杯大赛软件赛省赛CC 大学 B 组 文章目录 第十三届蓝桥杯大赛软件赛省赛CC 大学 B 组1、九进制转十进制2、顺子日期3、刷题统计4、修建灌木5、x进制减法6、统计子矩阵7、积木画8、扫雷9、李白打酒加强版10、砍竹子 1、九进制转十进制 计算器计算即可。2999292。 2、…...

zookeeper监听集群节点的实现zkclient组件实现方案(Java版)

ZooKeeper Watcher 机制 client 向zookeeper 注册监听client注册的同时会存储一个WatchManager对象向zookeeper发生改变则notification client 并发送一个WatchManager对象,然后client再更新该对象 package com.jacky.zk.demo;import org.I0Itec.zkclient.IZkChildListener;…...

【ArduinoQuartus】在小脚丫STEP CYC10上安装PulseRain Reindeer并在软核上运行基础功能

【Arduino&Quartus】在小脚丫STEP CYC10上安装PulseRain Reindeer并在软核上运行基础功能 一、将Reindeer软核下载到STEP CYC10&#xff08;一&#xff09;下载PulseRain Reindeer软核&#xff08;二&#xff09;配置Reindeer软核到开发板1.将sof文件转换为jic文件2.将jic文…...

【电路笔记】-逻辑与门

逻辑与门 文章目录 逻辑与门1、概述2、2 输入晶体管与门3、数字与门类型4、7408 四路 2 输入与门逻辑与门是一种数字逻辑电路,仅当其所有输入均为高电平时,其输出才会变为高电平至逻辑电平 1。 1、概述 数字逻辑与门的输出状态仅在其任何输入处于逻辑电平“0”时再次返回“低…...

蓝桥杯练习——拼出一个未来

选中 index.html 右键启动 Web Server 服务&#xff08;Open with Live Server&#xff09;&#xff0c;让项目运行起来。接着&#xff0c;打开环境右侧的【Web 服务】&#xff0c;就可以在浏览器中看到如下效果&#xff1a; 目标 完善 js/index.js 的 TODO 部分&#xff0c;实…...

stm32f103c8t6学习笔记(学习B站up江科大自化协)-SPI

SPI通信 SPI&#xff0c;&#xff08;serial peripheral interface&#xff09;&#xff0c;字面翻译是串行外设接口&#xff0c;是一种通用的数据总线&#xff0c;适用于主控和外挂芯片之间的通信&#xff0c;与IIC应用领域非常相似。 IIC无论是在硬件电路还是在软件时序设计…...

云计算的安全需求

目录 一、概述 二、云安全服务基本能力要求 三、信息安全服务&#xff08;云计算安全类&#xff09;资质要求 3.1 概述 3.2 资质要求内容 3.2.1 组织与管理要求 3.2.2 技术能力要求 四、云安全主要合规要求 4.1 安全管理机构部门的建立 4.2 安全管理规范计划的编制 4…...

【C++】编程规范之表达式原则

表达式中变量的位置 在编写表达式时&#xff0c;将变量放置在右边&#xff0c;可以提高代码的可读性和可理解性。这种做法符合自然语言的阅读习惯&#xff0c;使得代码更易于理解。 // Good if (5 x) {// do something }// Avoid if (x 5) {// do something }不变量和资源申…...

Python人工智能基础知识:理解神经网络与机器学习的基本概念

人工智能&#xff08;Artificial Intelligence&#xff0c;AI&#xff09;是当今科技领域的热门话题之一&#xff0c;而神经网络和机器学习作为AI的两个重要分支&#xff0c;在解决各种问题中发挥着重要作用。本文将详细介绍神经网络和机器学习的基本概念&#xff0c;帮助读者更…...

10_MVC

文章目录 JSON常用的JSON解析Jackson的常规使用指定日期格式 MVC设计模式MVC介绍前后端分离案例&#xff08;开发与Json相关接口&#xff09; 三层架构三层架构介绍 JSON JSON&#xff08;JavaScript Object Notation&#xff09; 是一种轻量级的数据交换格式&#xff0c;是存…...

【Java多线程(4)】案例:设计模式

目录 一、什么是设计模式&#xff1f; 二、单例模式 1. 饿汉模式 2. 懒汉模式 懒汉模式-第一次改进 懒汉模式-第二次改进 懒汉模式-第三次改进 一、什么是设计模式&#xff1f; 设计模式是针对软件设计中常见问题的通用解决方案。它们提供了一种被广泛接受的方法来解决…...

时序预测 | Matlab实现CPO-BiLSTM【24年新算法】冠豪猪优化双向长短期记忆神经网络时间序列预测

时序预测 | Matlab实现CPO-BiLSTM【24年新算法】冠豪猪优化双向长短期记忆神经网络时间序列预测 目录 时序预测 | Matlab实现CPO-BiLSTM【24年新算法】冠豪猪优化双向长短期记忆神经网络时间序列预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现CPO-BiLST…...

java面试题(4)|Spring和Spring Boot之间有什么关联和区别

文章目录 Spring和Spring Boot的有什么关联&#xff1f;Spring和Spring Boot有什么区别&#xff1f;如何快速区分某个项目采用的是 Spring 还是 Spring Boot&#xff1f; Spring和Spring Boot的有什么关联&#xff1f; Spring Boot是建立在Spring框架之上的&#xff0c;因此它…...

Spring Boot中前端通过请求接口下载后端存放的Excel模板

导出工具类 package com.yutu.garden.utils;import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import org.apache.commons.io.IOUtils; import org.apache.poi.hssf.util.HSSFColor; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.slf4j.Logger;…...

构建企业级微服务平台:实现可扩展性、弹性和高效性

在软件开发的快速发展领域中&#xff0c;企业不断努力构建健壮、可扩展和高效的系统。随着微服务架构的出现&#xff0c;再加上云原生技术的应用&#xff0c;创建敏捷且具有弹性的平台的可能性是无限的。在本指南中&#xff0c;我们将深入探讨使用强大的工具和技术组合&#xf…...

存内计算技术在边缘计算、物联网设备中的应用及前景

存内计算技术简介 存内计算技术是一种新兴的计算范式&#xff0c;其核心理念是将存储和计算功能集成在同一硬件单元中。这种技术的优势在于能够在存储单元内部直接进行计算操作&#xff0c;从而减少数据在存储器和处理器之间的传输&#xff0c;提高计算效率。 以下是存内计算技…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲&#xff1a; 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年&#xff0c;数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段&#xff0c;基于数字孪生的水厂可视化平台的…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

Android15默认授权浮窗权限

我们经常有那种需求&#xff0c;客户需要定制的apk集成在ROM中&#xff0c;并且默认授予其【显示在其他应用的上层】权限&#xff0c;也就是我们常说的浮窗权限&#xff0c;那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...

Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?

在大数据处理领域&#xff0c;Hive 作为 Hadoop 生态中重要的数据仓库工具&#xff0c;其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式&#xff0c;很多开发者常常陷入选择困境。本文将从底…...

腾讯云V3签名

想要接入腾讯云的Api&#xff0c;必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口&#xff0c;但总是卡在签名这一步&#xff0c;最后放弃选择SDK&#xff0c;这次终于自己代码实现。 可能腾讯云翻新了接口文档&#xff0c;现在阅读起来&#xff0c;清晰了很多&…...

淘宝扭蛋机小程序系统开发:打造互动性强的购物平台

淘宝扭蛋机小程序系统的开发&#xff0c;旨在打造一个互动性强的购物平台&#xff0c;让用户在购物的同时&#xff0c;能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机&#xff0c;实现旋转、抽拉等动作&#xff0c;增…...

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?

在工业自动化持续演进的今天&#xff0c;通信网络的角色正变得愈发关键。 2025年6月6日&#xff0c;为期三天的华南国际工业博览会在深圳国际会展中心&#xff08;宝安&#xff09;圆满落幕。作为国内工业通信领域的技术型企业&#xff0c;光路科技&#xff08;Fiberroad&…...