STM32—DAC配置

发布者:Enchanted2021最新更新时间:2021-08-06 来源: eefocus关键字:STM32  DAC配置  寄存器 手机看文章 扫描二维码
随时随地手机看文章

一.DAC介绍

ADC是模数转换器,可以将模拟电压转换位数字信号;DAC是数模转换器,可以将数字信号转换为模拟电压。


STM32F103ZET6内部DAC有2个通道,12位数字输入(也可以配置为8位),可以按要求输出不同的信号波形,其主要特点如下:


2个DAC转换通道

每个通道都有DMA功能

2个通道可以同时转换或者分别转换

输入信号可以是12位或8位

12位输入模式分为:右对齐、左对齐

有同步更新功能

可以生成噪声波形

可以生成三角波

DAC框图如下:

在这里插入图片描述

二.主要寄存器说明

一般使用DAC情况不多,而且使用也就是单纯输出电压,基本用不到STM32输出一些特殊的波形,所以了解一下基本的寄存器就可以配饰DAC了。


DAC 输出是受 DORx 寄存器直接控制的,但是不能直接往 DORx寄存器写入数据,而是通过 DHRx 间接的传给 DORx 寄存器,实现对 DAC 输出的控制。


比如通道1的12位右对齐数据保持寄存器:

在这里插入图片描述

控制DAC的就是DAC控制寄存器了:

在这里插入图片描述
在这里插入图片描述

这种东西,现在查一下参考手册就可以很快掌握。


三.代码及配置

PA4开始设置为模拟输入是为了防止信号干扰,在使能DAC后,PA4会自动与DAC模拟输出相连,所以不必担心。


/* DAC1  PA4 模拟输入 12位右对齐 参考电压3.3V */

void DAC1_Init( void )

{

GPIO_InitTypeDef GPIO_InitStruct;

DAC_InitTypeDef DAC_InitStruct;

RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE );

RCC_APB1PeriphClockCmd( RCC_APB1Periph_DAC, ENABLE );

GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AIN;//GPIO引脚模式:模拟输入

GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4;

GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init( GPIOA, &GPIO_InitStruct );

GPIO_SetBits( GPIOA, GPIO_Pin_4 );

DAC_InitStruct.DAC_LFSRUnmask_TriangleAmplitude = DAC_LFSRUnmask_Bit0;//只有波形发生时才使用

DAC_InitStruct.DAC_OutputBuffer = DAC_OutputBuffer_Disable;//不使用输出缓存

DAC_InitStruct.DAC_Trigger = DAC_Trigger_None;//不触发

DAC_InitStruct.DAC_WaveGeneration = DAC_WaveGeneration_None;//不使用波形发生

DAC_Init( DAC_Channel_1, &DAC_InitStruct );

DAC_Cmd( DAC_Channel_1, ENABLE );

DAC_SetChannel1Data( DAC_Align_12b_R, 0 );

}


/* 参考电压3.3V 12位分辨率:0~4095 vol代表输出电压的100倍:0~330 */

void Set_DAC_Vol( uint16_t vol )

{

uint16_t x;

x = (uint16_t)4096*(vol/330);

DAC_SetChannel1Data( DAC_Align_12b_R, x );

}

关键字:STM32  DAC配置  寄存器 引用地址:STM32—DAC配置

上一篇:STM32—驱动GY85-IMU模块
下一篇:STM32—PID控制在直流电机中的应用

推荐阅读最新更新时间:2024-10-30 18:36

