STM32的DAC深入探究之一

发布者:电子思维最新更新时间:2020-01-06 来源: eefocus关键字:STM32  DAC 手机看文章 扫描二维码
随时随地手机看文章

1、简述:


12位数字输入,电压输出,DAC可以配置为8位或12位模式。有2个输出通道。在双DAC模式下,两个通道可以独立地工作。


特殊功能: 噪声波形生成,三角波形生成,外部触发转换,双DAC同时或者分别转换;每个通道都有DMA功能;


参考电压:2.4V~ 3.3V


因为一旦使能DAC通道,那么相应的GPIO便自动地连接到DAC转换器,因此,模拟输出前应该设置成模拟输入,目的是避免寄生的干扰和额外的功耗;


2、函数介绍:


(1)缺省函数


DAC_Init();


(2)DAC_Init(DAC_Channel_1,&DAC_InitStructure);初始化函数


DAC_InitTypeDef            DAC_InitStructure;


初始化的设置有四个:


❶DAC_Trigger:指定所选DAC的触发源,有9个触发源可以选择:


DAC_Trigger_None


DAC_Trigger_T6_TRGO


DAC_Trigger_T8_TRGO


DAC_Trigger_T7_TRGO


DAC_Trigger_T5_TRGO


DAC_Trigger_T2_TRGO


DAC_Trigger_T4_TRGO


DAC_Trigger_Ext_IT9


DAC_Trigger_Software


❷DAC_WaveGeneration :指定DAC是否产生噪声波形,三角波或者不产生以上波形


DAC_WaveGeneration_None


DAC_WaveGeneration_Noise


DAC_WaveGeneration_Triangle


❸DAC_LFSRUnmask_TriangleAmplitude:如果选择了产生噪声波形或者三角波,那么这里可以选择噪声波形的LFSRUnMask屏蔽位(不晓得是什么东西) 或者三角波的最大幅度


❹DAC_OutputBuffer:指定输出是否要缓冲一下


DAC_OutputBuffer_Enable


DAC_OutputBuffer_Disable


(3)DAC_Cmd(DAC_Channel_1,EANBLE); DAC通道使能函数


(4)DAC_DMACmd(DAC_Channel_1,ENABLE); 如果要用到DMA到DAC那么就要使能哪个DAC通道


(5)DAC_SoftwareTriggerCmd(DAC_Channel_1, ENABLE);软件触发使能函数,一般单通道时候使用


(6)DAC_DualSoftwareTriggerCmd(ENABLE);如果要同时控制两个DAC通道,那么就要使能此函数


(7)DAC_Wave GenerationCmd(DAC_Channel_1, DAC_Wave_Noise, ENABLE);波形发生使能函数,可以选择哪个通道以及噪声或者三角波波形


(8)DAC_SetChannel1Data(DAC_Align_12b_R, 0x500);


选择通道1的数据位数和对齐方式,以及具体输出值。三种对齐数据位方式:


DAC_Align_12b_R  12位右对齐,数值小于4096


DAC_Align_12b_L 12位左对齐,数值小于0XxFFF0


DAC_Align_8b_R 8位右对齐,数值小于256


(9)DAC_SetChannel2Data(DAC_Align_12b_L, 0x8880);同理(8)


(10)DAC_SetDualChannelData(DAC_Align_8b_R, 0x40, 0xF1);同理(8)


(11)u16 DataValue;


DataValue = DAC_GetDataOutputValue(DAC_Channel_1); 得到当前DAC输出的值


3、具体应用:


3.1 产生一个直流电压:


GPIOA_04 是DAC1 , GPIOA_05 是DAC2


1、设置GPIOA_04 或05 为模拟输入;


  GPIO_InitTypeDef GPIO_InitStructure;


  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_4 | GPIO_Pin_5;


  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;


  GPIO_Init(GPIOA, &GPIO_InitStructure)


