STM32F407VET6 学习笔记4:DAC数模转换功能的配置

2024-05-25 13:52

本文主要是介绍STM32F407VET6 学习笔记4:DAC数模转换功能的配置,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 今日继续学习使用嘉立创的 立创梁山派天空星,芯片是 STM32F407VET6 使用库函数编程

最近突然发现很久没有接触过单片机的AD转换功能了,之前还是学习51单片机时学习驱动PCF8591芯片实现AD转换功能的,还从未在STM32平台上进行过相关的实验经验,这就学习一下

文章提供测试代码讲解、完整工程下载、测试效果图

 

目录

DAC转换:

DAC相关标准库函数:

DAC初始化结构体:

其余相关函数:

初始化DAC:

测试效果图:

测试工程下载:

网上查阅资料:


 

DAC转换:

DAC 模块是 12 位电压输出数模转换器。 在 12 位模式下,数据可以采用左对齐或右对齐。DAC 有两个输出通道,每个通道各有一个转换器。在 DAC 双通道模式下,每个通道可以单独进行转换;当两个通道组合在一起同步执行更新操作时,也可以同时进行转换。

以下为 STM32F4xx中文参考手册 288页DAC简介

以下为STM32F4xx中文参考手册 289页的DAC通电框图与DAC引脚:

经过线性转换后,数字输入会转换为 0 到 V REF+ 之间的输出电压。

各 DAC 通道引脚的模拟输出电压通过以下公式确定:

 

DAC相关标准库函数:

相关标准库函数定义在  #include "stm32f4xx_dac.h"

具体函数定义实现去这个文件中查阅

DAC初始化结构体:

typedef struct
{
/*
这个字段用于配置DAC的触发源。例如,DAC的输出可以由一个定时器(TIM)或其他外部事件触发。
可能的值包括DAC_Trigger_None(无触发)、DAC_Trigger_T2_TRGO(由TIM2的触发输出触发)等。
*/uint32_t DAC_Trigger;                     
/*这个字段用于配置DAC是否生成噪声波或三角波。可能的值包括DAC_WaveGeneration_None(不生成波形)、DAC_WaveGeneration_Noise(生成噪声波)和DAC_WaveGeneration_Triangle(生成三角波)。*/uint32_t DAC_WaveGeneration;               
/*当DAC_WaveGeneration设置为DAC_WaveGeneration_Noise时,
这个字段用于配置线性反馈移位寄存器(LFSR)的未屏蔽位,它决定了噪声波的分辨率。
当DAC_WaveGeneration设置为DAC_WaveGeneration_Triangle时,这个字段用于配置三角波的幅度。*/uint32_t DAC_LFSRUnmask_TriangleAmplitude; 
/*这个字段用于配置DAC的输出缓冲。输出缓冲通常用于减少DAC输出的噪声和失真。可能的值包括DAC_OutputBuffer_Enable(启用输出缓冲)和DAC_OutputBuffer_Disable(禁用输出缓冲)。
*/uint32_t DAC_OutputBuffer;                 
}DAC_InitTypeDef;

 

其余相关函数:

void DAC_StructInit(DAC_InitTypeDef* DAC_InitStruct)

是一个用于初始化 DAC_InitTypeDef 结构体的辅助函数。该函数通常在你想要将 DAC_InitTypeDef 结构体设置为默认值时使用,而不是手动为每个字段赋值。这样做的好处是,你可以快速地将结构体重置为已知的默认状态,然后再根据需要更改某些字段的值。

要使用这个函数,可以定义一个 DAC_InitTypeDef 类型的变量,然后调用 DAC_StructInit 函数来初始化它:

DAC_InitTypeDef DAC_InitStruct;  // 初始化DAC_InitStruct结构体为默认值  DAC_StructInit(&DAC_InitStruct);  

void DAC_Cmd(uint32_t DAC_Channel, FunctionalState NewState)

用于启用或禁用STM32微控制器上特定DAC(数字到模拟转换器)通道的函数。该函数接受两个参数:DAC_ChannelNewState

DAC_Channel 指定了要操作的DAC通道(例如,可能是通道1或通道2,取决于具体的STM32型号),

