当前位置: 首页 > article >正文

【stm32】DAC实验(stm32f4hal库)

一、DAC简介

1、DAC

        数字到模拟转换器(DAC)是一种电子设备,用于将数字信号转换为模拟信号。它通常用于将数字数据转换为模拟信号,以便在模拟电路中进行处理。DAC在许多领域都有广泛的应用,如音频设备、通信系统、仪器仪表等。通过DAC,数字系统可以与模拟电路交互,实现数字信号到模拟信号的转换。

2、DAC的特性参数

        分辨率(Resolution):指的是DAC能够产生的不同输出电压或电流的级数,通常以比特(Bit)表示。更高的分辨率意味着更精细的输出。

        量程(Full Scale Range):指的是DAC能够输出的最大和最小电压或电流范围。

        精度(Accuracy):指的是DAC输出值与理想值之间的误差。通常用百分比误差或最小刻度值来表示。

        电压和电流输出:DAC可以输出电压或电流信号,具体取决于应用需求。

        更新速度(Update Rate):指的是DAC在单位时间内可以更新输出值的次数。

        温度稳定性(Temperature Stability):DAC在不同温度下输出稳定性的能力。

        线性度(Linearity):指DAC输出值与输入值之间的直线关系程度。较高的线性度表示输出值与输入值更接近直线关系。

        功耗(Power Consumption):DAC的工作时所消耗的电能。

3、DAC 通道框图

二、stm32f4——DAC寄存器介绍

1、控制寄存器 (DAC_CR)

偏移地址: 0x00
复位值: 0x0000 0000

2、软件触发寄存器 (DAC_SWTRIGR)

偏移地址: 0x04
复位值: 0x0000 0000

3、1 通道 12 位右对齐数据保持寄存器 (DAC_DHR12R1)

偏移地址: 0x08
复位值: 0x0000 0000

4、1 通道 12 位左对齐数据保持寄存器 (DAC_DHR12L1)

偏移地址:0x0C
复位值: 0x0000 0000

5、1 通道 8 位右对齐数据保持寄存器 (DAC_DHR8R1)

偏移地址: 0x10
复位值: 0x0000 0000

6、2 通道 12 位右对齐数据保持寄存器 (DAC_DHR12R2)

偏移地址: 0x14
复位值: 0x0000 0000

7、2 通道 12 位左对齐数据保持寄存器 (DAC_DHR12L2)

偏移地址: 0x18
复位值: 0x0000 0000

8、2 通道 8 位右对齐数据保持寄存器 (DAC_DHR8R2)

偏移地址: 0x1C
复位值: 0x0000 0000

9、 DAC 12 位右对齐数据保持寄存器 (DAC_DHR12RD)

偏移地址: 0x20
复位值: 0x0000 0000

10、 DAC 12 位左对齐数据保持寄存器 (DAC_DHR12LD)

偏移地址: 0x24
复位值: 0x0000 0000

11、 DAC 8 位右对齐数据保持寄存器 (DAC_DHR8RD)

偏移地址: 0x28
复位值: 0x0000 0000

12、1 通道数据输出寄存器 (DAC_DOR1)

偏移地址: 0x2C
复位值: 0x0000 0000

13、2 通道数据输出寄存器 (DAC_DOR2)

偏移地址: 0x30
复位值: 0x0000 0000

14、状态寄存器 (DAC_SR)

偏移地址: 0x34
复位值: 0x0000 0000

三、HAL库相关API

1、HAL_DAC_Init()

功能:配置DAC工作状态

2、HAL_DAC_MspInit()

功能:配置NVIC、GPIO初始化代码

3、HAL_DAC_ConfigChannel()

功能:配置DAC相应通道的相关参数

4、HAL_DAC_Start

功能:启动DAC

5、HAL_DAC_SetValue()

功能:设置输出模拟量

6、HAL_DAC_GetValue()

功能:读取通道输出数字量

四、示例代码

1、DAC输出指定电压

#include "DAC.h"

DAC_HandleTypeDef DAC1_Initstructure;

void DAC_Init(void)
{
	DAC1_Initstructure.Instance = DAC;
	
	HAL_DAC_Init(&DAC1_Initstructure);
	
	DAC_ChannelConfTypeDef DAC_Channel;
	DAC_Channel.DAC_OutputBuffer = DAC_TRIGGER_NONE;//DAC触发源
	DAC_Channel.DAC_Trigger = DAC_OUTPUTBUFFER_DISABLE;//DAC通道输出缓冲区
	HAL_DAC_ConfigChannel(&DAC1_Initstructure,&DAC_Channel,DAC_CHANNEL_1);//配置DAC通道
	
	HAL_DAC_Start(&DAC1_Initstructure,DAC_CHANNEL_1);//开启DAC
}

void HAL_DAC_MspInit(DAC_HandleTypeDef *hdac)
{
	if(hdac->Instance == DAC)
	{
		__HAL_RCC_DAC_CLK_ENABLE();//开启DAC的时钟
		__HAL_RCC_GPIOA_CLK_ENABLE();//开启GPIOA的时钟
		
		GPIO_InitTypeDef GPIO_InitStructure;
		GPIO_InitStructure.Mode = GPIO_MODE_ANALOG;//GPIO模式为模拟
		GPIO_InitStructure.Pin = GPIO_PIN_4;
		
		HAL_GPIO_Init(GPIOA,&GPIO_InitStructure);
	}
}

/* Vol 取值范围 : 0 - 3300*/
void Set_Voltage(uint16_t Vol)
{
	double temp = Vol;
	temp /= 1000;
	temp = temp * 4096 / 3.3;
	if(temp >= 4096) temp = 4095;
	HAL_DAC_SetValue(&DAC1_Initstructure,DAC_CHANNEL_1,DAC_ALIGN_12B_R,temp);
}

http://www.kler.cn/a/551498.html

相关文章:

  • Redis 全方位解析:从入门到实战
  • 在 Ubuntu Linux 环境下安装 Maven
  • 基于微信小程序的电影院订票选座系统的设计与实现,SSM+Vue+毕业论文+开题报告+任务书+指导搭建视频
  • VPN 的入门介绍,网络安全零基础入门到精通实战教程!
  • 前端工程化的具体实现细节
  • HTTP 核心概念
  • 想在日本上线订货系统 推荐核货宝日文版
  • 30 款 Windows 和 Mac 下的复制粘贴软件对比
  • hive(hdfs)补数脚本
  • Token Statistics Transformer:线性注意力革命,重新定义Transformer效率天花板
  • GPT-4o悄然升级:能力与个性双突破,AI竞技场再掀波澜
  • Brave132编译指南 MacOS篇 - 编译环境配置(四)
  • 23种设计模式 - 策略模式
  • 【力扣】100.岛屿数量
  • ChatBox对接DeepSeek R1大模型
  • 分享一款AI绘画图片展示和分享的小程序
  • 3.9 用户反馈智能分析实战:从情感识别到产品优化的闭环设计指南
  • 数据分析--数据清洗
  • SpringCloud面试题----eureka和zookeeper都可以提供服务注册与发现的功能,请说说两个的区别
  • Python + Selenium —— 下拉菜单处理!