STM32F103VCT6自带两个12位DAC,DAC的转换速度一直没有查到,网上有人说是1MHZ的频率,那就是1us了。ADC的转换时间在56MHZ工作频率下为1us,在72MHZ工作频率下为1.17us。如果AD和DA有对称关系的话,那么很可能跟ADC的时间相同。(仅作分析用!)

DAC于我,有两个用途:输出波形输出固定电压。先来说说前者的配置。

第一个参数:触发方式,DAC_InitStructure.DAC_Trigger。可选的外部触发源一共有八个。六个是定时器触发:TIM2,TIM4,TIM5,TIM6,TIM7和TIM8。剩下两个分别是:EXTI线路9和软件触发。如果采用定时器触发的话,就还要再编写相应的定时器函数,这个倒不是很复杂,和定时器的编写方式类似。如:DAC_InitStructure.DAC_Trigger = DAC_Trigger_T6_TRGO;//选择定时器6作外部触发源

void TIM_Configuration(void)

{

TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

TIM_OCInitTypeDef            TIM_OCInitStructure;

TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);

TIM_TimeBaseStructure.TIM_Period = 0x85;

TIM_TimeBaseStructure.TIM_Prescaler = 0x0;

TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

TIM_TimeBaseInit(TIM6, &TIM_TimeBaseStructure);

TIM_SelectOutputTrigger(TIM6, TIM_TRGOSource_Update);

}

输出信号频率计算:假设输出一个6个点的锯齿波波形,则其频率为:(72MHZ/(0x85+1))*6=89.552KHZ.注意:如果prescaler不为0,则时钟还要再除以(prescaler+1)

第二个参数:DAC_InitStructure.DAC_WaveGeneration。顾名思义:波形发生器。STM32内部集成了两个幅度可调的波形发生器,可以产生三角波和噪声波。如果我们使用自定义的缓冲区的话,就不需要配置这个参数或者使其为DAC_WaveGeneration_None,但为了避免别人误以为你忘了配置这个参数,所以还是多写一句吧,养成好的习惯。

第三个参数:DAC_InitStructure.DAC_OutputBuffer,即是否使用输出缓存。输出缓存的功能主要用来减小输出阻抗,是STM32的DAC无需外部运放就可以直接驱动负载。这里一般设置成DAC_OutputBuffer_Disable,即关闭外部缓存。这是为保险起见,万一驱动能力不够强(本人也没试过@_@),那调试的时间就又多了一些。

参数的配置就这么多了,算得上STM32中最简单的外设配置之一了!

一般来说,用DAC输出波形,传输的数据比较多,所以采用DMA传输可以节省CPU的开支。所以在调用DAC_DMACmd(DAC_Channel_1, ENABLE);函数后别忘了配置DMA函数。详细的配置说明就不写了,这里把代码贴出来:

void DMA_Configuration(void)

{

DMA_InitTypeDef            DMA_InitStructure;

DMA_DeInit(DMA2_Channel3);

DMA_InitStructure.DMA_PeripheralBaseAddr = DAC_DHR12R1_Address;

DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&FIR_OutPutValueTab;

DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;

DMA_InitStructure.DMA_BufferSize = 200;

DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;

DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;

DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;

DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;

DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;

DMA_InitStructure.DMA_Priority = DMA_Priority_High;

DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;

DMA_Init(DMA2_Channel3, &DMA_InitStructure);

DMA_Cmd(DMA2_Channel3, ENABLE);

DMA_ITConfig(DMA2_Channel3,DMA_IT_TC,ENABLE);

}

注意红色字体写的那行代码,当我们传输多个数据时,需要将其设置为连续转换!其余就不赘述了。

接下来谈谈DAC固定电压的配置。

STM32的DAC固定电压配置和上面的波形输出配置相似,不同的地方在于它要多调用一个函数:DAC_SoftwareTriggerCmd(DAC_Channel_1,ENABLE);这样才会输出固定的电平。

具体配置如下:

void DAC_VOLTAGE_Configuration(void)

{

DAC_InitTypeDef            DAC_InitStructure;

DAC_DeInit();

DAC_InitStructure.DAC_Trigger = DAC_Trigger_None;

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_SoftwareTriggerCmd(DAC_Channel_1,ENABLE);

}

配置完成后,调用DAC_SetChannel1Data(DAC_Align_12b_R,4000);函数就可以发送数据了!!极其方便。比起5615,0832之流不知简便了多少!有两点要注意:1、该函数的第一个参数DAC_Align_12b_R不可依据设置ADC外设地址的方式重写这个地址,因为这个参数是不带基址的,而我们重写地址后一半会把基址算进去,这样就不对了!(笔者就曾经卡在这里!看来凡事不可先入为主,否则问题迟早会发生。)2、每次改变发送数据时,要同时调用以下两个函数:

DAC_SetChannel1Data(DAC_Align_12b_R,4000);

DAC_SoftwareTriggerCmd(DAC_Channel_1,ENABLE);

至于为什么,我的理解是:因为DAC改变数据后并不会立即写入寄存器,需要一次更新,由于不是通过定时器触发来更新,因此就只能通过调用函数的方法来更新。

以上仅是本人结合《STM32F10xx参考手册》和编程经验写的心得,错漏疏失在所难免,欢迎读者批评指正,不胜感激!

