一、查阅手册
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