STM32笔记--通过DMA传递给DAC12位右对齐双寄存器

遇到的问题:

(1)为什么DMA的数据不递增的情况下输出固定(参数一次循环16次),而在数据递增的模式下(参数一次循环一次递给多个值)
(2)为什么传递过来的数值与PA14和PA15绑定在一起变更

DAC触发方式:


以上选择8个触发事件之一触发DAC转换,但支持DMA请求的有7种(除软件触发以外)。

DAC模块方图:

在这里插入图片描述
方图中主要是围绕数字至模拟转换器x展开。在使用 DAC 时,不能直接对上述 DORx 寄存器写入数据,任何输出到 DAC 通道 x 的数据都必须写入到 DHRx 寄存器中。数据被写入到 DHRx 寄存器后,DAC 会根据触发配置进行处理,DHRx 中的数据会在 3 个 APB1 时钟周期后传输至 DORx,随之而后经过数字至模拟转换器x产生相应的模拟电压。

DAC相关寄存器:

在这里插入图片描述
DAC配置的特殊注意点:
在 STM32 中具有 2 个这样的 DAC 部件,每个 DAC 有 1 个对应的输出通道连接到特定的引脚,即:PA4-通道 1,PA5-通道 2,为避免干扰,使用 DAC 功能时,DAC 通道引 脚需要被配置成模拟输入功能(AIN)。

DAC输出电压:
数字输入经过DAC被线性地转换为模拟输出,其范围为0到Vref+。
DAC通道引脚上的输出电压满足下面关系:
以 12 位 右 对 齐 方 式 有 12bit,2 ^ 12 = 4095 ,参 考 电 压 为 3.3V
DAC输出=Vref x (DOR/4095)

在这里插入图片描述
数据输入DHRx寄存器中,有多个不同类型的寄存器。比如上图的双DAC的12位右对齐数据保持寄存器,还有DAC通道 1 的 12 位左对齐数据保持寄存器,具体可参考手册中的说明。本文开头的问题可能就在此处解决。

12位右对齐数据DAC地址:

#define DAC_DHR12RD_Address      0x40007420 

使能DAC输出缓存
DAC集成了2个输出缓存,可以用来减少输出阻抗,无需外部运放即可直接驱动外部负载。每个DAC通道输出缓存可以通过设置DAC_CR寄存器的BOFFx位来使能或者关闭。

DMA请求映射:

在这里插入图片描述
DAC的DMA请求挂接在DMA2中的通道3和通道4中

DAC初始化:

DAC软件触发配置步骤要点:

1)初始化GPIO引脚为模拟输入,初始化 DAC 工作模式
2)注意DAC 工作模式选择那种触发方式。除软件触发以外其他触发都支持DMA请求
3)换算所要的值让其直观,再调用固件的软件触发函数和DAC通道使能函数

DAC定时器触发配置步骤要点:

1)初始化GPIO引脚为模拟输入,初始化 DAC 工作模式
2)注意DAC 工作模式选择定时器触发方式,配置相关信息
3)配置触发的定时器预分频值和ARR计数值
4)配置DMA的初始化,内存地址递增模式下,注意这里DMA.Mode循环模式下,这里可能就是地址一直在轮询方式
5)前提已声明变量传递给DMA的赋值内存地址数据

附上相关代码:

(1)软件触发,无波形

在这里插入图片描述
在这里插入图片描述

(2)定时器触发

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(3)三角波

在这里插入图片描述
在这里插入图片描述
还有一种运用PWM信号输出DAC电平,尚未运用过不用还是PWM引脚数量还是挺可观的。
简单的基本电路运用了三极管驱动-稳压二极管-二阶低通滤波器-电压跟随器-完成

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

谢谢~谢先生

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

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

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

打赏作者

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

抵扣说明:

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

余额充值