【STM32嵌入式系统设计与开发】——18DAC(DAC输出应用)

这里写目录标题

    • STM32资料包: 百度网盘下载链接:链接:https://pan.baidu.com/s/1mWx9Asaipk-2z9HY17wYXQ?pwd=8888 提取码:8888
  • 一、任务描述
  • 二、任务实施
    • 1、工程文件夹创建
    • 2、函数编辑
      • (1)主函数编辑
      • (2)ADC初始化函数(T_Adc_Init())
      • (3)设置通道1输出电压函数(Dac1_Set_Vol())
    • 3、头文件添加
    • 4、头文件编辑
    • 4、知识链接
      • (1)内部温度工作原理
      • (2)编写步骤
    • 5、工程测试


STM32资料包:
百度网盘下载链接:链接:https://pan.baidu.com/s/1mWx9Asaipk-2z9HY17wYXQ?pwd=8888
提取码:8888

一、任务描述

在这里插入图片描述

二、任务实施

观察电路图:
PA4(stm32核心板) ————————> D1
使用STM32控制DAC输出实现呼吸灯效果需要配置DAC通道和定时器。调整DAC输出值,在定时器中断或循环中实现LED亮度的渐变,模拟呼吸灯效果。调整步进和定时器频率可控制呼吸灯速度和平滑度。最终将更新的DAC值应用到通道,控制LED亮度

1、工程文件夹创建

步骤1:复制工程模板“1_Template”重命名为“14_ADC”。
在这里插入图片描述

步骤2:修改项目工程名,先删除projects文件夹内除了Template.uvprojx文件外的所有内容并修改为“DAC.uvprojx”。并删除output/obj和output/lst中的所有文件。
在这里插入图片描述

步骤3:运行“PassiveBeep.uvprojx”打开目标选项“Options for Target”中的“Output”输出文件,并修改可执行文件名称为“DAC”点击“OK”保存设置。最后点击“Rebuild”编译该工程生成Usart文件。
在这里插入图片描述

步骤4:复制2_LEDTest中的"1_LED"的“led”文件复制到hardware中
在这里插入图片描述

步骤5:在system文件夹中新建一个dac文件夹并在该文件夹下新建dac.c和dac.h两个文件
在这里插入图片描述

步骤6:工程组文件中添加“dac”文件夹内的所有文件
在这里插入图片描述
步骤7:工程组文件中添加“led”文件夹内的所有文件
在这里插入图片描述

步骤6:目标选项添加添加头文件路径。
在这里插入图片描述

2、函数编辑

(1)主函数编辑

实现一个控制DAC输出的功能,根据条件逐步调整 dacval 的值,以模拟呼吸灯效果或类似的动态模拟信号输出
请添加图片描述
步骤2:循环函数编写

	while(1){	 	delay_ms(100);                // 延时100毫秒if ((dacval == 4000) && (!j)) // 如果dacval等于4000且j为假(0)j = 1;else if (j)                   // 否则如果j为真(1){if (dacval == 200)        // 如果dacval等于200j = 0;                // 将j置为假(0)else dacval -= 200;        // 否则减少dacval的值200}else                          // 否则(dacval不等于4000且j为假)dacval += 200;            // 增加dacval的值200DAC_SetChannel1Data(DAC_Align_12b_R, dacval); // (12位右对齐格式)}	

在这里插入图片描述

(2)ADC初始化函数(T_Adc_Init())

步骤1:初始化DAC

/*********************************************************************@Function  : 初始化DAC@Parameter : N/A@Return    : N/A
**********************************************************************/
void Dac1_Init(void)
{  GPIO_InitTypeDef GPIO_InitStructure;DAC_InitTypeDef DAC_InitType;/* 使能GPIOA和DAC时钟 */RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);/* 配置GPIO引脚 */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;	      // 设置引脚4(PA4)为要配置的引脚GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;     // 设置为模拟输入模式GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 设置引脚速度为50MHzGPIO_Init(GPIOA, &GPIO_InitStructure);            // 初始化GPIOA的引脚配置为AIN模式GPIO_SetBits(GPIOA, GPIO_Pin_4);                  // 设置GPIOA的引脚4为高电平/* 配置DAC */DAC_InitType.DAC_Trigger = DAC_Trigger_None;                         // 不使用触发功能 (TEN1 = 0)DAC_InitType.DAC_WaveGeneration = DAC_WaveGeneration_None;           // 不使用波形发生DAC_InitType.DAC_LFSRUnmask_TriangleAmplitude = DAC_LFSRUnmask_Bit0; // 屏蔽、幅值设置DAC_InitType.DAC_OutputBuffer = DAC_OutputBuffer_Disable;            // 关闭DAC1输出缓存 (BOFF1 = 1)DAC_Init(DAC_Channel_1, &DAC_InitType);/* 使能DAC通道 */DAC_Cmd(DAC_Channel_1, ENABLE);/* 设置DAC通道1的数据值为0(12位右对齐格式)*/DAC_SetChannel1Data(DAC_Align_12b_R, 0);
}

