STM32 DAC+串口

news/2024/11/13 4:14:05/

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

文章目录

  • 前言
  • 一、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 的检测。


http://www.ppmy.cn/news/1272463.html

相关文章

UWB物资标签物资追踪

UWB(Ultra-Wideband,超宽带)技术在物联网领域的应用日益广泛,其中,UWB物资标签作为其重要组成部分,在实现物资追踪、管理和定位方面发挥着关键作用。本文将详细介绍UWB物资标签的工作原理、特点、应用领域以…

mongodb之mongoTemplate基本操作

mongoTemplate基本操作 前提&#xff1a;已安装好mongodb服务 架构&#xff1a;springbootmongodb 1.引入依赖&#xff08;二选一&#xff09; // maven添加依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot…

Qt/C++视频监控安卓版/多通道显示视频画面/录像存储/视频播放安卓版/ffmpeg安卓

一、前言 随着监控行业的发展&#xff0c;越来越多的用户场景是需要在手机上查看监控&#xff0c;而之前主要的监控系统都是在PC端&#xff0c;毕竟PC端屏幕大&#xff0c;能够看到的画面多&#xff0c;解码性能也强劲。早期的手机估计性能弱鸡&#xff0c;而现在的手机性能不…

第15章 《乐趣》Page305~311, 代码精简以后,讨论一下引用含义的问题

将Page305~311的代码精简了一下&#xff0c;讨论一下引用含义的问题&#xff0c;精简之后的代码如下&#xff1a; #include <iostream> #include <SDL2/SDL.h>using namespace std;namespace sdl2 {char const* last_error() {return SDL_GetError(); }struct Ini…

【PostgreSQL】从零开始:(二)PostgreSQL下载与安装

【PostgreSQL】从零开始:&#xff08;二&#xff09;PostgreSQL下载与安装 Winodws环境下载与安装PostgreSQL下载PostgreSQL安装PostgreSQL1.登录数据库2.查看下我们已有的数据库 Liunx环境下载与安装PostgreSQL使用YUM下载安装PostgreSQL1.下载PostgreSQL安装包2.安装PostgreS…

Docker构建镜像时空间不足:/var/lib/docker,no space left on device

背景 在一次更新业务服务功能后&#xff0c;重新在服务器上构建微服务镜像&#xff0c;在构建镜像时报错空间不足&#xff1a; /var/lib/docker, no space left on device 赶紧用 df -h 看了下磁盘使用情况&#xff0c;果然&#xff0c; devicemapper 已经满了。。由于需要紧急…

Java Wait Notify

概念 所有对象继承Object方法 用于同步资源锁控制等待以及唤醒 Demo&#xff1a; Message 类同步资源 Waiter 持有Msg&#xff0c;New两个线程Waiter等待 Notifier 持有Msg&#xff0c;通过Msg通知Waiter线程继续 实战 package com.example.demo.java.base.wait;/*** messa…

搭建消息时光机:深入探究RabbitMQ_recent_history_exchange在Spring Boot中的应用【RabbitMQ实战 二】

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 搭建消息时光机&#xff1a;深入探究RabbitMQ_recent_history_exchange在Spring Boot中的应用 引言前言第一&#xff1a;开启插件支持第二&#xff1a;springboot整合第三&#xff1a;效果展示交换机属…