【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,一经查实,立即删除!

相关文章

Kubernetes 文档 / 概念 / Kubernetes 架构 / 节点

Kubernetes 文档 / 概念 / Kubernetes 架构 / 节点 此文档从 Kubernetes 官网摘录 中文地址 英文地址 节点上的组件包括 kubelet、 容器运行时以及 kube-proxy。 管理 向 API 服务器添加节点的方式主要有两种: 节点上的 kubelet 向控制面执行自注册&#xff1b…

Eclipse 安装 lombok 和配置

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

基于python的动漫分析系统的设计与实现

基于python的动漫分析系统的设计与实现 Design and Implementation of an Anime Analysis System based on Python 完整下载链接:基于python的动漫分析系统的设计与实现 文章目录 基于python的动漫分析系统的设计与实现摘要第一章 绪论1.1 研究背景1.2 研究目的与意义1.3 研究…

PHP基础【介绍,注释,更改编码,赋值,数据类型】

源码 <?php //单行注释 /* 多行注释 *///通过header()函数发送http头的请求信息用来指定页面的字符集编码 header("Content-type:text/html;Charsetutf-8"); //告诉浏览器&#xff0c;当前页面的内容类型是HTML&#xff0c;并且页面内容使用的是UTF-8编码。//ph…

css 居中方法

行内元素水平居中: 行内元素指的是&#xff1a;text、image、超链接等&#xff0c;在父元素中使用如下代码&#xff1a; #parentId {text-align: center; }块级元素水平居中 块级元素指的是&#xff1a;div、h1-h6、ul等&#xff0c;在当前元素中使用如下代码&#xff0c;必…

Agent AI智能体的未来发展与挑战

Agent AI&#xff0c;作为一种具有自主感知、理解环境、决策和执行行动能力的智能体&#xff0c;正在成为AI时代业务场景的主流形式。相较于大模型&#xff0c;Agent AI更加注重对环境的感知和主动行动&#xff0c;不仅仅是依靠提示词进行交互。它具有以下核心特征&#xff1a;…

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

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

Leetcode 3137. Minimum Number of Operations to Make Word K-Periodic

Leetcode 3137. Minimum Number of Operations to Make Word K-Periodic 1. 解题思路2. 代码实现 题目链接&#xff1a;3137. Minimum Number of Operations to Make Word K-Periodic 1. 解题思路 这一题的话我们只需要将原始的字符串按照k个字母为一组进行分组&#xff0c;…

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

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

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

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

vue3—项目创建

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

Lifecycle原理,源码分析

总结&#xff1a; lifecycle内部维护了两个枚举&#xff0c;一个枚举代表生命周期&#xff0c;一个枚举代表生命周期状态&#xff0c;首先创建一个没有UI的fragment&#xff0c;这样fragmeng就可以感知activity的生命周期了&#xff0c;在fragment 的生命周期方法内通过Lifecy…

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,},} })参考

Visual Studio 2019 远程调试工具

参考网站&#xff1a; Visual Studio 2019 远程调试工具&#xff08;Remote Debugger&#xff09;使用方法-CSDN博客 vs远程调试工具&#xff08;Visual Studio2022&#xff09;-CSDN博客

手拉手springboot整合kafka

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

算法面试题目

一面 说一下 Transformer 的整体结构 了解有哪些位置编码方式吗&#xff1f; 说一下 LLaMA 中的旋转位置编码 为什么现在的大模型大多是decoder-only的架构&#xff1f; LLM中的因果语言建模与掩码语言建模有什么区别&#xff1f; 如何减轻LLM中的幻觉现象&#xff1f; 如何评估…

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;需要调…

Linux的shell外壳

Shell外壳 在计算机领域&#xff0c;“shell”&#xff08;外壳&#xff09;是指一种用户界面&#xff0c;提供了访问操作系统服务的方式。Shell 是用户与操作系统之间的桥梁&#xff0c;它解释并执行用户输入的命令。 Shell 的主要功能包括&#xff1a; 命令解释&#xff1a…