在这里插入图片描述

(3)设置通道1输出电压函数(Dac1_Set_Vol())

/*********************************************************************@Function  : 设置通道1输出电压@Parameter : vol : 输出电压值@Return    : N/A@Read : vol范围:0~3300,代表0~3.3V
**********************************************************************/
void Dac1_Set_Vol(uint16_t vol)
{float temp=vol;temp/=1000;temp=temp*4096/3.3;DAC_SetChannel1Data(DAC_Align_12b_R,temp);//12位右对齐数据格式设置DAC值
}

在这里插入图片描述

3、头文件添加

步骤1:dac所需头文件添加

#include ".\dac\dac.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_dac.h"

在这里插入图片描述

4、头文件编辑

//bord.h
#ifndef __BORD_H_
#define __BORD_H_
#include "system_config.h"
#include "stm32f10x_dac.h"//头文件包含
/*************SYSTEM*****************/
/*#include ".\sys\sys.h"*/
#include ".\delay\delay.h"
#include ".\usart\usart.h"
#include ".\timer\timer.h"
#include ".\dac\dac.h"/***********Hardweare***************/
#include "led.h"/***********Funlibrary***************/#endif

在这里插入图片描述
步骤2:主函数添加函数的声明

#include "main.c"/*********************************************************************@Function  : 程序入口@Parameter : N/A@Return    : N/A
**********************************************************************/
int main(void)
{ uint8_t j=0;uint16_t dacval=200;delay_init(); //启动滴答定时器usart1_init(9600); //USART1初始化SystemTinerInit(1000-1,3600-1); //系统时间初始化 定时100msExpLEDInit();Dac1_Init();//DAC初始化delay_ms(500);DAC_SetChannel1Data(DAC_Align_12b_R,0);//初始值为0	printf("初始化成功!\r\n");while(1){	 	delay_ms(100);                // 延时100毫秒if ((dacval == 4000) && (!j)) // 如果dacval等于4000且j为假(0)j = 1;else if (j)                   // 否则如果j为真(1){if (dacval == 200)        // 如果dacval等于200j = 0;                // 将j置为假(0)else dacval -= 200;        // 否则减少dacval的值200}else                          // 否则(dacval不等于4000且j为假)dacval += 200;            // 增加dacval的值200DAC_SetChannel1Data(DAC_Align_12b_R, dacval); // (12位右对齐格式)}	
}

在这里插入图片描述

步骤2:添加STM32Temper的头文件

//STM32Temper.h
#ifndef __STM32TEMPER_H
#define __STM32TEMPER_H
#include "stdint.h"short Get_Temperature(void)	;#endif

4、知识链接

(1)内部温度工作原理

STM32内部温度传感器在芯片内部与ADCx_IN16输入通道相连接,此通道把传感器输出的电压转换成数字值,继而换算成温度值。因此,我们只需设置一下内部ADC,并激活其内部通道就可以了。
在这里插入图片描述

