STM32系列第20篇--DAC

发布者:梅花居士最新更新时间:2017-09-22 来源: eefocus关键字:STM32系列  DAC 手机看文章 扫描二维码
随时随地手机看文章

特点:

  1. 2个DAC转换器:每个转换器对应1个输出通道 (对应PA4和PA5)

  2. 8位或者12位单调输出

  3. 12位模式下数据左对齐或者右对齐

  4. 同步更新功能

  5. 噪声波形生成

  6. 三角波形生成

  7. 双DAC通道同时或者分别转换

  8. 每个通道都有DMA功能

DAC输出电压:

数字输入经过DAC被线性地转换为模拟电压输出,其范围为0到Vref+。任一DAC通道引脚上的输出电压满足下面的关系: DAC输出 = Vref * (DOR / 4095)。

CODE:

//dac.c#include "dac.h"void Dac1_Init(void)
{  
    GPIO_InitTypeDef GPIO_InitStructure;
    DAC_InitTypeDef DAC_InitType;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE );    //使能PORTA通道时钟
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE );    //使能DAC通道时钟 
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;                // 端口配置
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;        //模拟输入
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
    GPIO_SetBits(GPIOA,GPIO_Pin_4)  ;//PA.4 输出高             
    DAC_InitType.DAC_Trigger=DAC_Trigger_None;  //不使用触发功能 TEN1=0
    DAC_InitType.DAC_WaveGeneration=DAC_WaveGeneration_None;//不使用波形发生
    DAC_InitType.DAC_LFSRUnmask_TriangleAmplitude=DAC_LFSRUnmask_Bit0;//屏蔽、幅值设置
    DAC_InitType.DAC_OutputBuffer=DAC_OutputBuffer_Disable ;    //DAC1输出缓存关闭 BOFF1=1
  DAC_Init(DAC_Channel_1,&DAC_InitType);     //初始化DAC通道1
    DAC_Cmd(DAC_Channel_1, ENABLE);  //使能DAC1
  DAC_SetChannel1Data(DAC_Align_12b_R, 0);  //12位右对齐数据格式设置DAC值}//设置通道1输出电压//vol:0~3300,代表0~3.3Vvoid Dac1_Set_Vol(u16 vol)
{    float temp=vol;
    temp/=1000;
    temp=temp*4096/3.3;
    DAC_SetChannel1Data(DAC_Align_12b_R,temp);//12位右对齐数据格式设置DAC值}//main.c#include "led.h"#include "delay.h"#include "key.h"#include "sys.h"#include "lcd.h"#include "usart.h"       #include "dac.h"#include "adc.h"#include "usmart.h"int main(void)
{    
    u16 adcx;    float temp;
    u8 t=0;  
    u16 dacval=0;
    u8 key;
    delay_init();            //延时函数初始化    
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
    uart_init(115200);      //串口初始化为115200
    KEY_Init();           //初始化按键程序
    LED_Init();              //LED端口初始化
    LCD_Init();              //LCD初始化
    usmart_dev.init(72);    //初始化USMART 
    Adc_Init();             //ADC初始化
    Dac1_Init();                //DAC初始化
    POINT_COLOR=RED;//设置字体为红色 
    LCD_ShowString(60,50,200,16,16,"WarShip STM32");    
    LCD_ShowString(60,70,200,16,16,"DAC TEST"); 
    LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK");
    LCD_ShowString(60,110,200,16,16,"2015/1/15");   
    LCD_ShowString(60,130,200,16,16,"WK_UP:+  KEY1:-"); 
    //显示提示信息                                                  
    POINT_COLOR=BLUE;//设置字体为蓝色
    LCD_ShowString(60,150,200,16,16,"DAC VAL:");          
    LCD_ShowString(60,170,200,16,16,"DAC VOL:0.000V");        
    LCD_ShowString(60,190,200,16,16,"ADC VOL:0.000V");
    DAC_SetChannel1Data(DAC_Align_12b_R, 0);//初始值为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==KEY1_PRES) 
        {
            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(124,150,adcx,4,16,0);      //显示DAC寄存器值
            temp=(float)adcx*(3.3/4096);            //得到DAC电压值
            adcx=temp;
            LCD_ShowxNum(124,170,temp,1,16,0);      //显示电压值整数部分
            temp-=adcx;
            temp*=1000;
            LCD_ShowxNum(140,170,temp,3,16,0X80);   //显示电压值的小数部分
            adcx=Get_Adc_Average(ADC_Channel_1,10);     //得到ADC转换值    
            temp=(float)adcx*(3.3/4096);            //得到ADC电压值
            adcx=temp;
            LCD_ShowxNum(124,190,temp,1,16,0);      //显示电压值整数部分
            temp-=adcx;
            temp*=1000;
            LCD_ShowxNum(140,190,temp,3,16,0X80);   //显示电压值的小数部分
            LED0=!LED0;    
            t=0;
        }       
        delay_ms(10);   

    }
}


