目录
概述
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.14159
void 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采样的波形