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

2024-05-06 23:20

本文主要是介绍【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、工程测试

在这里插入图片描述

这篇关于【STM32嵌入式系统设计与开发】——18DAC(DAC输出应用)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/965672

相关文章

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

CentOS系统Maven安装教程分享

《CentOS系统Maven安装教程分享》本文介绍了如何在CentOS系统中安装Maven,并提供了一个简单的实际应用案例,安装Maven需要先安装Java和设置环境变量,Maven可以自动管理项目的... 目录准备工作下载并安装Maven常见问题及解决方法实际应用案例总结Maven是一个流行的项目管理工具

基于Python开发PPTX压缩工具

《基于Python开发PPTX压缩工具》在日常办公中,PPT文件往往因为图片过大而导致文件体积过大,不便于传输和存储,所以本文将使用Python开发一个PPTX压缩工具,需要的可以了解下... 目录引言全部代码环境准备代码结构代码实现运行结果引言在日常办公中,PPT文件往往因为图片过大而导致文件体积过大,

5分钟获取deepseek api并搭建简易问答应用

《5分钟获取deepseekapi并搭建简易问答应用》本文主要介绍了5分钟获取deepseekapi并搭建简易问答应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1、获取api2、获取base_url和chat_model3、配置模型参数方法一:终端中临时将加

使用DeepSeek API 结合VSCode提升开发效率

《使用DeepSeekAPI结合VSCode提升开发效率》:本文主要介绍DeepSeekAPI与VisualStudioCode(VSCode)结合使用,以提升软件开发效率,具有一定的参考价值... 目录引言准备工作安装必要的 VSCode 扩展配置 DeepSeek API1. 创建 API 请求文件2.

使用TomCat,service输出台出现乱码的解决

《使用TomCat,service输出台出现乱码的解决》本文介绍了解决Tomcat服务输出台中文乱码问题的两种方法,第一种方法是修改`logging.properties`文件中的`prefix`和`... 目录使用TomCat,service输出台出现乱码问题1解决方案问题2解决方案总结使用TomCat,

JavaScript中的isTrusted属性及其应用场景详解

《JavaScript中的isTrusted属性及其应用场景详解》在现代Web开发中,JavaScript是构建交互式应用的核心语言,随着前端技术的不断发展,开发者需要处理越来越多的复杂场景,例如事件... 目录引言一、问题背景二、isTrusted 属性的来源与作用1. isTrusted 的定义2. 为

C#实现系统信息监控与获取功能

《C#实现系统信息监控与获取功能》在C#开发的众多应用场景中,获取系统信息以及监控用户操作有着广泛的用途,比如在系统性能优化工具中,需要实时读取CPU、GPU资源信息,本文将详细介绍如何使用C#来实现... 目录前言一、C# 监控键盘1. 原理与实现思路2. 代码实现二、读取 CPU、GPU 资源信息1.

Python调用另一个py文件并传递参数常见的方法及其应用场景

《Python调用另一个py文件并传递参数常见的方法及其应用场景》:本文主要介绍在Python中调用另一个py文件并传递参数的几种常见方法,包括使用import语句、exec函数、subproce... 目录前言1. 使用import语句1.1 基本用法1.2 导入特定函数1.3 处理文件路径2. 使用ex