00. 目录

文章目录

  • 00. 目录
  • 01. DAC简介
  • 02. 硬件模块
  • 03. 程序设计
  • 04. 结果验证
  • 05. 预留
  • 06. 附录
  • 07. 声明

01. DAC简介

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

STM32F4 的 DAC 模块主要特点有:
① 2 个 DAC 转换器:每个转换器对应 1 个输出通道
② 8 位或者 12 位单调输出
③ 12 位模式下数据左对齐或者右对齐
④ 同步更新功能
⑤ 噪声波形生成
⑥ 三角波形生成
⑦ 双 DAC 通道同时或者分别转换
⑧ 每个通道都有 DMA 功能

02. 硬件模块

用到的硬件资源有:
1) 指示灯 DS0
2) KEY_UP 和 KEY1 按键
3) 串口
4) TFTLCD 模块
5) ADC
6) DAC

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HO0gJXb7-1601197306284)(assets/image-20200927164845298.png)]

03. 程序设计

dac.h文件

#ifndef __DAC_H
#define __DAC_H
#include "sys.h"                      void Dac1_Init(void);       //DAC通道1初始化
void Dac1_Set_Vol(u16 vol); //设置通道1输出电压
#endif

dac.c文件

#include "dac.h"//DAC通道1输出初始化
void Dac1_Init(void)
{  GPIO_InitTypeDef  GPIO_InitStructure;DAC_InitTypeDef DAC_InitType;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//使能GPIOA时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);//使能DAC时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;//模拟输入GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;//下拉GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化DAC_InitType.DAC_Trigger=DAC_Trigger_None; //不使用触发功能 TEN1=0DAC_InitType.DAC_WaveGeneration=DAC_WaveGeneration_None;//不使用波形发生DAC_InitType.DAC_LFSRUnmask_TriangleAmplitude=DAC_LFSRUnmask_Bit0;//屏蔽、幅值设置DAC_InitType.DAC_OutputBuffer=DAC_OutputBuffer_Disable ;    //DAC1输出缓存关闭 BOFF1=1DAC_Init(DAC_Channel_1,&DAC_InitType);  //初始化DAC通道1DAC_Cmd(DAC_Channel_1, ENABLE);  //使能DAC通道1DAC_SetChannel1Data(DAC_Align_12b_R, 0);  //12位右对齐数据格式设置DAC值
}
//设置通道1输出电压
//vol:0~3300,代表0~3.3V
void Dac1_Set_Vol(u16 vol)
{double temp=vol;temp/=1000;temp=temp*4096/3.3;DAC_SetChannel1Data(DAC_Align_12b_R,temp);//12位右对齐数据格式设置DAC值
}

main.c文件

int main(void)
{ u16 adcx;float temp;u8 t=0;   u16 dacval=0;u8 key;  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2delay_init(168);      //初始化延时函数uart_init(115200);      //初始化串口波特率为115200LED_Init();                    //初始化LED LCD_Init();                    //LCD初始化Adc_Init();                 //adc初始化KEY_Init();                 //按键初始化Dac1_Init();             //DAC通道1初始化 POINT_COLOR=RED; LCD_ShowString(30,50,200,16,16,"Explorer STM32F4"); LCD_ShowString(30,70,200,16,16,"DAC TEST");   LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");LCD_ShowString(30,110,200,16,16,"2014/5/6");    LCD_ShowString(30,130,200,16,16,"WK_UP:+  KEY1:-");  POINT_COLOR=BLUE;//设置字体为蓝色         LCD_ShowString(30,150,200,16,16,"DAC VAL:");       LCD_ShowString(30,170,200,16,16,"DAC VOL:0.000V");        LCD_ShowString(30,190,200,16,16,"ADC VOL:0.000V");DAC_SetChannel1Data(DAC_Align_12b_R,dacval);//初始值为0   while(1){t++;key=KEY_Scan(0);              if(key==WKUP_PRES){      if(dacval<4000)dacval+=200;DAC_SetChannel1Data(DAC_Align_12b_R, dacval);//设置DAC值}else if(key==2)    {if(dacval>200)dacval-=200;else dacval=0;DAC_SetChannel1Data(DAC_Align_12b_R, dacval);//设置DAC值}     if(t==10||key==KEY1_PRES||key==WKUP_PRES)    //WKUP/KEY1按下了,或者定时时间到了{      adcx=DAC_GetDataOutputValue(DAC_Channel_1);//读取前面设置DAC的值LCD_ShowxNum(94,150,adcx,4,16,0);           //显示DAC寄存器值temp=(float)adcx*(3.3/4096);                  //得到DAC电压值adcx=temp;LCD_ShowxNum(94,170,temp,1,16,0);            //显示电压值整数部分temp-=adcx;temp*=1000;LCD_ShowxNum(110,170,temp,3,16,0X80);        //显示电压值的小数部分adcx=Get_Adc_Average(ADC_Channel_5,10);     //得到ADC转换值    temp=(float)adcx*(3.3/4096);                 //得到ADC电压值adcx=temp;LCD_ShowxNum(94,190,temp,1,16,0);        //显示电压值整数部分temp-=adcx;temp*=1000;LCD_ShowxNum(110,190,temp,3,16,0X80);    //显示电压值的小数部分LED0=!LED0;     t=0;}       delay_ms(10);    }
}

04. 结果验证

同时伴随 DS0 的不停闪烁,提示程序在运行。此时,我们通过按 KEY_UP 按键,可以看到输出电压增大,按 KEY1 则变小。

