STM32G4的数模转换器(DAC)的应用

embedded/2024/11/20 17:35:54/

目录

概述

1 DAC模块介绍

2 STM32Cube配置参数

2.1 参数配置

 2.2 项目架构

3 代码实现 

3.1 接口函数

3.2 功能函数 

3.3 波形源代码

4 DAC功能测试

4.1 测试方法介绍

4.2 波形测试


概述

本文主要介绍如何使用STM32G4的DAC模块功能,笔者使用STM32Cube工具配置DAC模块的参数,并使用HAL提供的函数接口验证DAC输出模拟量的功能。

1 DAC模块介绍

请参看原文:

STM32G4的数模转换器(DAC)功能介绍-CSDN博客

2 STM32Cube配置参数

2.1 参数配置

1) 选择通道

选择DAC1模块,其对应的IO接口为:

DAC1_OUT_PIN:   PA4

2)配置参数

使能如下参数

 2.2 项目架构

完成2.1节参数配置后,就可以生成项目,其程序架构如下:

3 代码实现 

3.1 接口函数

使用STM32Cube工具生成的代码已经完成DAC模块的初始化功能,程序员只实现DAC的输入数据接口

代码29行:DAC数据的输入接口

3.2 功能函数 

1)生成反正弦波函数

2)生成正弦函数

3) 三角波函数

3.3 波形源代码

/* USER CODE BEGIN Header */
/********************************************************************************* File Name        :  waveLib.c* Description      :  main task ******************************************************************************* @attention*
* COPYRIGHT:    Copyright (c) 2024  tangmingfei2013@126.com* CREATED BY:   mingfei.tang
* DATE:         JUL 05th, 2024*******************************************************************************/
/* USER CODE END Header */
#include "waveLib.h"
#include "dac.h"
#include <stdio.h> 
#include <string.h>
#include <stdbool.h>
#include <math.h>#define PI    3.14159void DAC_SetConvert( uint32_t value)
{HAL_DAC_SetValue( &hdac1, DAC_CHANNEL_1, DAC_ALIGN_12B_R,value );
}float dac_triangle_wave( void )
{static double t = -1;float value, angle;if( t >= 1 ){t = -1;}t += 0.001;angle = t*1000;return  angle;
}float asin_wave( void )
{static double t = -1;float value, angle;if( t >= 1 ){t = -1;}value = asin( t ); angle = (180*value)/3.1415926;t += 0.001;return  angle;
}float sin_wave( void )
{float value, angle;static double t = -1;angle = 2*PI*t;value = 100*sin( angle ); t += 0.001;if( t >= 1 ){t = -1;}return  value;
}/* End of this file */

4 DAC功能测试

4.1 测试方法介绍

使用DAC模块输出模拟波形,ADC模块采样该波形数据

代码66行: 设置原始波形数据

代码68行: 配置DAC数据

代码76行:显示原始波形数据

源代码文件

void Debug_adcLog( void )
{float value;value = 200+ dac_triangle_wave();// dac_triangle_wave();DAC_SetConvert(value);if( bl_ready ){bl_ready = false;adc1_value_list[2] = value;// asin wave adc1_value_list[3] = dac_triangle_wave();Debug_PrintfJustFloat( pADC_ValList, ADC_TOTAL_CH );}
}

4.2 波形测试

 1)正弦波形测试

2)反正弦波测试

 原始波形:

ADC采样的波形

 3)三角波测试

原始波形

ADC采样的波形

 


http://www.ppmy.cn/embedded/139133.html

相关文章

在MacOS中Finder中通过路径来导航

在Windows中&#xff0c;可以直接在资源管理器的地址栏中输入路径来转到指定位置。 然后换到MacOS中却发现&#xff0c;Finder中没有地址栏。 那怎么转到指定位置呢&#xff1f;快捷键&#xff1a;cmdshiftg 然后粘贴地址&#xff0c;按回车&#xff0c;转到指定地址。 同W…

一文详解架构分层

架构 - 理解构架的分层 技术框架&#xff08;technological Framework&#xff09;是整个或部分技术系统的可重用设计&#xff0c;表现为一组抽象构件及构件实例间交互的方法。于开发者而言&#xff0c;实际工作从通常采用的是分层模型&#xff0c;这里独立一个章节&#xff0c…

android SQLiteOpenHelper 什么时候需要使用到事务

SQLiteOpenHelper 是不是只有在插入数据、修改数据的时候需要使用事务&#xff0c;删除数据和查询数据的是否也需要开启事务? 在Android开发中&#xff0c;使用SQLiteOpenHelper类管理数据库事务时&#xff0c;事务的使用主要是为了确保数据的完整性和一致性。事务可以在执行…

【VIM】vim 常用命令

文章目录 插入模式光标移动拷贝/粘贴/删除/撤销块操作分屏代码缩进命令组合使用其他 前言&#xff1a;本文内容大部分摘抄自酷壳和博客园   –   CoolShell – 陈皓   博客园 – 易先讯 插入模式 a → 在光标后插入o → 在当前行后插入一个新行O → 在当前行前插入一个新…

蓝桥杯每日真题 - 第16天

题目&#xff1a;&#xff08;卡牌&#xff09; 题目描述&#xff08;13届 C&C B组C题&#xff09; 解题思路&#xff1a; 题目分析&#xff1a; 有 n 种卡牌&#xff0c;每种卡牌的现有数量为 a[i]&#xff0c;所需的最大数量为 b[i]&#xff0c;还有 m 张空白卡牌。 每…

生成式人工智能(AIGC)在软件开发设计模式课程教学中的应用

一、引言 软件设计模式作为软件工程领域的核心组成部分&#xff0c;对于提升软件系统的质量和可维护性至关重要。然而&#xff0c;传统的软件设计模式课程教学方法面临着诸多挑战&#xff0c;例如教师准备教学案例的过程繁琐&#xff0c;学生理解和应用具体案例难度较大&#…

网络工程实验四:NAT的配置

#实验仅供参考&#xff0c;勿直接粘贴复制&#xff0c;用以学习交流# #对于软件的使用&#xff0c;请移步到实验一观看# 1、实验目的&#xff1a; &#xff08;1&#xff09;掌握网络地址转换的工作原理。 &#xff08;2&#xff09;掌握配置静态NAT和NAPT的方法。、 2、实…

Conda 安装纯净版ComfyUI

网上有很多整合包&#xff0c; 我个人喜欢纯净版&#xff0c; 自已搭建 1 拉代码 git clone https://github.com/comfyanonymous/ComfyUI 如果没有装过git,下载安装: https://git-scm.com/ https://git-lfs.com/ 2 创建环境 cd ComfyUI conda create -n ComfyUI python3.11…