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

STM32 DAC+串口

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、DAC是什么?
  • 二、STM32 DAC
    • 1.什么型号有DAC
    • 2. 简介
    • 3. 主要特点
    • 4. DAC框图
    • 5. DAC 电压范围和引脚
  • 三、程序步骤
    • 1. 开启DAC时钟
    • 2. 配置引脚 PA4 PA5 模拟输入
    • 3. 初始化DAC
    • 5. 使能DAC
    • 6. 写入数字电压
    • 7. 触发转换
    • 8测试结果
  • 四、加入串口互动
    • 1.定义发送字符格式:
    • 方案1 比较符合人性
    • 方案2,用mv输出,没有小数,提取会更简单
    • 2.获取字符串
    • 3.解释字符串
  • 总结


前言

提示:这里可以添加本文要记录的大概内容:

前面学习了STM32的ADC,掌握了模拟信号如何转化成数字信号,现在学习如何将数字信号转换成模拟信号。

目标:串口输入3.3v->stm32->DAC->3.3V ->ADC ->串口 ->电压
举例: 3.3v -> "3.3v"字符串->解释前面的数字 3.3怎么给DAC

具体:(ADC) PA0 ->(DAC) ?


提示:以下是本篇文章正文内容,下面案例可供参考

一、DAC是什么?

示例:DAC是数字模拟转换器(Digital to Analog Converter)的缩写,它是一种将数字信号转换为模拟信号的设备。

DAC数模转换实验工作原理

https://www.bilibili.com/video/BV11Z4y1z7mP/?spm_id_from=333.337.search-card.all.click

二、STM32 DAC

1.什么型号有DAC

在这里插入图片描述

查看数据手册
在这里插入图片描述
在这里插入图片描述

2. 简介

在这里插入图片描述

3. 主要特点

在这里插入图片描述

4. DAC框图

在这里插入图片描述

5. DAC 电压范围和引脚

在这里插入图片描述

三、程序步骤

1. 开启DAC时钟

在这里插入图片描述

在这里插入图片描述

 RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);

2. 配置引脚 PA4 PA5 模拟输入

在这里插入图片描述在这里插入图片描述

	GPIO_InitStruct.GPIO_Pin=  GPIO_Pin_4;          //GPIO_InitStruct.GPIO_Speed= GPIO_Speed_50MHz;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AIN;     //模拟输入GPIO_Init(GPIOA, &GPIO_InitStruct);   //&x

3. 初始化DAC

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

	//3.初始化DAC//DAC_InitStruct.DAC_LFSRUnmask_TriangleAmplitude=DAC_InitStruct.DAC_OutputBuffer=DAC_OutputBuffer_Disable;DAC_InitStruct.DAC_Trigger=DAC_Trigger_Software; //软件触发DAC_InitStruct.DAC_WaveGeneration=DAC_WaveGeneration_None;DAC_Init(DAC_Channel_1,&DAC_InitStruct);

5. 使能DAC

在这里插入图片描述

DAC_Cmd(DAC_Channel_1, ENABLE);

6. 写入数字电压

在这里插入图片描述
在这里插入图片描述

DAC_SetChannel1Data(DAC_Align_12b_R, 2048); // 12位 电压范围  0-4095

7. 触发转换

在这里插入图片描述
在这里插入图片描述

 DAC_SoftwareTriggerCmd(DAC_Channel_1, ENABLE);//软件使能转换

完整初始化参考