本文转载自:http://blog.sina.com.cn/s/blog_5fd719d60100t0qz.html

注:若本文禁止转载,请原作者看到此文后与我联系,我会尽快删除,谢谢!

STM32配置DAC输出固定电压和方波相关推荐

  1. stm32的DAC输出

    stm32的DAC输出 一.DAC原理 二.DAC初始化 三.输出正弦波 四.输出音频 一.DAC原理 DAC 为数字/模拟转换模块,故名思议,它的作用就是把输入的数字编码,转换成对 应的模拟电压输出 ...

  2. STM32通过DAC输出音频波形

    文章目录 一.音频及代码获取 二.代码部分 三.总结 四.参考文献 一.音频及代码获取 打开Adobe Audition,新建一个音频文件 采样率8khz,单声道,8bit 点击效果-->生成基 ...

  3. STM32 DAC 输出正弦波、三角波、方波

    DAC可以将数字信号转换成模拟信号,在嵌入式系统开发中运用的十分广泛.在STM32实际运用中,可直接将数值映射成端口的电压值,通过大量的采样点输出,可达到输出指定波形的目的. 1.设置系统时钟(Clo ...

  4. STM32F103VET6——DAC双通道(PA4、PA5)输出不同电压值,串口可控电压输出的大小

    之前想写个程序能够控制STM32F103VET6的DAC双通道输出不同的电压值,并且能够通过串口控制两个通道电压实时可变化,但是在网上一直没找到资源,就反复的查看野火给的范例和数据手册DAC那块输出的 ...

  5. STM32实现DAC功能输出音频波形

    目录 一.DAC简介 二.输出周期为2kHz的正弦波 三.音频信号输出 四.参考资料 一.DAC简介 DAC 为数字/模拟转换模块,故名思议,它的作用就是把输入的数字编码,转换成对应的模拟电压输出,它 ...

  6. 基于STM32的DAC音频输出

    基于STM32的DAC音频输出 一.DAC 1.1 DAC简介 1.2 DAC功能框图剖析 二.使用DAC输出周期2kHz的正弦波 2.1 使用Adobe Audition输出一个周期2khz的正弦波 ...

  7. 基于stm32片内Flash数据的DAC输出

    stm32片内Flash的提示音播放 前言 一.DAC简介 二.使用DAC输出单周期的正弦波 三.PCM模块输出音频 前言 使用用Adobe audition音频编辑软件录制"您好欢迎光临! ...

  8. STM32物联网项目-DAC输出模拟量以及正弦波

    DAC输出正弦波 DAC介绍 ​ STM32 的 DAC 模块(数字/模拟转换模块)是 12 位数字输入,电压输出型的 DAC.DAC 可以配置为 8 位或 12 位模式,也可以与 DMA 控制器配合 ...

  9. pwm一个时间单位_详解STM32的PWM输出及频率和脉宽(占空比)的计算——寄存器配置六步曲!...

    一.stm32的pwm输出引脚是使用的IO口的复用功能. 二.T2~T5这4个通用定时器均可输出4路PWM--CH1~CH4. 三.我们以tim3的CH1路pwm输出为例来进行图文讲解(其它类似),并 ...

最新文章

  1. gevent -1073740791
  2. Unable to simultaneously satisfy constraints.
  3. 【BZOJ3514】Codechef MARCH14 GERALD07加强版,LCT+主席树
  4. MTK驱动(75)--- MT6739平台的thermal高温充电机制调整
  5. 10-20-010-简介-目录-Kylin目录详解
  6. ASP.NET MVC 5高级编程 (pdf书)
  7. CISA,CISM,CISSP证书区别及cisp,oscp,osce,che简介
  8. ASUS TUF Gaming B460M PLUS+RX570+BCM94360CD黑苹果EFI引导文件
  9. ideaIU-2017安装破解及汉化全包
  10. AARRR模型——变现:终极目标(上)
  11. 新疆计算机操作题,新疆维吾尔自治区教师计算机操作题复习8套.pdf
  12. GitHub Error: API rate limit exceeded
  13. 计算机模拟专业委员会,中国化工学会过程模拟及仿真专业委员会成立
  14. python3*1**3 表达式输出结果为_表达式[1, 2, 3]*3的执行结果为______________________。...
  15. 计算机主题绘画能画什么,电脑绘画活动方案
  16. 像素单位(px pt rem em rpx)
  17. 72小时灵感冲刺,创意就该这么玩 | LigaAI Hackathon特别策划
  18. 南京邮电大学操作系统实验四:简单文件系统模拟实验
  19. 【数据结构】-期末复习或者考研复习资料文档
  20. 做设计师要用到的工具软件

热门文章

  1. Innodb存储引擎-idb文件格式解析
  2. DIB迪博数据库(2000-2018年)
  3. Android 音视频深入 十 FFmpeg给视频加特效(附源码下载)
  4. C++实现JPEG格式图片解析(附代码)
  5. 新一代人工智能:从“感知智能”向“认知智能”转化
  6. 软件测试的艺术 读书笔记完整版
  7. 如何自学单片机? 单片机怎么入门?
  8. 计算机应用退修后多久知道结果,计算机核心论文投稿的一点碎碎念
  9. 全国计算机软考网络管理员考试大纲(2012)
  10. 特征选择----relief及reliefF算法