蓝桥杯嵌入式学习日记(五)——DAC数模转换【STM32】【HAL库】

本文详细介绍了如何在STM32中使用DAC模块,包括配置12位模式、左右对齐选项,以及通过STM32cubemx创建工程。作者提供了代码示例和功能检验方法,如通过万用表测量输出或使用ADC验证输出电压。
摘要由CSDN通过智能技术生成

一、查阅手册

在这里插入图片描述

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

主要特征:
1、支持数据左对齐或者右对齐,数据是12位的
2、支持两个通道同时输出
3、支持输出噪声波形和三角波形
4、支持DMA输出
5、可以外部触发
6、支持缓冲输出和非缓冲输出两种模式
等等

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

再通过观察原理图我们可以发现PA4和PA5为拓展DAC引脚。另外查看所需要的函数定义
在这里插入图片描述
HAL_ADC_SetValue的前几个参数跟上篇的ADC类似,为DAC编号和对应的通道,而第三个也给出了解释。
在这里插入图片描述
为我们所选择的对应数据,这里有三个选项,分别是12位的右对齐和左对齐以及8位的右对齐。上面参考手册有对应说明,这里我们选择12位的右对齐,高位舍弃,取出低12位,作为DAC转换的数值。
在这里插入图片描述

二、利用STM32cubemx创建工程

  这里我们依旧沿袭上篇的工程进行创建。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里模式我们选择连接到外部引脚,对应参数保持默认即可,想要使用DMA的可以自行开启。

三、代码部分

1、代码和原理

  ADC和DAC大致相似,区别就在于上篇ADC我们是先获取再赋值,而DAC我们则是先赋值再获取

void DAC_SetValue(float volt_1,float volt_2)
{
    volt_ch1 = (volt_1/3.3f*4096) ;
	HAL_DAC_SetValue(&hdac1, DAC_CHANNEL_1, DAC_ALIGN_12B_R, volt_ch1) ;	
	HAL_DAC_Start(&hdac1, DAC_CHANNEL_1) ;

    volt_ch2 = (volt_2/3.3f*4096) ;
	HAL_DAC_SetValue(&hdac1, DAC_CHANNEL_2, DAC_ALIGN_12B_R, volt_ch2) ;	
	HAL_DAC_Start(&hdac1, DAC_CHANNEL_2) ; 
}

对应的便是先设置数值然后再打开对应通道,和ADC同时学习的时候不要记混。同时数据精度为4096,因为是通过和基础电压Vref+产生的电压,所以范围在0~3.3V,只要让我们设置的电压/3.3*4096即可。

2、实现功能检验

这里给两种方式:
1、如果手边有万用表的,可以直接测量PA4和PA5引脚与GND的压差即可,这里建议先拿两根公母杜邦线引出后再进行测量,因为在CT117E_M4这块板子上引脚距离很近,测量时不小心碰到其它引脚容易短路。
2、可以使用我们上篇所讲的ADC进行测量,以下具体讲这种方法。

使用ADC进行测量,不会的可以看上篇蓝桥杯嵌入式学习日记(四)——ADC数模转换【STM32】【HAL库】,我们在上篇看到过对应原理图分别使用的是J11和J12跳帽。
在这里插入图片描述
接下来我们拔掉J11和J12跳帽,隔绝掉与旋钮电位器的连接,将PA4和PA5用两根母母杜邦线连接至靠近屏幕一端即可。
在这里插入图片描述

    DAC_SetValue(1.2,2.0) ;

我这里分别设置PA4为1.2V,PA5为2.0V
在这里插入图片描述
在这里插入图片描述
文中所用的工程我会贴在下面,如有需要可自行下载,如果有疑问或者有什么错误之处还望留言指正。

链接:https://pan.baidu.com/s/1jWWfQyIN0f2vUtkYLgMjMA?pwd=1111
提取码:1111

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Lumine.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值