在DAC的主要特征中可以看出,DAC内部还带有波形发生器。
DAC 主要特征
2个DAC转换器:每个转换器对应1个输出通道
8位或者12位单调输出
12位模式下数据左对齐或者右对齐
同步更新功能
噪声波形生成
三角波形生成
双DAC通道同时或者分别转换
每个通道都有DMA功能
外部触发转换
输入参考电压V REF+
比如我们要输出一个三角波,就不需要自己去计算三角波每个点的电压是多少,通过内部自带的三角波发生器,就可以产生三角波。具体的操作步骤在官方文档中也有介绍。
三角波生成
可以在DC或者缓慢变化的信号上加上一个小幅度的三角波。设置WAVEx[1:0]位为’10’选择DAC的三角波生成功能。设置DAC_CR寄存器的MAMPx[3:0]位来选择三角波的幅度。内部的三角波计数器每次触发事件之后3个APB1时钟周期后累加1。计数器的值与DAC_DHRx寄存器的数值相加并丢弃溢出位后写入DAC_DORx寄存器。在传入DAC_DORx寄存器的数值小于MAMP[3:0]位定义的最大幅度时,三角波计数器逐步累加。一旦达到设置的最大幅度,则计数器开始递减,达到0后再开始累加,周而复始。将WAVEx[1:0]位置’0’可以复位三角波的生成。
注意:
为了产生三角波,必须使能 DAC 触发,即设 DAC_CR 寄存器的 TENx 位为 ’1’ 。
MAMP[3:0] 位必须在使能 DAC 之前设置,否则其值不能修改
下面通过代码来设置DAC输出三角波
#include "dac_wave.h"
//通过DAC通道1和通道2输出三角波
void DAC_Wave_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
DAC_InitTypeDef DAC_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA, &GPIO_InitStructure);
TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
TIM_TimeBaseStructure.TIM_Period = 0x0F;
TIM_TimeBaseStructure.TIM_Prescaler = 0x01;
TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
TIM_SelectOutputTrigger(TIM2, TIM_TRGOSource_Update);
DAC_InitStructure.DAC_Trigger = DAC_Trigger_T2_TRGO;
DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_Triangle;
DAC_InitStructure.DAC_LFSRUnmask_TriangleAmplitude = DAC_TriangleAmplitude_4095;
DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Disable;
DAC_Init(DAC_Channel_1, &DAC_InitStructure);
DAC_InitStructure.DAC_LFSRUnmask_TriangleAmplitude = DAC_TriangleAmplitude_2047;
DAC_Init(DAC_Channel_2, &DAC_InitStructure);
DAC_Cmd(DAC_Channel_1, ENABLE);
DAC_Cmd(DAC_Channel_2, ENABLE);
DAC_SetDualChannelData(DAC_Align_12b_R, 0, 0);
TIM_Cmd(TIM2, ENABLE);
}
将DAC的通道1和通道2都开启,要自动输出三角波,这时候就不能使用软件自己去触发了,在这里要借助定时器来自动触发,当定时器定时时间到了之后,就会触发一次DAC的输出,这里使用的是定时器2触发,所以初始化DAC的时候。也要初始化定时器2,接下里初始化DAC,设置DAC的触发方式为定时器2触发,然后选择三角波发生器,接下来设置通道1三角波的幅度最大值为4095。也就是输出的三角波最大电压值为3.3V。设置通道2的三角波最大幅值为2047,也就是通道2的最大值为通道1的一半1.65V。最后使能DAC输出。这是三角波就会的PA4和PA5引脚上自动输出了。通过示波器就能看到这两个引脚上的波形了。
上一篇:STM32F103使用DAC功能输出正弦波
下一篇:STM32F103DAC功能实现
推荐阅读最新更新时间:2024-11-09 19:41
推荐帖子
- msp430的pcb板子,段码液晶不知道怎么回事显示有影响
- 我画了一个板子,用的是内部lcd控制器控制段码液晶显示,不知道为啥老是显示受影响,不该亮的也暗暗地显示,程序绝对没有问题,因为下载到另外一个板子上显示很好,不知道是不是pcb的哪受影响?谢谢msp430的pcb板子,段码液晶不知道怎么回事显示有影响应该硬件连接的问题,液晶屏没连接好?qwqwqw2088发表于2014-8-2508:50应该硬件连接的问题,液晶屏没连接好? 液晶链接应该没问题,是不是有信号干扰或者是一些电阻电容选择的问题信号干扰如没有大的电流负载这
- godlovewinner 微控制器 MCU
- 单片机IO能不能直接接NPN基极,使用推挽高电平驱动三极管?
- IO口直接接到NPN三极管基极(没有在接基极串接电阻)试了下,推挽输出驱动三极管工作在开关状态,电路工作不正常然后找了半天原因,想着可能是推挽电流太大,换成用IO的上拉输入去驱动三极管工作在开关状态比较合适实验现象:推挽高电平驱动10ms,然后推挽低电平10ms,NPN管子工作在开关状态,结果无论是高电平还是低电平三极管始终导通;换成上拉输入驱动三极管导通,推挽低电平使三极管工作在截止状态,一切正常。为什么会这样?单片机IO能不能直接接NPN基极,使用推挽高电平驱动三极管?“结果无
- 飞鸿浩劫 stm32/stm8
- Python 进阶学习资源 0积分下载
- Python作为一种高级、通用的解释型编程语言,以其简洁的语法和易于学习的特性,在人工智能领域得到广泛应用,包括机器学习、深度学习、自然语言处理和计算机视觉等领域。因此,在开始人工智能开发之前,建立坚实的Python基础是必不可少的。本文集收集整理了Python进阶学习资源,不乏一些经典书籍,涵盖文件操作与异常处理、堆栈与队列、迭代器与生成器、进程和线程、编程技巧和示例代码等知识。希望对大家有所帮助。资源预览:Python高级编程第2版PythonCookbook(
- arui1999 下载中心专版
- MSP430-IO端口介绍
- MSP430的端口有P1、P2、P3、P4、P5、P6、S和COM(型号不同,包含的端口也不仅相同,如MSP430X11X系列只有P1,P2端口,而MSP430X4XX系列则包含全部上述端口),它们都可以直接用于输入/输出。MSP430系统中没有专门的输入/输出指令,输入/输出操作通过传送指令来实现。端口P1`P6的每一位都可以独立用于输入/输出,即具有位寻址功能。常见的键盘接口可以直接用端口进行模拟,用查询或者中断方式控制。由于MSP430的端口只有数据口,没有状态口或控制口,在实际
- 火辣西米秀 微控制器 MCU
- 发一个 SI4463的 WDS 配置软件
- 发一个SI4463的WDS配置软件(由于文件大于15M,要分3个包)发一个SI4463的WDS配置软件发一个SI4463的WDS配置软件(由于文件大于15M,要分3个包)发一个SI4463的WDS配置软件(由于文件大于15M,要分3个包)
- gdgn526345 RF/无线
- 【MicroPython】+家用气象仪
- 我的家用气像仪已经开工了,以后分享的内容都在会本贴分享。全程都开源!欢迎大家来指教,纯的菜鸟,所以希望大家帮忙指正。估对这python语言是完全零了解,所以是一边看着语法书一边写的,github.com上面的分享的驱动也挺多的,不过有些怪怪的,比如MicroPython5110的驱动不是太完善,没有提供简易字库供,需要自己建字库,另外也没有提供单字符与字符串输出API,所以就需要自己来写了,昨天简单的驱动一下LCD5110,今天去github.com别的树莓派上拷了个简易字库,建了一个
- strong161 MicroPython开源版块
设计资源 培训 开发板 精华推荐
- KSZ8864CNX-EVAL,KSZ8864 集成 4 端口 10/100 以太网管理型交换机评估板
- LT1962EMS8 演示板、低噪声 LDO 稳压器、2.3 - 20Vin、跳线可选 Vout @ 300mA、1.22、2.5、3、3.3 或 5Vout
- 使用 Semtech 的 SC410A 的参考设计
- TWR-S08DC-PT60、MC9S08P 塔式系统子卡,用于 PC9S08PT60VLH 5 伏、8 位 MCU
- AD8508ACBZ-REEL7 脉搏血氧计红色和红外电流源作为电压基准器件的缓冲器的典型应用电路
- LT1317CMS8 低噪声 33V 变容二极管偏置电源的典型应用电路
- EVAL-ADE7978EBZ,评估 ADE7978 隔离式计量芯片组的评估板
- 使用 Broadcom Inc 的 HFBR-1533Z 的参考设计
- LTC2953IDD-1 电压监控器的典型应用电路,用于具有低电池电量检测功能的 PowerPath 控制器
- TCR2BF30、200mA、3V 输出电压 CMOS 低压降稳压器的典型应用,在 SMV(SOT-25) 中具有自动放电功能