05. 预留

06. 附录

6.1 【STM32】STM32系列教程汇总

网址:【STM32】STM32系列教程汇总

07. 声明

该教程参考了正点原子的《STM32 F4 开发指南》

【STM32】DAC程序示例相关推荐

  1. 【STM32】待机唤醒程序示例

    00. 目录 文章目录 00. 目录 01. 待机模式简介 02. 硬件模块 03. 相关函数 04. 程序示例一 05. 程序示例二 06. 附录 07. 声明 01. 待机模式简介 很多单片机都有 ...

  2. 【STM32】硬件随机数程序示例

    00. 目录 文章目录 00. 目录 01. 概述 02. 硬件模块 03. 相关函数 04. 程序示例 05. 结果验证 06. 附录 07. 声明 01. 概述 STM32F4 自带了硬件随机数发 ...

  3. 【STM32】ADC程序示例

    00. 目录 文章目录 00. 目录 01. ADC简介 02. 硬件资源 03. 编程思路 04. 程序示例 05. 预留 06. 附录 07. 声明 01. ADC简介 STM32F4xx 系列一 ...

  4. RT-Thread系统 STM32 DAC设备改进,直接调用系统DAC驱动函数设置输出电压

    前言 RT-Thread系统官方的驱动支持DAC设备比较晚,还不太完善,所以早期的STM32F1等系列基于芯片的工程中并没有DAC设备的驱动,很多人建议直接调用HAL库中的函数操作DAC,但这样操作并 ...

  5. java聊天程序步骤解析_java网络之基于UDP的聊天程序示例解析

    基于UDP的Socket通信 UDP协议不是一种基于稳定连接的协议,是一种面向数据报包的通信协议,不需要通信双方建立稳定的连接,也没有所谓服务端和客户的概念,数据报包在传输的时候不保证一定及时到达,也 ...

  6. java web程序示例_想要建立一些有趣的东西吗? 这是示例Web应用程序创意的列表。...

    java web程序示例 Interested in learning JavaScript? Get my ebook at jshandbook.com 有兴趣学习JavaScript吗? 在js ...

  7. 第一个Mybatis程序示例 Mybatis简介(一)

    在JDBC小结中(可以参阅本人JDBC系列文章),介绍到了ORM,其中Mybatis就是一个不错的ORM框架 MyBatis由iBatis演化而来 iBATIS一词来源于"internet& ...

  8. 9.5 程序示例--推荐系统-机器学习笔记-斯坦福吴恩达教授

    程序示例–推荐系统 推荐模型 在推荐模型中,我们将暴露: 训练接口 train() 预测接口 predict(Theta, X) 获得推荐接口 getTopRecommends(Theta, X, i ...

  9. 8.7 程序示例--异常检测-机器学习笔记-斯坦福吴恩达教授

    程序示例–异常检测 异常检测模型 提供了一般高斯分布模型和多元高斯分布模型.其中,多元高斯分布模型被限制到了同轴分布: # coding: utf8 # anomaly_detection/anoma ...

最新文章

  1. oracle的那些事
  2. basler相机参数简要中文说明_你知道相机曝光模式怎么用么?6种相机曝光模式详解及应用...
  3. 提示计算机未安装flash,大师应对安装了flash,但浏览器提示没安装,如何解决...
  4. RUP,XP,敏捷原理
  5. 当代家长现状。。 | 今日最佳
  6. openfeign调用 HttpServletRequest作为参数 报错..
  7. 阿里云安装mysql5.7_同一服务器上二进制安装mysql5.7和mysql5.6
  8. 各种排序算法的时间复杂度
  9. 不可错过!斯坦福课程3D数据的机器学习方法(Machine Learning for 3D Data)第二部分Geometry Foundations: Surface Representations
  10. 算法不会,尚能饭否之排序——折半插入排序(Binary Insert Sort)
  11. 【转】Linux下发生段错误时如何生成core文件
  12. 自定义 Bean 作用域
  13. 单片机中断实验 EX0
  14. 省份城市 mysql_省份城市数据库 mysql
  15. 期货开平,多开,空开,多平,空平
  16. python机器人编程——差速机器人小车的控制,控制模型、轨迹跟踪,轨迹规划、自动泊车(上)
  17. c语言编程设计实验课件,c语言程序设计实验课件.ppt
  18. 当心PayPal,Amazon认真对待付款
  19. centos7查看oracle监听端口,CentOS 7开放及查看防火墙firewall的端口
  20. workbench设置单元坐标系_节点坐标系:很多Workbench结构用户不知道的重要概念

热门文章

  1. 2015.5.28 面试题1:赋值运算符函数
  2. 在ubuntu上mysql出现ERROR 1045(28000):Access denied for user ‘young‘@’localhost‘(using password:NO)...
  3. oracle status
  4. HDOJ---1272 小希的迷宫[并查集]
  5. 实验9 结构程序设计 7-4 查找书籍
  6. svm java_SVM入门(十)将SVM用于多类分类
  7. python redis模块connectionerror_PHP程序连接Redis报read error on connection问题
  8. Java黑皮书课后题第2章:2.10(科学:计算能量)编写程序,计算将水从初始温度加热到最终温度所需的能量。程序应该提示用户输入水的重量(kg),以及水的初始温度、最终温度
  9. Html的一些小东西
  10. 2018 前端面试题(不定期更新)