【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);
}