历史上的今天
今天是:2025年01月06日(星期一)
2020年01月06日 | STM32的DAC深入探究之一
2020-01-06 来源:eefocus
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
史海拾趣
|
为增加人气,发份电子厂商名录,收费附件,注册就好下。 厂商名称,EMAIL地址,先看看会有多少人想要,才会发重点部分,所有数据都是辛苦收集来的,仅供找工作时备用。… 查看全部问答> |
|
一个简单的串口通信实验:先通过串口发送一行字符串“hell,please input your char:”到pc机上,然后用户在PC键盘上随意按下键值,开发板在串口读取这个键值,并且将所读取到的键值回发给PC机显示。PC端我用超级终端和DNW串口工具都试了一次,但结 ...… 查看全部问答> |
|
我现在用的是CDMA模块, 要开发一系列的GPSONE指令, 其中有设置定位精度门限AT+QOSTH,要求如下: 语法: AT+QOSTH=threshold - threshole: 为0~255之间的数字,定位精度的最低门限。 结果: 如果设置正确,返回OK,如下: OK 如果设置失败 ...… 查看全部问答> |
|
提供基于Vxworks的各种PowerPC平台(MPC82XX/MPC85XX/MPC7448/AMCC440GX等) Beijing Freesense是专业PowerPC设计公司,提供基于Vxworks和Liunx的各种PowerPC平台(MPC82XX/MPC85XX/MPC7448/AMCC440GX等),提供设计开发服务。Tel: 010-82790138、13501394847,zhytang@freesense.com.cn… 查看全部问答> |
|
s3c6410_iic.dll 文件可以被加载,也生成了IIC0设备,但是IIC_Init()函数里的打印信息没有输出来: DEBUGMSG(1,(TEXT(\"+IIC_Init\\r\\n\"))); 打开IIC0设备进行操作也没有信号丛SCL与SDA输出。 为什么驱动被加载了,但没有跑IIC_Init()函数 ...… 查看全部问答> |
|
我的PDA 宏基N300 flash坏了,开机死在BOOT画面,重新用SD卡刷机也能刷过,但是还是死在BOOT画面,换好机器的FLASH能好,现在想换片新的FLASH,请问各位怎么烧写? 目前的文件有: EBOOT.bin EBOOT.nb0 flash.dio superipl.nb0 以上这几个文件是拷入S ...… 查看全部问答> |
|
各位高手请指点一下:我刚刚毕业,在学校接触过嵌入式的一些东西,但学的相当有限。现在想要学习嵌入式,我应该从何入手?如果我打算从事嵌入式方面的工作,我有没有参加“嵌入式培训”必要?另外,那些培训机构比较好?谢谢,各位热心人!… 查看全部问答> |