2、开启GPIOA和DAC的时钟。注意GPIOA的时钟是在APB2,而DAC的时钟则是在APB1


  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);


  RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);


3、配置DAC输出直流电压


DAC_InitTypeDef            DAC_InitStructure;


DAC_InitStructure.DAC_Trigger = DAC_Trigger_None;//选择DAC的触发输出,当产生波形时可用定时器触发


DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;


DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Disable;


DAC_Init(DAC_Channel_1, &DAC_InitStructure);


DAC_Cmd(DAC_Channel_1, ENABLE);


DAC_SetChannel1Data(DAC_Align_12b_R,4095);//我的板子实际输出的是3.265v

关键字:STM32  DAC 引用地址:STM32的DAC深入探究之一

上一篇:stm32 hal库ADC - DMA方式中断问题
下一篇:在stm32f4_discovery上实现Flash移植!

推荐阅读最新更新时间:2024-11-13 04:33

STM32开发笔记15: 解决Keil安装Pack包的错误
单片机型号:STM32L053R8T6 Keil通过安装Pack包来支持不同的器件,在使用STM32L053R8T6进行开发时,安装STM32L0XX_DFP,提示如下图所示的错误。 具体的错误信息,可以在Build Output中查看,如下图所示。这个问题,在网上找了好久,没有直接的解决方法。仔细读英文原意,感觉是STM32L0XX_DFP文件中的Message函数不能正确识别。 尝试用记事本打开STM32L0XX_DFP文件,搜索Message只有1处出现,如下图所示。 将“Message(2, Not a genuine ST Device! Abort connection
[单片机]
<font color='red'>STM32</font>开发笔记15: 解决Keil安装Pack包的错误
STM32按键输入、所需要的C语言复习、时钟系统框图
第一部分: STM32按键输入是我的第二个在STM32 平台上有输入的小实例。思路为,先查询硬件图看清按键是低电平有效还是高电平有效,根据我的开发环境得知四个按键有三个按键是低电平有效,有一个按键是高电平有效。然后设计代码,设计代码之前得分析清楚,按键有两种情况,可持续按键和不可持续按键。可持续按键的意思是,按一下放开后,继续按还会有用,而不可持续按键就不行。 分清按键类型就可以照一般运用外设的三步走战略前进,第一步初始化按键输入时钟,第二步初始化所运用的IO时钟,第三步扫描键盘 初始化时钟选择时钟系统中的高速总线挂载的时钟,APB2所包含的时钟函数RCC_APB2PeriphClockCmd()。具体下面的时钟系统分析会清晰的讲
[单片机]
STM32之时钟树笔记
1 STM32有五个时钟源:HSI、HSE、LSI、LSE、PLL 1.1 HSI:高速内部时钟、RC振荡器、频率为8MHz、时钟精度较差,可作为备用时钟源(时钟安全系统CSS)。 1.2 HSE:高速外部时钟、可接外部晶体/陶瓷谐振器(4MHz~16MHz)或外部时钟源(HSE旁路,Max 25MHz)。 1.3 LSI:低速内部时钟、RC振荡器、频率为40kHz,大容量MCU可进行LSI时钟校准。 1.4 LSE:低速外部时钟、接频率为32.768kHz的外部晶体/陶瓷谐振器。 1.5 PLL:锁相环倍频输出,时钟输入源可选择HSI/2、HSE或HSE/2。倍频可选择为2~16倍,最大输出72MHz。 用户可通过多
[单片机]
keil+stm32+JTAG利用swd方式进行printf输出
使用ITM机制实现调试stm32单片机,实现printf与scanf。 1. ITM简介 ITM机制是一种调试机制,是新一代调试方式,在这之前,有一种比较出名的调试方式,称为半主机(semihosting)方式。 在pc上编写过C语言的人都知道,printf可以向控制台输出,scanf可以从控制台获取输入,这里的printf/scanf都是标准库函数,利用操作系统的这些函数,我们可以很方便的调试程序。在嵌入式设备上(如stm32单片机平台上)开发工具(如MDK/IAR)也都提供了标准库函,自然也提供了printf/scanf函数,那么这些函数是否可以使用呢? 问题来了,printf向哪里输出呢?并且大部分情况下,也没有键盘,又如何
[单片机]
keil+stm32+JTAG利用swd方式进行printf输出
STM32 USB 设备音频数据流
音频数据流的应用 音频数据流是没有任何压缩的音频数据,我们可以直接通过I2S传输到数字功放,也可以对这些数字音频进行处理,比如EQ音量控制、音质补偿等等。 典型应用举例 首先是PC,然后PC通过USB数据线连接到MCU,MCU再通过I2S输出到功放,最后连接到喇叭或耳机。 当然,还有GUI的部分显示可以控制,同时还可以通过麦克风把音频传输到PC进行刻录或保存。 同步问题 USB外设时钟、I2C外设时钟和外部功放时钟是同步的,因为它们共用一个时钟域,但不能同步PC的时钟域。 这些不同的时钟域将会造成音频的不同步,出现断音或丢失部分音频。 主要问题 1. USB的参考时钟(SOF)并不跟系统时钟同步,主要表现在三个方面
[单片机]
STM32应用与存储位置无关
1、前言 最近有客户询问,能否使用 STM32CubeIDE 在编译时通过设置某个编译选项,让STM32 应用与存储位置无关。这样的优势是能使同一个固件被烧在 STM32 Flash 里的不同位置, 而在系统 Bootloader 里只需要跳到相应的位置就可以正常执行固件代码。客户希望STM32 代码从 Flash 里执行,不复制到 RAM 里;客户希望是一个完整的映像,而不仅仅是其中某个函数做到了位置无关。 2、分析 在嵌入式场景下,不一定有操作系统。即使有操作系统,一般也是 RTOS。一般 RTOS没有一个通用的程序加载器。因此,存储位置无关的需求,在这时可以说无关紧要。但是,如果客户需要进行在线固件更新,例如 IoT 应
[单片机]
让<font color='red'>STM32</font>应用与存储位置无关
STM32基本定时器TIM6和TIM7
1. STM32上定时器的分类 前面学习了STM32系统定时器SysTick,它的主要作用是为OS提供系统滴答,当然我们也可以利用它实现了精准延时。在STM32单片机中,除了属于CM3内核中的一个外设的系统定时器外,还有几个属于片上外设的定时器:基本定时器(TIM6和TIM7)、通用定时器(TIM2/3/4/5)和高级定时器(TIM1和TIM8)。强调,这里指的是除互联型的STM32F1系列单片机。 它们各自具有的功能特点可以详见《STM32中文参考手册_V10.pdf》-P298,这里简单描述: (1)基本定时器(TIM6和TIM7):16位的只能向上计数的定时器,只能实现定时,没有外部IO通道与它关联。
[单片机]
<font color='red'>STM32</font>基本定时器TIM6和TIM7
基于STM32单片机开发光学指纹识别模块(FPM10A)全教程
1.平台 首先我使用的是 奋斗 STM32 开发板 MINI板 光学指纹识别模块(FPM10A)淘宝网址是:http://item.taobao.com/item.htm?id=5380075198 2.购买指纹模块,可以获得三份资料 1.简要使用说明 2.使用指纹模块的功能函数 3.FPM10A用户手册. 3.硬件搭建 根据使用说明:FPM 10A使用标准的串口与外界通信,默认的波特率为57600,可以与任何单片机,ARM,DSP等带串口的设备进行连接,请注意电平转换,连接电脑需要进行电平转换,比如MAX232电路。 FPM10A光学指纹模块共有5个管脚 1 为 VCC 电源的正极接 3.6V 5.
[单片机]
基于<font color='red'>STM32</font>单片机开发光学指纹识别模块(FPM10A)全教程
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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