深入解析STM32中的DAC模块

目录

  • DAC特点简介
  • 框图
  • DAC功能描述
  • DAC转换
  • DAC数据格式
  • DAC外部触发源
  • 输出电压计算
  • 输出缓存区
  • 实验
  • DAC特点简介

  • 数字/模拟转换模块(DAC)是12位数字输入,电压输出的数字/模拟转换器。
  • DAC输出可以配置为8位或12位模式,也可以与DMA控制器配合使用。
  • DAC工作在12位模式时,数据可以设置成左对齐或右对齐。
  • DAC模块有2个输出通道,每个通道都有单独的转换器。
  • 在双DAC模式下,2个通道可以独立地进行转换,也可以同时进行转换并同步地更新2个通道的输出。
  • DAC可以通过引脚输入参考电压VREF+以获得更精确的转换结果。
  • 框图

    DAC框图
    DAC引脚

    DAC功能描述

    DAC转换

  • 不能直接对寄存器DAC_DORx写入数据,任何输出到DAC通道x的数据都必须写入DAC_DHRx寄存器(数据实际写入DAC_DHR8Rx、DAC_DHR12Lx、DAC_DHR12Rx、DAC_DHR8RD、
    DAC_DHR12LD、或者DAC_DHR12RD寄存器)。
  • 如果选中软件触发(寄存器DAC_CR1的TENx位置’0’),那么存入寄存器DAC_DHRx的数据会在一个APB1时钟周期后自动传至寄存器DAC_DORx。
  • 如果选中硬件触发(寄存器DAC_CR1的TENx位置’1’),那么数据传输在触发发生以后3个APB1时钟周期后完成。
  • 一旦数据从DAC_DHRx寄存器装入DAC_DORx寄存器,在经过时间tSETTLING之后,输出即有效,这段时间的长短依电源电压和模拟输出负载的不同会有所变化
    延时时间
  • DAC数据格式

    根据选择的配置模式,数据按照下文所述写入指定的寄存器:

  • 单通道有3种情况:

  • 8位数据右对齐:用户须将数据写入寄存器DAC_DHR8Rx[7:0]位(实际是存入寄存器DHRx[11:4]位)
  • 12位数据左对齐:用户须将数据写入寄存器DAC_DHR12Lx[15:4]位(实际是存入寄存器DHRx[11:0]位)
  • 12位数据右对齐:用户须将数据写入寄存器DAC_DHR12Rx[11:0]位(实际是存入寄存器DHRx[11:0]位)
    单ADC
  • 双通道有3种情况(高级应用先不看):

  • 8位数据右对齐:用户须将DAC通道1数据写入寄存器DAC_DHR8RD[7:0]位(实际是存入寄存器DHR1[11:4]位),将DAC通道2数据写入寄存器DAC_DHR8RD[15:8]位(实际是存入寄存器DHR2[11:4]位)
  • 12位数据左对齐:用户须将DAC通道1数据写入寄存器DAC_DHR12LD[15:4]位(实际是存
    入寄存器DHR1[11:0]位),将DAC通道2数据写入寄存器DAC_DHR12LD[31:20]位(实际是存入寄存器DHR2[11:0]位)
  • 12位数据右对齐:用户须将DAC通道1数据写入寄存器DAC_DHR12RD[11:0]位(实际是存
    入寄存器DHR1[11:0]位),将DAC通道2数据写入寄存器DAC_DHR12RD[27:16]位(实际是存入寄存器DHR2[11:0]位)
    双ADC
  • DAC外部触发源

    如果TENx位被置1,DAC转换可以由某外部事件触发(定时器计数器、外部中断线)。配置控制位TSELx[2:0]可以选择8个触发事件之一触发DAC转换。
    DAC触发源

    输出电压计算

    电压计算

    输出缓存区

    适用于输出高电压
    输出缓存

    实验

    1)开启 PA 口时钟,设置 PA4 为模拟输入。
    使能 GPIOA 时钟:
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE ); //使能RTA时钟
    设置 PA1 为模拟输入只需要设置初始化参数即可:
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //模拟输入
    2)使能 DAC1 时钟。
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE ); //使能 DAC 通道时钟
    3)初始化 DAC,设置 DAC 的工作模式。
    void DAC_Init(uint32_t DAC_Channel, DAC_InitTypeDef* DAC_InitStruct)
    4)使能 DAC 转换通道。
    DAC_Cmd(DAC_Channel_1, ENABLE); //使能 DAC1
    5)设置 DAC 的输出值。
    DAC_SetChannel1Data(DAC_Align_12b_R, 0);

    物联沃分享整理
    物联沃-IOTWORD物联网 » 深入解析STM32中的DAC模块

    发表评论