问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

蓝桥杯嵌入式开发:STM32G431R8T6的ADC和DAC实验教程

创作时间:
作者:
@小白创作中心

蓝桥杯嵌入式开发:STM32G431R8T6的ADC和DAC实验教程

引用
1
来源
1.
http://www.liustu.com.cn/index.php/2025/02/20/stm32adda/

本文将介绍如何使用STM32G431R8T6开发板实现ADC(模数转换)和DAC(数模转换)功能。通过CubeMX进行硬件配置,并提供完整的C代码实现,帮助读者掌握ADC和DAC的基本使用方法。

本次实验使用的是蓝桥杯嵌入式大赛的指定开发板,STM32G431R8T6。

CubeMX配置

ADC部分

设置引脚选择ADC模式,对应通道选择“Single-ended”(单端输出)。其他默认即可。

DAC部分

DAC选择“仅与外部引脚相连”。

生成代码

ad.c

#include "ad.h"

/* ADC读取函数
 * 参数 AD结构体的变量
 * 返回值 AD读取到的电压(0-3.3V)
 */
double ADC_GetValue(ADC_HandleTypeDef* adcHandle)
{
    /* 保存从AD寄存器中读取到的数值 */
    unsigned int value;
    HAL_ADC_Start(adcHandle);
    /* 读取ADC中寄存器的值 */
    value = HAL_ADC_GetValue(adcHandle);
    /* 数据处理,转化为电压值 */
    return value * 3.3 / 4095;
}

/* DAC输出函数
 * 参数 DAC结构体、通道值、数据对其格式、输出的电压值
 */
void DAC_OUT(DAC_HandleTypeDef* dacHandle, uint32_t Channel, uint32_t Alignment, double value)
{
    uint32_t v_data;
    /* 开启DAC输出 */
    HAL_DAC_Start(dacHandle, Channel);
    /* DAC输出 */
    v_data = value / 3.3 * 4096;
    HAL_DAC_SetValue(dacHandle, Channel, Alignment, v_data);
    /* DAC关闭 */
    HAL_DAC_Stop(dacHandle, Channel);
}

ad.h

#ifndef __AD_H_
#define __AD_H_
#include "main.h"

double ADC_GetValue(ADC_HandleTypeDef* adcHandle);
void DAC_OUT(DAC_HandleTypeDef* dacHandle, uint32_t Channel, uint32_t Alignment, double value);

#endif

主函数功能验证部分

while (1)  
{  
    /* ADC数据采集显示 */  
    adc1_value = ADC_GetValue(&hadc1);  
    adc2_value = ADC_GetValue(&hadc2);  
    sprintf(lcd_string,"ADC1 = %.3f",adc2_value);  
    LCD_DisplayStringLine(Line1, (unsigned char *)lcd_string);  
    sprintf(lcd_string,"ADC2 = %.3f",adc1_value);  
    LCD_DisplayStringLine(Line2, (unsigned char *)lcd_string);  

    /* 将采集到的ADC电压通过DAC输出 */
    DAC_OUT(&hdac1,DAC_CHANNEL_1,DAC_ALIGN_12B_R,adc1_value);
    sprintf(lcd_string,"PA4 DAC = %.3f",adc2_value);
    LCD_DisplayStringLine(Line3, (unsigned char *)lcd_string);  
}

演示教程视频

【B 站链接 —— 备战 2025 蓝桥杯 —— 嵌入式】ADC、DAC

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号