(2)编写步骤

1、配置ADC
2、获取某个通道值
3、内部温度传感器的值计算

5、工程测试

在这里插入图片描述

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

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

相关文章

Eclipse 安装 lombok 和配置

如 Eclipse 不配置的话&#xff0c;是没有办法编译 lombok 项目的。 下载 Jar 如果你项目使用的是 maven&#xff0c;那么 jar 应该下载下来了。 到 pom.xm 文件中找到有关 lombok 的依赖。 <dependency><groupId>org.projectlombok</groupId><artifac…

[含1-4问完整代码]2024深圳杯数模D题成品论文42页word版

基于有限元分析的音板振动模态分析与参数识别 2024深圳杯D题42页成品论文1-4小问完整代码高清结果图https://www.jdmm.cc/file/2710609 摘 要 本文针对音板振动建模与参数识别的一系列问题,采用了多种数学建模方法和求解算法,对相关问题进行了深入分析和求解。问题1的 Kirch…

unity滑动地图上气泡随之移动旋转

前言 最近在做世界地图,需要实现一个气泡提示的功能。大概描述:地图上可上下左右滑动,地图上有若干个资源点,玩家最多可开采1个资源点 当玩家有正在开采的资源点时,需要在资源点上方显示带有方向的气泡提示,当资源点滑动到 显示屏幕外时,气泡需要在可视屏幕边缘,且指向…

节能洗车房车牌识别项目实战

项目背景 学电子信息的你加入了一家节能环保企业&#xff0c;公司的主营产品是节能型洗车房。由于节水节电而且可自动洗车&#xff0c;产品迅速得到了市场和资本的认可。公司决定继续投入研发新一代产品&#xff1a;在节能洗车房的基础上实现无人值守的功能。新产品需要通过图…

vue3—项目创建

背景 初次学习vue3&#xff0c;需要从项目创建开始。 步骤 打开cmd命令行&#xff0c;进入项目存放目录下&#xff0c;执行创建命令&#xff1a; npm create vuelatest 这一指令将会安装并执行 create-vue&#xff0c;它是 Vue 官方的项目脚手架工具。你将会看到一些诸如 …

IDEA远程连接Docker服务

1.确保你的服务器已经安装docker docker安装步骤可查看&#xff1a;CentOS 9 (stream) 安装 Docker 2.安装完docker后开启远程连接 默认配置下&#xff0c;Docker daemon只能响应来自本地Host的客户端请求。如果要允许远程客户端请求&#xff0c;需要在配置文件中打开TCP监听…

vue2 webpack-dev-server Unknown promise rejection reason

在vue.config.js中添加如下配置&#xff0c;重启项目即可 module.exports defineConfig({devServer: {client: {overlay: false,},} })参考

手拉手springboot整合kafka

前期准备安装kafka 启动Kafka本地环境需Java 8以上 Kafka是一种高吞吐量的分布式发布订阅消息系统&#xff0c;它可以处理消费者在网站中的所有动作流数据。 Kafka启动方式有Zookeeper和Kraft&#xff0c;两种方式只能选择其中一种启动&#xff0c;不能同时使用。 Kafka下载…

PHP定时任务框架taskPHP3.0学习记录7宝塔面板手动可以执行自动无法执行问题排查及解决方案(sh脚本、删除超过特定天数的日志文件、kill -9)

PHP定时任务框架taskPHP3.0学习记录 PHP定时任务框架taskPHP3.0学习记录1&#xff08;TaskPHP、执行任务类的实操代码实例&#xff09;PHP定时任务框架taskPHP3.0学习记录2&#xff08;环境要求、配置Redis、crontab执行时间语法、命令操作以及Screen全屏窗口管理器&#xff0…

深入剖析Tomcat(六) Tomcat各组件的生命周期控制