void dac_init()
{GPIO_InitTypeDef GPIO_InitStruct;DAC_InitTypeDef DAC_InitStruct;//1.开时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);// RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1|RCC_APB2Periph_GPIOA,ENABLE);//2. 配置位模拟输入GPIO_InitStruct.GPIO_Pin=  GPIO_Pin_4;          //GPIO_InitStruct.GPIO_Speed= GPIO_Speed_50MHz;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AIN;     //模拟输入GPIO_Init(GPIOA, &GPIO_InitStruct);   //&x//3.初始化DAC//DAC_InitStruct.DAC_LFSRUnmask_TriangleAmplitude=DAC_InitStruct.DAC_OutputBuffer=DAC_OutputBuffer_Disable;DAC_InitStruct.DAC_Trigger=DAC_Trigger_Software; //软件触发DAC_InitStruct.DAC_WaveGeneration=DAC_WaveGeneration_None;DAC_Init(DAC_Channel_1,&DAC_InitStruct);// 4. 使能DACDAC_Cmd(DAC_Channel_1, ENABLE);DAC_SetChannel1Data(DAC_Align_12b_R, 2048); // 12位 电压范围  0-4095DAC_SoftwareTriggerCmd(DAC_Channel_1, ENABLE);//软件使能转换}

程序框架

void main
{ADC_init();uart_init();DAC_init();while(1){//adc 读取//发送串口}
}

8测试结果

***

在这里插入图片描述

四、加入串口互动

1.定义发送字符格式:

方案1 比较符合人性

“DAC输出:3.3v” 则输出3.3v
“DAC输出:1.65v” 则输出1.65v

方案2,用mv输出,没有小数,提取会更简单

“DAC输出:3300mv” 则输出3300mv
“DAC输出:1650v” 则输出1650mv

2.获取字符串

串口中断获取

3.解释字符串

举例
“DAC输出:3.3v” 在字符串种查找 DAC关键字,然后再找到 ':'从这里 获取后面的’3.3’字符,直到’v’停止将获取的字符 3.3 转换成实际数字,
3.3 在转换成数字电压

字符转整型STM32史上最短 字符转整形 简简单单

https://blog.csdn.net/weixin_51102592/article/details/121125622?app_version=6.2.4&code=app_1562916241&csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22121125622%22%2C%22source%22%3A%22ganhui13000%22%7D&uLinkId=usr1mkqgl919blen&utm_source=app

#include "string.h"
#include "stdlib.h"
u8 DATA[200]="X12Y34Y56Y78";
int shuju_chuli(const char *shuju,char zifu )
{char *shu_ju_1=strchr(shuju,zifu)+1;			//数据return atoi(shu_ju_1); 					//数值
}int shuju_chuli1(const char *shuju,char zifu )
{char *shu_ju_1=strchr(shuju,zifu)+1;			//数据char *shu_ju_2=strchr(shu_ju_1,zifu)+1;			//数据return atoi(shu_ju_2); 					//数值
}printf("X是:%d\r\n",shuju_chuli((const char*)DATA,'X'));printf("y是:%d\r\n",shuju_chuli((const char*)DATA,'Y'));printf("Y1是:%d\r\n",shuju_chuli1((const char*)DATA,'Y'));

总结

DAC的原理,STM32DAC的特点,STM32DAC实操,用ADC和DAC闭环,实现了ADC和DAC 的检测。

相关文章:

STM32 DAC+串口

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、DAC是什么?二、STM32 DAC1.什么型号有DAC2. 简介3. 主要特点4. DAC框图5. DAC 电压范围和引脚 三、程序步骤1. 开启DAC时钟2. 配置引脚 PA4 PA5…...

SolidWorks二次开发 C#-读取基于Excel的BOM表信息

SolidWorks二次开发 C#-读取基于Excel的BOM表信息 问题点来源解决方案及思路相关引用链接 问题点来源 这是一位粉丝问的一个问题,他说到: 老师,请问Solidworks二次开发工程图中"基于Excel的材料明细表"怎么读取里面的数据? Ps:这…...

maui中实现加载更多 RefreshView跟ListView(2)

一个类似商品例表的下拉效果&#xff1a; 代码 新增个类为商品商体类 public class ProductItem{public string ImageSource { get; set; }public string ProductName { get; set; }public string Price { get; set; }}界面代码&#xff1a; <?xml version"1.0&quo…...

win10环境下git安装和基础操作

简述 关于git的作用就不多赘述了&#xff0c;配合GitHub&#xff0c;达到方便人们日常项目维护和管理&#xff0c;每一次项目增删改查都可以看的清清楚楚&#xff0c;方便团队协作和个人项目日常维护。 下载git 首先我们自然是要到官网下载git&#xff0c;下载地址为https:/…...

将yolo格式转化为voc格式:txt转xml(亲测有效)

1.文件目录如下所示&#xff1a; 对以上目录的解释&#xff1a; 1.dataset下面的image文件夹&#xff1a;里面装的是数据集的原图片 2.dataset下面的label文件夹&#xff1a;里面装的是图片对应得yolo格式标签 3.dataset下面的Annotations文件夹&#xff1a;这是一个空文件夹&…...

字符串 - 541.反转字符串II(C#和C实现)

字符串 - 541.反转字符串II(C#和C实现) 题目描述 给定一个字符串 s 和一个整数 k&#xff0c;你需要对从字符串开头算起的每隔 2k 个字符的前 k 个字符进行反转。 如果剩余字符少于 k 个&#xff0c;则将剩余字符全部反转。如果剩余字符小于 2k 但大于或等于 k 个&#xff0…...

机器视觉技术与应用实战(开运算、闭运算、细化)

开运算和闭运算的基础是膨胀和腐蚀&#xff0c;可以在看本文章前先阅读这篇文章机器视觉技术与应用实战&#xff08;Chapter Two-04&#xff09;-CSDN博客 开运算&#xff1a;先腐蚀后膨胀。开运算可以使图像的轮廓变得光滑&#xff0c;具有断开狭窄的间断和消除细小突出物的作…...

云原生之深入解析云原生架构的日志监控

一、什么是云原生架构的日志监控&#xff1f; 云原生架构的日志监控要求现代 Web 应用程序采用与传统应用程序略有不同的方法。部分原因是应用程序环境要复杂得多&#xff0c;包括从微服务中获取数据、使用 Kubernetes 和其他容器技术&#xff0c;以及在许多情况下集成开源组件…...

基于hfl/rbt3模型的情感分析学习研究——文本挖掘

参考书籍《HuggingFace自然语言处理详解 》 什么是文本挖掘 文本挖掘&#xff08;Text mining&#xff09;有时也被称为文字探勘、文本数据挖掘等&#xff0c;大致相当于文字分析&#xff0c;一般指文本处理过程中产生高质量的信息。高质量的信息通常通过分类和预测来产生&…...

计算机网络基础——常用的中英文网络述语大全,强烈建议收藏

系统网络体系结构(System Network Architecture&#xff0c;SNA) 国际标准化组织(International Organization for Standardization&#xff0c;ISO) 开放系统互连基本参考模型(Open System Interconnection Reference Model。OSI/RM) 物理层(Physical Layer) 数据终端设备…...

c++如何自定义类及成员函数

#include <iostream>using namespace std;class Box {public:double length; // 长度double breadth; // 宽度double height; // 高度// 成员函数声明double get(void);void set( double len, double bre, double hei ); }; // 成员函数定义 double Box::get(void) …...

100G云数据中心网络建设解决方案

随着数据和流量的快速增长&#xff0c;近年来数据中心已经进入了一个全新的100G时代。为了更高效地提供包括人工智能、虚拟现实、4K视频等在内的云计算服务&#xff0c;全球范围内正在大规模建设众多大型100G数据中心&#xff0c;如云数据中心。作为一种新型高效的基础设施&…...

Zoho Desk为何受到跨境电商企业青睐:优势与特点解析

现如今&#xff0c;跨境电商已成为中国外贸发展的一支重要力量&#xff0c;正从一种新业态成长为外贸的新常态。越来越多的国内电商玩家加入了跨境电商这个战场。跨境电商自有其特殊性&#xff0c;海外客户服务不好一样惨遭投诉&#xff0c;Zoho Desk可以帮助您赢得客户满意度&…...

git 删除仓库中多余的文件或者文件夹

目录 问题 解决方案 第一步&#xff1a;同步代码 第二步&#xff1a;删除文件 第三步&#xff1a;提交 第四步&#xff1a;推送远端 问题 在项目开发测试阶段&#xff0c;将无意间将本地敏感的、或无用的文件或目录不小心提交到远程仓库&#xff0c;该怎么解决呢。 解决方…...

搭建git服务器(本地局域网)

搭建git服务器&#xff08;本地局域网&#xff09; 创建仓库 (假定在/home/git目录下创建仓库) git init --bare sample.git克隆远程仓库到本地 git clone git192.168.0.100:/home/git/sample.git已有项目&#xff0c;绑定远程仓库 # 查看远程仓库绑定 git remote -v# 解除…...

如何让营销更生动,更有效!

作为专业的营销人员&#xff0c;我们深知在当今竞争激烈的市场环境中&#xff0c;如何让自己的产品或服务脱颖而出&#xff0c;吸引更多的潜在客户&#xff0c;是企业成功的关键。而中昱维信视频短信平台&#xff0c;正是您实现这一目标的得力助手。 一、视频短信&#xff0c;…...

RestTemplate请求参数需要转义 处理

项目需求 iam的token鉴权 需要带转义的回调http路径 用以下处理参数 接口仍然返回异常&#xff1a; public String authBack(String backUrl){ // backUrl http://192.168.1.156:sdm/String state URLEncoder.encode(state, "UTF-8"); }查了一下&#xff0c;Rest…...

使用Kaptcha实现的验证码功能

目录 一.需求 二.验证码功能实现步骤 验证码 引入kaptcha依赖 完成application.yml配置文件 浏览器显示验证码 前端页面 登录页面 验证成功页面 后端 此验证码功能是以SpringBoot框架下基于kaptcha插件来实现的。 一.需求 1.页面生成验证码 2.输入验证码&#xff…...

【无标题】CTF之SQLMAP

拿这一题来说 抓个包 复制报文 启动我们的sqlmap kali里边 sqlmap -r 文件路径 --dump --dbs 数据库 --tables 表...

【Qt之Quick模块】1. 概述及Quick应用程序创建流程

概述 Qt的Quick模块是用于创建现代化、动态和响应式用户界面的工具集。它是基于QML&#xff08;Qt Meta-Object Language&#xff09;和JavaScript的。 QML是一种声明性的语言&#xff0c;用于描述用户界面的结构和行为。它使用层叠样式表&#xff08;CSS&#xff09;的语法来…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

C# 表达式和运算符(求值顺序)

求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如&#xff0c;已知表达式3*52&#xff0c;依照子表达式的求值顺序&#xff0c;有两种可能的结果&#xff0c;如图9-3所示。 如果乘法先执行&#xff0c;结果是17。如果5…...

恶补电源:1.电桥

一、元器件的选择 搜索并选择电桥&#xff0c;再multisim中选择FWB&#xff0c;就有各种型号的电桥: 电桥是用来干嘛的呢&#xff1f; 它是一个由四个二极管搭成的“桥梁”形状的电路&#xff0c;用来把交流电&#xff08;AC&#xff09;变成直流电&#xff08;DC&#xff09;。…...

Android屏幕刷新率与FPS(Frames Per Second) 120hz

Android屏幕刷新率与FPS(Frames Per Second) 120hz 屏幕刷新率是屏幕每秒钟刷新显示内容的次数&#xff0c;单位是赫兹&#xff08;Hz&#xff09;。 60Hz 屏幕&#xff1a;每秒刷新 60 次&#xff0c;每次刷新间隔约 16.67ms 90Hz 屏幕&#xff1a;每秒刷新 90 次&#xff0c;…...

大模型智能体核心技术:CoT与ReAct深度解析

**导读&#xff1a;**在当今AI技术快速发展的背景下&#xff0c;大模型的推理能力和可解释性成为业界关注的焦点。本文深入解析了两项核心技术&#xff1a;CoT&#xff08;思维链&#xff09;和ReAct&#xff08;推理与行动&#xff09;&#xff0c;这两种方法正在重新定义大模…...

无头浏览器技术:Python爬虫如何精准模拟搜索点击

1. 无头浏览器技术概述 1.1 什么是无头浏览器&#xff1f; 无头浏览器是一种没有图形用户界面&#xff08;GUI&#xff09;的浏览器&#xff0c;它通过程序控制浏览器内核&#xff08;如Chromium、Firefox&#xff09;执行页面加载、JavaScript渲染、表单提交等操作。由于不渲…...

第2篇:BLE 广播与扫描机制详解

本文是《BLE 协议从入门到专家》专栏第二篇,专注于解析 BLE 广播(Advertising)与扫描(Scanning)机制。我们将从协议层结构、广播包格式、设备发现流程、控制器行为、开发者 API、广播冲突与多设备调度等方面,全面拆解这一 BLE 最基础也是最关键的通信机制。 一、什么是 B…...

C++ 变量和基本类型

1、变量的声明和定义 1.1、变量声明规定了变量的类型和名字。定义初次之外&#xff0c;还申请存储空间&#xff0c;也可能会为变量赋一个初始值。 如果想声明一个变量而非定义它&#xff0c;就在变量名前添加关键字extern&#xff0c;而且不要显式地初始化变量&#xff1a; e…...

CCF 开源发展委员会 “开源高校行“ 暨红山开源 + OpenAtom openKylin 高校行活动在西安四所高校成功举办

点击蓝字 关注我们 CCF Opensource Development Committee CCF开源高校行 暨红山开源 openKylin 高校行 西安站 5 月 26 日至 28 日&#xff0c;CCF 开源发展委员会 "开源高校行" 暨红山开源 OpenAtom openKylin 高校行活动在西安四所高校&#xff08;西安交通大学…...

HarmonyOS-ArkUI 自定义弹窗

自定义弹窗 自定义弹窗是界面开发中最为常用的一种弹窗写法。在自定义弹窗中&#xff0c; 布局样式完全由您决定&#xff0c;非常灵活。通常会被封装成工具类&#xff0c;以使得APP中所有弹窗具备相同的设计风格。 自定义弹窗具备的能力有 打开弹窗自定义布局&#xff0c;以…...