stm32作为spi的从机使用例程
STM32的SPI可以作为master,也可以作为slave,作为slave的例程比较少,今天经过几个小时的折腾,终于把数据获取出来了,经验证和元数据是一致的。现将源代码贴在这里,供有需要的人参考。 硬件连接: STM32(作为从设备) 外部设备 PB12-SPI2-NSS------------ CS PB13-SPI2-SCK------------- CLK PB14-SPI2-MISO----NC PB15_SPI2-MOSI----------- data STM32作为从设备的时候,获取数据的接口为MOSI(PB15),STM32只需要从SPI接口获取数据,不需要发送数据,因此MISO(PB14)悬空。
[单片机]
小试STM32中断程序
前段时间用STM32F103VBT6写了一个中断的函数,借此机会想了解下STM32的中断机制,用过之后发现STM32的中断配置相当灵活,稳定行很高,测试发现几乎没出过什么差错。我在程序里开了三个中断,一个计数器用于精确延时用,另外两个为外部事件处理中断,下面一一详细介绍,方便初学者入门。 在进行STM32中断配置之前首先需要了解下它的中断部分: 一、Cortex-M3中断机制 在STM32处理器中有43个可屏蔽中断通道(不包含 16个 Cortex™-M3的中断线)。共设置了16个可编程的优先等级(使用了 4位中断优先级);它的嵌套向量中断控制器(NVIC)和处理器核的接口紧密相连,可以实现低延迟的中断处理和有效处理地处理
[单片机]
小试<font color='red'>STM32</font>中断程序
STM32 高级定时器-PWM简单使用
高级定时器与通用定时器比较类似,下面是一个TIM1 的PWM 程序,TIM1是STM32唯一的高级定时器。共有4个通道有 死区有互补。 先是配置IO脚: GPIO_InitTypeDef GPIO_InitStructure; /* PA8设置为功能脚(PWM) */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(
[单片机]
<font color='red'>STM32</font> 高级定时器-PWM简单使用
详解STM32堆栈
学习STM32单片机的时候,总是能遇到“堆栈”这个概念。分享本文,希望对你理解堆栈有帮助。 对于了解一点汇编编程的人,就可以知道,堆栈是内存中一段连续的存储区域,用来保存一些临时数据。堆栈操作由PUSH、POP两条指令来完成。而程序内存可以分为几个区: 栈区(stack) 堆区(Heap) 全局区(static) 文字常亮区程序代码区 程序编译之后,全局变量,静态变量已经分配好内存空间,在函数运行时,程序需要为局部变量分配栈空间,当中断来时,也需要将函数指针入栈,保护现场,以便于中断处理完之后再回到之前执行的函数。 栈是从高到低分配,堆是从低到高分配。 普通单片机与STM32单片机中堆栈的区别 普通单片机启动时,不需要用b
[单片机]
详解<font color='red'>STM32</font>堆栈
IAR Systems发布最新开发工具 支持ST STM32系列微控制器
2007年7月31日,瑞典乌普萨拉市,IAR Systems发布最新的开发工具IAR Embedded Workbench 4.42,支持意法半导体(ST)最新的基于ARM Cortex-M3内核的STM32系列微控制器。STM32具有很好的性能,特别适用于有高性能、低功耗、低成本需求的嵌入式应用。IAR Systems公司与意法半导体紧密合作,即时发布相应的开发工具。 支持ARM Cortex-M3控制器的IAR Embedded Workbench是一个完全集成的开发环境,它包含C/C++编译器、项目管理器、编辑器、链接器以及C-SPY调试器。这款开发工具借鉴了 IAR Systems多年对ARM、Thumb 以及 Thumb
[新品]
STM32掌机教程7,演奏音乐
使用定时器来计算时间   在电子琴这节中,我们已经讲述了蜂鸣器的原理,知道如何用蜂鸣器演示不同音调的音乐,本节改进根据频率计算周期的方法,改为定时器,精确度更高,且不再阻塞CPU。   首先,我们不再把蜂鸣器的控制引脚PB1作为普通IO,而是作为定时器的通道。在IO的初始化中,不应当继续操作PB1。通过查看数据手册,可以知道,PB1可以作为定时器3的通道4。(当然也可以作为定时器1和定时器8的通道,只不过定时器1和8是高级定时器,用起来稍微复杂一点点)。 通道的概念类似于道路。   然后编写初始化函数。这段初始化函数可能比较复杂,我们暂时无需深究,只需要知道,这个定时器做了这么一件事情: 把原先这样的代码延时,交给了定时器自
[单片机]
<font color='red'>STM32</font>掌机教程7,演奏音乐
ARMv8-A架构基础之系统控制寄存器
系统控制寄存器(SCTLR)用于控制标准内存和系统设备,并为在硬件内核中实现的功能提供状态信息。 cpsr_bits.png 并不是所有的位在EL1上都可用。 各个位代表以下内容: UCI 设置此项时,在AArch64的EL0中可以访问DC CVAU,DC CIVAC,DC CVAC和IC IVAU指令。 EE 异常字节序。 0小端 1大端。 EOE EL0中数据访问的字节顺序。这个位的可能值是: 0小端。 1大端。 WXN 写入权限对XN(eXecute Never)的涵义。 0有写入权限的区域不被强制为XN。 1有写入权限的区域被强制为XN。 nTWE 值为0表示如果指令将导致硬件内核休眠,则WFE指令会陷入
[单片机]
2010年内标准逻辑的平均售价将继续上涨
  据iSuppli公司,标准逻辑产品处于配给状态,供应商继续努力完成未交货订单并确定潜在的扩张计划。   与其它一些元件领域不同,标准逻辑,即用于管理和发送数字信号的门、触发器和寄存器等通用数字器件,2010年第一季度平均交货期一直保持在10到12周,处于正常水平。   但是,4月份形势完全改变,需求增长速度开始超过供应。铜和铝等等材料供应短缺和价格上涨,促成了现在的情况,导致标准逻辑交货期延长到18至20周,和其它器件一样处于供应紧张的状态。   标准逻辑的价格在今年大部分时间全面上涨,每月上涨幅度从不到1%至8%不等。   下图所示为iSuppli公司的2009年11月至2011年第一季度标准逻辑价格预测与历史价格走
[嵌入式]
2010年内标准逻辑的平均售价将继续上涨
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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