Catalina中有很多组件&#xff0c;像上一章提到的四种容器&#xff0c;载入器&#xff0c;映射器等都是一种组件。每个组件在对外提供服务之前都需要有个启动过程&#xff1b;组件在销毁之前&#xff0c;也需要有个关闭过程&#xff1b;例如servlet容器关闭时&#xff0c;需要调…

字符串循环左移

#include <iostream> #include <string> using namespace std;int main() {string s1, s2;getline(cin, s1);int n;cin >> n;if(n>s1.size()){nn-s1.size();s2 s1.substr(0, n);s1.erase(0, n);cout << s1s2;}else{// 提取s1的前n个字符到s2中s2 …

MyBatis 多表映射及动态语句

三、MyBatis多表映射 3.1 多表映射概念 多表查询结果映射思路 前面说明中&#xff0c;我全面梳理了单表的mybatis操作&#xff01;但是开发中更多的是多表查询需求&#xff0c;这种情况我们如何让进行处理&#xff1f;MyBatis 思想是&#xff1a;数据库不可能永远是你所想或…

金融行业专题|信托超融合架构转型与场景探索合集

文章包含 15 信托用户基于超融合实现私有云建设、平台云下迁、信创云转型、容器云探索等场景实践分享。下载《【核心业务篇】金融核心生产业务场景探索文章合集》、《【信创转型与架构升级篇】金融核心生产业务场景探索文章合集》、《【数据库与数据仓库篇】金融核心生产业务场…

编程入门(六)【Linux系统基础操作一】

读者大大们好呀&#xff01;&#xff01;!☀️☀️☀️ &#x1f525; 欢迎来到我的博客 &#x1f440;期待大大的关注哦❗️❗️❗️ &#x1f680;欢迎收看我的主页文章➡️寻至善的主页 文章目录 &#x1f525;前言&#x1f680;Linux操作系统介绍与环境准备Linux操作系统介…

Windows远程桌面实现之十四:实现AirPlay接收端,让苹果设备(iOS,iPad等)屏幕镜像到PC端

by fanxiushu 2024-05-04 转载或引用请注明原始作者。 这个课题已经持续了好几年&#xff0c;已经可以说是很长时间了。 实现的程序是 xdisp_virt&#xff0c; 可以去github下载使用:GitHub - fanxiushu/xdisp_virt: xfsredir file system 一开始是基于测试镜像驱动的目的随便开…

Vue前端环境准备

vue-cli Vue-cli是Vue官方提供的脚手架&#xff0c;用于快速生成一个Vue项目模板 提供功能&#xff1a; 统一的目录结构 本地调试 热部署 单元测试 集成打包上线 依赖环境&#xff1a;NodeJs 安装NodeJs与Vue-Cli 1、安装nodejs&#xff08;已经安装就不用了&#xff09; node-…

linux文本三剑客之grep

目录 1、三剑客特点和应用场景 2、三件客之grep 1) -v 参数使用示例&#xff1a; 1、三剑客特点和应用场景 命令特点场景grep过滤grep命令过滤速度最快sed替换&#xff0c;修改文件内容&#xff0c;取行 如果要进替换/修改文件内容 取出某个范围的内容&#xff08;从中午12.到…

【stomp 实战】spring websocket用户消息发送源码分析

这一节&#xff0c;我们学习用户消息是如何发送的。 消息的分类 spring websocket将消息分为两种&#xff0c;一种是给指定的用户发送&#xff08;用户消息&#xff09;&#xff0c;一种是广播消息&#xff0c;即给所有用户发送消息。那怎么区分这两种消息呢?那就是用前缀了…

我们说的数据分析,到底要分析些什么?

作者 Gam 本文为CDA志愿者投稿作品 “我们说数据分析&#xff0c;到底要分析些什么&#xff1f;” 数据分析这个话题自从进入人们的视线以来&#xff0c;这个话题就成为人们茶余饭后的谈资&#xff0c;但是一千个人眼中就有一千个哈姆雷特&#xff0c;就意味着每个人对数据分…