NewState 则是一个枚举值,表示是启用(ENABLE)还是禁用(DISABLE)DAC通道。

void DAC_SoftwareTriggerCmd(uint32_t DAC_Channel, FunctionalState NewState)

DAC_SoftwareTriggerCmd 函数是用于通过软件触发来启动或停止DAC(数字到模拟转换器)转换的函数。这个函数通常在DAC配置为软件触发模式时使用,允许应用程序通过软件命令来启动DAC的转换过程,而不是依赖于外部硬件事件或时钟。

函数接受两个参数:

  • DAC_Channel:指定了要操作的DAC通道。这通常是一个枚举值,表示DAC的某个特定通道(例如,通道1、通道2等,具体取决于STM32的型号和配置)。
  • NewState:表示DAC软件触发功能的启用(ENABLE)或禁用(DISABLE)状态。这也是一个枚举值,通常与FunctionalState类型相关。

void DAC_DualSoftwareTriggerCmd(FunctionalState NewState)

该函数用于通过软件触发来同时启动或停止DAC(数字到模拟转换器)的两个通道(通常指的是STM32微控制器上的DAC1和DAC2)。函数接受一个FunctionalState类型的参数NewState,用于指示是否启用软件触发。

 void DAC_SetChannel1Data(uint32_t DAC_Align, uint16_t Data)

该函数用于设置DAC(数字到模拟转换器)通道1的数据。函数接受两个参数:DAC_AlignData

  • DAC_Align:指定数据对齐方式,例如右对齐(通常是12位数据)或左对齐(可能是12位或8位数据,取决于具体的DAC配置)。
  • Data:要写入DAC通道1的数据。

void DAC_SetChannel2Data(uint32_t DAC_Align, uint16_t Data)

与上同,只不过是设置DAC2

void DAC_SetDualChannelData(uint32_t DAC_Align, uint16_t Data2, uint16_t Data1)

设置DAC的两个通道(通常是DAC通道1和通道2)的数据。该函数接受三个参数:数据对齐方式DAC_Align,以及两个数据值Data2Data1,分别对应DAC通道2和通道1。

 uint16_t DAC_GetDataOutputValue(uint32_t DAC_Channel)

该函数旨在读取DAC(数字到模拟转换器)特定通道的输出值。然而,需要注意的是,DAC本身并不直接提供一个“数据输出值”的寄存器来读取当前的模拟输出值,因为DAC是一个数字到模拟的转换器,其输出是模拟信号。

void DAC_DMACmd(uint32_t DAC_Channel, FunctionalState NewState)

是用来控制DAC(数字到模拟转换器)的DMA(直接内存访问)功能的。它接受两个参数:DAC_Channel(要控制的DAC通道)和NewState(表示DMA功能的新状态,如开启或关闭)。

void DAC_ITConfig(uint32_t DAC_Channel, uint32_t DAC_IT, FunctionalState NewState) 

该函数用于配置DAC(数字到模拟转换器)的中断。它接受三个参数:DAC_Channel(要配置的DAC通道)、DAC_IT(要配置的中断类型)和NewState(表示中断的新状态,如开启或关闭)。

初始化DAC:

//DAC通道1输出初始化 PA4
void Dac1_Init(void)
{  GPIO_InitTypeDef  GPIO_InitStructure;DAC_InitTypeDef DAC_InitType;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);//使能GPIOA时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC,ENABLE);//使能DAC时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;GPIO_InitStructure.GPIO_Mode =GPIO_Mode_AN;//模拟输入GPIO_InitStructure.GPIO_PuPd =GPIO_PuPd_DOWN;//下拉GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化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=1DAC_Init(DAC_Channel_1,&DAC_InitType);       //初始化DAC通道1DAC_Cmd(DAC_Channel_1, ENABLE);  //使能DAC通道1DAC_SetChannel1Data(DAC_Align_12b_R, 0);  //12位右对齐数据格式设置DAC值
}
//设置通道1输出电压
//vol:0~3300,代表0~3.3V
void Dac1_Set_Vol(u16 vol)
{double temp=vol;temp/=1000;temp=temp*4096/3.3;DAC_SetChannel1Data(DAC_Align_12b_R,temp);//12位右对齐数据格式设置DAC值
}

 