关键字:STM32系列  DAC 引用地址:STM32系列第20篇--DAC

上一篇:STM32系列第21篇--DMA
下一篇:STM32系列第19篇--内部温度传感器

推荐阅读最新更新时间:2024-03-16 15:38

基于STM32从零写操作系统系列---熟悉纯windows交叉编译环境
目的: 熟悉在纯windows下的交叉编译环境,了解如何下载BIN格式的程序文件到单片机。 实验2: 一个简单的交叉编译与程序下载过程 环境搭建(以我的平台为例): 安装win7 32位,具体教程可百度 安装make和gcc-arm-none-eabi交叉编译工具,具体教程可百度 安装ST-Link Utility软件 在windows系统上安装编辑器,如notepad++ make,gcc-arm-none-eabi,ST-Link Utility软件已在百度云分享: 链接:https://pan.baidu.com/s/1DlzYMo8oZsnF9ammJuuZoQ 提取码:dc5h 具体实验过程: 1.在w
[单片机]
基于<font color='red'>STM32</font>从零写操作系统<font color='red'>系列</font>---熟悉纯windows交叉编译环境
STM32入门系列-学习STM32要掌握的内容
STM32芯片架构 STM32F103系列芯片的系统架构如下: STM32芯片基于ARM公司的Cortex-M3内核,由ST公司设计生产,内核与总线矩阵之间有I(指令)、S(系统)、D(数据)三条信号线。内核通过总线矩阵与FLASH、SRAM、外设连接。而外设包括GPIO、USART、I2C、SPI等。 STM32芯片系统结构 STM32F103 系列芯片(不包含互联网型)的系统结构如下: 从上图可以看出,在小容量、中容量和大容量产品中,主系统由以下部分构 成: 四个驱动单元: Cortex-M3 内核 DCode 总线(D-bus) Cortex-M3 内核系统总线(S-bus) 通用 DMA1
[单片机]
<font color='red'>STM32</font>入门<font color='red'>系列</font>-学习<font color='red'>STM32</font>要掌握的内容
DAC解码芯片ES9023特性评测简介
美国ES9023是一款单端输出24bit立体声音频数模转换DAC芯片,芯片内集成2Vrms输出的驱动运放。采用了业界先进的SABRE数-模转换技术;集音质、高性价比于一身,使之成为数模转换的理想选择。 ES9023不仅仅是安全质量得到保障,使用寿命长,更重要是使实际性能能达到设计目标的强有力保证; 内部使用专利技术的超线流(Hyperstream)架构和时域抖动消除技术,使之可以实现无抖动录音级别的音质,动态范围达到了112dB。 原理框图: ES9023将最好的音频与最低的系统成本和最高的性能到理想的D/A转换器的线级输出应用,如蓝光播放器,CD/DVD播放器,机顶盒,数字电视和音频接收器。 美国ESS DAC芯片
[嵌入式]
<font color='red'>DAC</font>解码芯片ES9023特性评测简介
整改 MINI USB DAC
MINI USB DAC 正式试听已经数天了。这段时间仔细地留意着它的声音特点。 为什么去“摩”? 我不支持动不动就去摩机,如果对什么都有“摩一下更好”的想法,我就觉得是有强迫症了。买一个不喜欢的回来,又去摩机,这不是无事找事么!你是在玩器材,还是被器材玩? 话说回来,网络销售在买前听不到效果。如果有得 选择 ,我更愿意去做一个器材的用家而不是一个器材“维修”者,尽管我也认为 DIY 是一种难得的乐趣。买器材的首要目的是去享受它带来的功能,当你不得不通过一定的处理才能让你手上器材达到需求的话,哪么我们就来摩机吧! 一、定一个标准。 作为一个以商业操作方式生产的器材,我对MUD的品
[模拟电子]
整改 MINI USB <font color='red'>DAC</font>
模数转换DAC0832的应用实验
用两个按键通过单片机控制DAC0832的输出,使OUT端可以输出0—5V的幅值,频率为1KHZ的锯齿波和三角波两种波形。通上电源后;按下INT1则输出三角波,在按下INT0输出锯齿波。 ADC0804是8位全MOS 中速D/A转换器,采用R—2RT形电阻解码网络,转换结果为一对差动电流输出,转换时间大约为1us。使用单电源+5V―+15V供电。参考电压为-10V-+10V。在此我们直接选择+5V作为参考电压。DAC0832有三种工作方式:直通方式,单缓冲方式,双缓冲方式;在此我们选择直通的工作方式,将XFER WR 1WR2 CS管脚全部接数字地。管脚8接参考电压,在此我们接的参考电压是+5V。那么经过第一级运放后,输出
[单片机]
模数转换<font color='red'>DAC</font>0832的应用实验
STM32系列第20篇--DAC
特点: 2个DAC转换器:每个转换器对应1个输出通道 (对应PA4和PA5) 8位或者12位单调输出 12位模式下数据左对齐或者右对齐 同步更新功能 噪声波形生成 三角波形生成 双DAC通道同时或者分别转换 每个通道都有DMA功能 DAC输出电压: 数字输入经过DAC被线性地转换为模拟电压输出,其范围为0到Vref+。任一DAC通道引脚上的输出电压满足下面的关系: DAC输出 = Vref * (DOR / 4095)。 CODE: //dac.c#include dac.h void Dac1_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; DA
[单片机]
stm32系列MCU芯片选型表
本文为stm32系列32位微控制器选型表,包括STM32F0系列、STM32L1系列、STM32F1系列、STM32F2系列、STM32F3系列、STM32F4系列选型,STM32系列36脚、48脚、64脚、100脚、144脚选型。 TM32系列36脚、48脚、64脚、100脚、144脚选型: STM32系列按内核架构分类产品选型: STM32F0 系列 STM32L1 系列 STM32F1 系列 STM32F2 系列 STM32F3 系列 STM32F4 系列
[单片机]
<font color='red'>stm32</font><font color='red'>系列</font>MCU芯片选型表
STM32DAC
先来张比如花漂亮的照片、大家请尽情欣赏:因为其够美丽了、所以我就不展现我美丽而销魂的涂鸦了、 鉴赏过之后、我们来看看STM32之DAC的Resume(简历简介): 2个DAC转换器:每个转换器对应1个输出通道 ● 8位或者12位单调输出 ● 12位模式下数据左对齐或者右对齐 ● 同步更新功能 ● 噪声波形生成 ● 三角波形生成 ● 双DAC通道同时或者分别转换 ● 每个通道都有DMA功能 ● 外部触发转换 ● 输入参考电压VREF+ 哇、、哇、、哇、、好多特征呀、、还记得上篇博客中ADC也有很多功能吗?在这里,我觉得,因为其功能多、所以其复杂、、这也没什么奇怪的哈、、 那我
[单片机]
<font color='red'>STM32</font>之<font color='red'>DAC</font>君
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved