DAC(数模转换器)

DAC(数模转换器)相关的寄存器主要是用于 控制 DAC 的功能、配置输出模式和操作 DAC 输出数据。以下是典型的 STM32 系列微控制器中 DAC 的寄存器分类和功能说明:

1. DAC 控制和状态相关寄存器

1.1 DAC_CR (控制寄存器)

  • 用于配置 DAC 的工作模式,包括启用通道、触发设置、波形生成等。
  • 每个 DAC 通道(如 DAC 通道 1 和通道 2)都有独立的控制字段。
    | 位名称 | 描述 |
    |-----------------|-------------------------------------------------------------------------|
    | ENx | 启用 DAC 通道 x(0:禁用;1:启用)。 |
    | BOFFx | 输出缓冲使能位(0:使能缓冲;1:关闭缓冲,提升驱动能力)。 |
    | TENx | 触发使能位(0:禁用触发;1:启用触发)。 |
    | TSELx[2:0] | 触发源选择(如软件触发、定时器触发等)。 |
    | WAVE1/WAVE2 | 波形生成选择(噪声或三角波)。 |
    | MAMPx[3:0] | 波形振幅选择(如三角波振幅控制)。 |
    示例:启用 DAC 通道 1,并使用软件触发。
DAC->CR |= (1U << 0);  // EN1:使能 DAC 通道 1
DAC->CR |= (1U << 2);  // TEN1:启用触发
DAC->CR &= ~(0x7U << 3); // TSEL1:选择软件触发

1.2 DAC_SWTRIGR (软件触发寄存器)

  • 用于触发 DAC 的转换操作(如果启用了触发功能)。
  • 每个通道独立使用一个位,写 1 表示触发转换。
    | 位名称 | 描述 |
    |------------|--------------------------------|
    | SWTRIG1 | 软件触发 DAC 通道 1 转换。 |
    | SWTRIG2 | 软件触发 DAC 通道 2 转换。 |
    示例:触发 DAC 通道 1 的转换:
DAC->SWTRIGR |= (1U << 0);  // 触发通道 1

1.3 DAC_SR (状态寄存器)

  • 用于监测 DAC 的状态,包括 DMA 下溢出和输出电压状态。
    | 位名称 | 描述 |
    |------------|-----------------------------------------------------|
    | DMAUDR1 | 通道 1 的 DMA 下溢错误标志(1:下溢;0:无错误)。 |
    | DMAUDR2 | 通道 2 的 DMA 下溢错误标志。 |
    示例:检测 DMA 下溢错误:
if (DAC->SR & (1U << 13)) {
    // 通道 1 下溢错误
}

2. 数据寄存器(用于写入数据)

2.1 DAC_DHRxR(数据保持寄存器,右对齐模式)

  • 用于写入转换数据,右对齐,数据长度为 12 位。
  • 每个通道有三个寄存器(8 位、12 位右对齐、12 位左对齐)可供选择。
    | 寄存器 | 数据位宽 | 描述 |
    |-------------------|-----------------|----------------------------------------|
    | DAC_DHR8Rx | 8 位 | 仅使用 8 位数据,右对齐。 |
    | DAC_DHR12Rx | 12 位 | 右对齐,数据放在低 12 位。 |
    | DAC_DHR12Lx | 12 位 | 左对齐,数据放在高 12 位。 |
    示例:写入 2048 到 DAC 通道 1 的右对齐数据寄存器:
DAC->DHR12R1 = 2048;  // 输出中间值(范围:0-4095)

2.2 DAC_DORx(数据输出寄存器)

  • 只读寄存器,表示当前 DAC 转换后的输出值。
  • 每个通道有一个输出寄存器。
    | 寄存器 | 描述 |
    |------------|--------------------------------|
    | DAC_DOR1 | 通道 1 的当前输出数据寄存器。 |
    | DAC_DOR2 | 通道 2 的当前输出数据寄存器。 |
    示例:读取 DAC 通道 1 当前输出数据:
uint32_t output_value = DAC->DOR1;

3. DMA 和触发配置

3.1 DAC_DMAUDR (DMA 下溢标志寄存器)

  • 当 DAC 使用 DMA 进行数据传输时,如果数据传输速度跟不上,则会触发下溢错误。

3.2 触发源配置(CR 寄存器中的 TSELx 字段)

  • DAC 支持多种触发源,TSELx 字段用于选择触发信号:
    | TSELx 值 | 触发源 |
    |--------------|-----------------------|
    | 000 | 软件触发 |
    | 001 | Timer 6 触发事件 |
    | 010 | Timer 3 触发事件 |
    | 011 | Timer 7 触发事件 |
    | 100 | Timer 15 触发事件 |
    | 101 | 外部引脚(EXTI 线 9) |
    | 110 | Timer 2 触发事件 |
    | 111 | Timer 4 触发事件 |
    示例:配置 DAC 通道 1 使用 Timer 6 触发:
DAC->CR &= ~(0x7U << 3); // 清除 TSEL1 位
DAC->CR |= (0x1U << 3);  // 设置触发源为 Timer 6

4. 完整的寄存器清单

寄存器描述
DAC_CR控制寄存器:启用通道、设置触发源、波形生成等。
DAC_SWTRIGR软件触发寄存器:用于触发转换。
DAC_DHR12R1/DHR12R212 位右对齐数据寄存器:写入待转换数据。
DAC_DHR12L1/DHR12L212 位左对齐数据寄存器。
DAC_DHR8R1/DHR8R28 位数据寄存器。
DAC_DOR1/DOR2数据输出寄存器:显示当前输出值。
DAC_SR状态寄存器:包括 DMA 下溢错误标志。
DAC_DMAUDRDMA 下溢错误寄存器。

完整配置示例:使用 DAC 通道 1 输出模拟信号

假设我们需要将一个 12 位数据写入 DAC 通道 1 并输出。

// 1. 使能 DAC 时钟
RCC->APB1ENR1 |= (1U << 29); // 使能 DAC1 时钟
// 2. 配置 DAC 通道 1
DAC->CR |= (1U << 0);        // EN1:启用通道 1
DAC->CR |= (1U << 2);        // TEN1:启用触发
DAC->CR &= ~(0x7U << 3);     // TSEL1:选择软件触发
// 3. 写入数据到 DAC 数据寄存器
DAC->DHR12R1 = 2048;         // 输出 12 位中间值
// 4. 软件触发
DAC->SWTRIGR |= (1U << 0);   // 软件触发通道 1

总结

关于 DAC 的寄存器:

  1. 控制寄存器(CR):启用通道、设置触发和波形生成。
  2. 软件触发寄存器(SWTRIGR):用于触发 DAC 转换。
  3. 数据寄存器(DHRx):用于写入 DAC 的待转换值。
  4. 输出寄存器(DORx):用于读取当前 DAC 输出值。
  5. 状态寄存器(SR):监控 DMA 下溢错误等状态。
    通过配置这些寄存器,可以实现 DAC 的模拟信号输出,包括静态电压、动态波形(如三角波或正弦波)等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Flocx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值