测试效果图:

 dac_value 设置为 3000 时的输出:

 dac_value 设置为 2000 时的输出:

 

测试工程下载:

https://download.csdn.net/download/qq_64257614/89354623

 

网上查阅资料:

STM32CUBEIDE-F407(6)-DAC输出_cubeide dac-CSDN博客

洋桃电子STM32F407单片机入门教程笔记八:DAC数模转换功能_dac setvalue-CSDN博客

【stm32f407】DAC实验_stm32f407 dac程序库函数-CSDN博客

这篇关于STM32F407VET6 学习笔记4:DAC数模转换功能的配置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

Nginx中配置使用非默认80端口进行服务的完整指南

《Nginx中配置使用非默认80端口进行服务的完整指南》在实际生产环境中,我们经常需要将Nginx配置在其他端口上运行,本文将详细介绍如何在Nginx中配置使用非默认端口进行服务,希望对大家有所帮助... 目录一、为什么需要使用非默认端口二、配置Nginx使用非默认端口的基本方法2.1 修改listen指令

基于Java和FFmpeg实现视频压缩和剪辑功能

《基于Java和FFmpeg实现视频压缩和剪辑功能》在视频处理开发中,压缩和剪辑是常见的需求,本文将介绍如何使用Java结合FFmpeg实现视频压缩和剪辑功能,同时去除数据库操作,仅专注于视频处理,需... 目录引言1. 环境准备1.1 项目依赖1.2 安装 FFmpeg2. 视频压缩功能实现2.1 主要功

使用Python实现无损放大图片功能

《使用Python实现无损放大图片功能》本文介绍了如何使用Python的Pillow库进行无损图片放大,区分了JPEG和PNG格式在放大过程中的特点,并给出了示例代码,JPEG格式可能受压缩影响,需先... 目录一、什么是无损放大?二、实现方法步骤1:读取图片步骤2:无损放大图片步骤3:保存图片三、示php

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

深度解析Python yfinance的核心功能和高级用法

《深度解析Pythonyfinance的核心功能和高级用法》yfinance是一个功能强大且易于使用的Python库,用于从YahooFinance获取金融数据,本教程将深入探讨yfinance的核... 目录yfinance 深度解析教程 (python)1. 简介与安装1.1 什么是 yfinance?

Python脚本轻松实现检测麦克风功能

《Python脚本轻松实现检测麦克风功能》在进行音频处理或开发需要使用麦克风的应用程序时,确保麦克风功能正常是非常重要的,本文将介绍一个简单的Python脚本,能够帮助我们检测本地麦克风的功能,需要的... 目录轻松检测麦克风功能脚本介绍一、python环境准备二、代码解析三、使用方法四、知识扩展轻松检测麦

mysql5.7.15winx64配置全过程

《mysql5.7.15winx64配置全过程》文章详细介绍了MySQL5.7.15免安装版的配置步骤,包括解压安装包、设置环境变量、修改配置文件、初始化数据目录、安装服务、启动数据库、登录及密码修改... 目录前言一、首先下载安装包二、安android装步骤1.第一步解压文件2.配置环境变量3.复制my-

Java实现TXT文件导入功能的详细步骤

《Java实现TXT文件导入功能的详细步骤》在实际开发中,很多应用场景需要将用户上传的TXT文件进行解析,并将文件中的数据导入到数据库或其他存储系统中,本文将演示如何用Java实现一个基本的TXT文件... 目录前言1. 项目需求分析2. 示例文件格式3. 实现步骤3.1. 准备数据库(假设使用 mysql

Jenkins的安装与简单配置过程

《Jenkins的安装与简单配置过程》本文简述Jenkins在CentOS7.3上安装流程,包括Java环境配置、RPM包安装、修改JENKINS_HOME路径及权限、启动服务、插件安装与系统管理设置... 目录www.chinasem.cnJenkins安装访问并配置JenkinsJenkins配置邮件通知

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.