历史上的今天
返回首页

历史上的今天

今天是:2025年03月03日(星期一)

正在发生

2020年03月03日 | 【菜鸟入门】stm32 之 DAC

2020-03-03 来源:eefocus

DAC可谓是stm32继按键最简单的一个寄存器配置吧,花了半个小时搞定!


DAC主要特征

● 2个DAC转换器:每个转换器对应1个输出通道

● 8位或者12位单调输出

● 12位模式下数据左对齐或者右对齐

● 同步更新功能

● 噪声波形生成

● 三角波形生成

● 双DAC通道同时或者分别转换

● 每个通道都有DMA功能

● 外部触发转换


看了这些东西,貌似很激动的样子,我们下面就开始配置DAC外设了


先直接看看寄存器:

位12 DMAEN1:DAC通道1 DMA使能(DAC channel1 DMA enable

该位由软件设置和清除。

0:关闭DAC通道1 DMA模式;

1:使能DAC通道1 DMA模式。

MAMP1[3:0]:DAC通道1屏蔽/幅值选择器(DAC channel1 mask/amplitude selector)  位11:8 

由软件设置这些位,用来在噪声生成模式下选择屏蔽位,在三角波生成模式下选择波形的幅

值。

0000:不屏蔽LSFR位0 / 三角波幅值等于1;

0001:不屏蔽LSFR位[1:0] / 三角波幅值等于3;

0010:不屏蔽LSFR位[2:0] / 三角波幅值等于7;

0011:不屏蔽LSFR位[3:0] / 三角波幅值等于15;

0100:不屏蔽LSFR位[4:0] / 三角波幅值等于31;

0101:不屏蔽LSFR位[5:0] / 三角波幅值等于63;

0110:不屏蔽LSFR位[6:0] / 三角波幅值等于127;

0111:不屏蔽LSFR位[7:0] / 三角波幅值等于255;

1000:不屏蔽LSFR位[8:0] / 三角波幅值等于511;

1001:不屏蔽LSFR位[9:0] / 三角波幅值等于1023;

1010:不屏蔽LSFR位[10:0] / 三角波幅值等于2047;

≥1011:不屏蔽LSFR位[11:0] / 三角波幅值等于4095。


位7:6  WAVE1[1:0]:DAC通道1噪声/三角波生成使能(DAC channel1 noise/triangle wave generation 

enable) 

该2位由软件设置和清除。

00:关闭波形生成;

10:使能噪声波形发生器;

1x:使能三角波发生器。

位5:3  TSEL1[2:0]:DAC通道1触发选择(DAC channel1 trigger selection)  

该位用于选择DAC通道1的外部触发事件。

000:TIM6 TRGO事件;

001:对于互联型产品是TIM3 TRGO事件,对于大容量产品是TIM8 TRGO事件;

010:TIM7 TRGO事件;

011:TIM5 TRGO事件;

100:TIM2 TRGO事件;

101:TIM4 TRGO事件;

110:外部中断线9;

111:软件触发。

注意:该位只能在TEN1= 1(DAC通道1触发使能)时设置。

 位2  TEN1:DAC通道1触发使能(DAC channel1 trigger enable) 

该位由软件设置和清除,用来使能/关闭DAC通道1的触发。

0:关闭DAC通道1触发,写入寄存器DAC_DHRx的数据在1个APB1时钟周期后传入寄存器

DAC_DOR1;

1:使能DAC通道1触发,写入寄存器DAC_DHRx的数据在3个APB1时钟周期后传入寄存器

DAC_DOR1。

注意:如果选择软件触发,写入寄存器DAC_DHRx的数据只需要1个APB1时钟周期就可以传入

寄存器DAC_DOR1。

  位1 BOFF1:关闭DAC通道1输出缓存(DAC channel1 output buffer disable)

该位由软件设置和清除,用来使能/关闭DAC通道1的输出缓存。

0:使能DAC通道1输出缓存;

1:关闭DAC通道1输出缓存。

位0  EN1:DAC通道1使能(DAC channel1 enable)  

该位由软件设置和清除,用来使能/失能DAC通道1。

0:关闭DAC通道1;

1:使能DAC通道1。


因为DAC1对应的是PA4,所以我们在初始化DAC1的时钟时别忘了 PA4


RCC->APB1ENR |= 1<<29;

RCC->APB2ENR |= 1<<2;


因为我们这里不用DMA,所以就关掉


DAC->CR &= ~(1<<12); //close DMA


如果想输出三级波,那就把6:7位都置1,想输出噪声我们就弄成10b,什么都不想要我们就用00b;这里我想玩玩三角波,我就配置称11;


DAC->CR &= ~(3<<6);//好习惯是先把几位全部清空

DAC->CR |= 3<<6;


因为我们上面设置了三级波模式,这里我们来设置三级波的VPP,可以根据上面的datasheet设置!

DAC->CR &= ~(0xf<<8);

DAC->CR |= 0xf<<8;

DA的触发模式,为了方便起见我们之间选用软件触发,但是

所以我们要现设置TEN1=1;然后再设置成软件触发

DAC->CR |= 1<<2;

DAC->CR |= 7<<3; //sw


我们也用不上DAC的缓存,所以二话不说关掉!

DAC->CR |= 1<<1;

下面设置要输出的偏移电源,0当然就是0V了,

DAC->DHR12R1 = 0;


因为我们用到了软件触发,所以我们要时刻关注软件触发寄存器,寄存器就两位:

DAC->SWTRIGR |= 1<<0;


然后就打开DA,开始工作!

DAC->CR |= 1<<0;


下面附上我的代码!


/*  dac.c  */

#include

 

 

void dac_init()

{

RCC->APB1ENR |= 1<<29;

RCC->APB2ENR |= 1<<2;

DAC->CR &= ~(1<<12); //close DMA

DAC->CR &= ~(0xf<<8);

DAC->CR |= 0xf<<8; //Vp = 512

DAC->CR &= ~(3<<6); //

DAC->CR |= 3<<6;

DAC->CR |= 1<<2;

DAC->CR |= 7<<3; //sw

DAC->CR |= 1<<1;

 

DAC->DHR12R1 = 0;

DAC->SWTRIGR |= 1<<0;

DAC->CR |= 1<<0;

}


主函数

#include

#include "init.h"

#include "usart.h"

#include "stdio.h"

#include "dac.h"

 

int main()

{

rs232_init(CPU_72M,9600);

dac_init();

while(1)

{

if(!(DAC->SWTRIGR&(1<<0)))

{

DAC->SWTRIGR |= 1<<0;

}

}

}


效果:

还有什么说的?慢慢瞎搞吧!把瞎搞进行到底!

推荐阅读

史海拾趣

DAYA公司的发展小趣事

在环保意识日益增强的今天,大雅智能积极响应国家节能减排政策,推动绿色环保生产。通过采用环保材料和节能技术,大雅智能有效降低了产品生产和使用过程中的能耗和排放。同时,大雅智能还积极参与环保公益活动,倡导绿色消费理念。这些举措不仅提高了大雅智能的社会责任感形象,也为其可持续发展奠定了坚实基础。

以上五个故事均基于虚构的DAYA公司(大雅智能)在电子行业中的发展经历,旨在展示一个电子科技公司可能面临的市场挑战、机遇以及发展策略。这些故事虽然并非真实事件,但其中蕴含的商业逻辑和发展趋势对于电子行业的其他公司也具有一定的借鉴意义。

DCD [Digital Core Design]公司的发展小趣事

DCD公司自创立之初,就专注于数字核心设计领域的研发。创始人们凭借对电子技术的深刻理解和市场需求的敏锐洞察,带领团队攻克了一个又一个技术难关。在产品研发初期,公司面临着资金短缺和技术难题的双重压力,但团队凭借着坚韧不拔的精神,成功研发出了首款具有竞争力的数字核心设计产品,为公司的发展奠定了坚实的基础。

台湾稳态公司的发展小趣事

台湾稳态公司在创立之初,便明确了自身的技术发展方向和市场定位。公司创始人凭借在电子行业多年的技术积累和敏锐的市场洞察力,带领团队专注于某一特定领域的研发和生产。通过不断的技术创新和优化,稳态公司逐渐在市场中树立起了自己的技术优势和品牌形象。

Directed Energy Inc公司的发展小趣事

为了进一步扩大市场份额,Directed Energy Inc积极寻求与全球范围内的合作伙伴建立合作关系。通过与知名电子产品制造商、分销商和解决方案提供商的合作,公司成功将其产品推向了全球各地。这些合作伙伴不仅为Directed Energy Inc带来了更多的商业机会,还帮助公司更好地了解不同市场的需求和趋势,从而不断调整和优化产品策略。

Frequency Management International公司的发展小趣事

作为一家有社会责任感的企业,FMI深知可持续发展和环保的重要性。公司积极响应国家环保政策,采用环保材料和生产工艺,减少对环境的影响。同时,FMI还致力于节能减排和资源循环利用等方面的研究和实践工作。这些努力不仅体现了FMI对环境保护的承诺和责任感,也为公司的长期发展奠定了坚实的基础。

综上所述,Frequency Management International公司凭借其创立与早期发展、技术创新与产品线拓展、市场拓展与国际化战略、质量管理与客户服务以及可持续发展与环保责任等方面的努力和发展历程,在电子行业中取得了显著的成就和地位。

Boyd Corporation公司的发展小趣事

为了进一步扩大市场份额和提升技术实力,Boyd Corporation进行了一系列战略收购。其中,收购Aavid Thermalloy是其中的重要一环。Aavid在热管理领域拥有卓越的技术和工程团队,通过合并,Boyd Corporation成功将Aavid的技术和团队纳入旗下,进一步增强了其在热管理领域的市场地位。

问答坊 | AI 解惑

企业面试电子类面试题[单片机/MCU/计算机原理]

1、简单描述一个单片机系统的主要组成模块,并说明各模块之间的数据流流向和控制流流向。简述单片机应用系统的设计原则。(仕兰微面试题目) 2、画出8031与2716(2K*8ROM)的连线图,要求采用三-八译码器,8031的P2.5,P2.4和P2.3参加译码,基本地 ...…

查看全部问答>

急: 咨询LM3S8962通过I2C模块访问DAC8571, 位啥不成功?

本帖最后由 dontium 于 2015-1-23 13:42 编辑 先介绍DAC8571 资料; 数字转模拟的DAC,  工作电压3.3V, 目前参考电压输入为1V ,  电路图如下连接:   SDA, SCL 都上拉了,上拉电阻10K; DAC8571 访问关键资料图如下: LM3S8962 配 ...…

查看全部问答>

MSM5100芯片开发

请问各位大虾,有谁知道高通MSM5100芯片用什么语言编程么?老板要用这个芯片,可是我手上一点资料都没有,哪位网友能提供一些帮助,在下感激不尽!…

查看全部问答>

理解FFT图

本帖最后由 dontium 于 2015-1-23 13:22 编辑 作者:Bonnie C. Baker, 德州仪器 (TI)   关键词:模拟电路设计、转换器、ADC、工业应用、医疗电子、Op Amp、系统设计、工程教育、物理验证与分析、信号完整性、设计方法   您可以通过 ...…

查看全部问答>

有关.cio的

ccs编译的时候报warning 里面有个creating output section .cio without SECTIONS specification这里面的.cio是什么东西啊…

查看全部问答>

NTP网络较时编程之大端小端存储

  最近在学习NTP网络较时编程中,遇到了一个问题,这是一个容易被我们忽视的问题,也是一个很重要的问题。 对NTP网络校时编程有一定了解的同学,一定知道NTP包,它的结构如下图: 在编程中,对上图的描述就是用一个结构体: typedef stru ...…

查看全部问答>

ATmega162 串口通信问题(附带CVAVR下载)

第一次用AVR的单片机,没弄懂串口发送数据怎么写。谢谢大家帮忙看看程序编译出来没错,但是收不到数据编译器 CodeVisionAVR V2.03.4(附带下载)下面是我写的程序串口部分晶振用的是11.0592的使用的是PD0、PD1只做输出,不接收数据 void USART ...…

查看全部问答>

【易电源试用】纳米模块LMZ10501

以前确实抽不出时间搞这个。现在按照计划开始试用了。 由于测试条件不理想,图片嘛,这里就不贴了。 今天只测试了LMZ10501的部分特性,且是在输出1.8V下的。以后还要继续作其它测试。 一、空载电流 测试条件:输入5V,      &n ...…

查看全部问答>

如果四旋翼飞行器出个飞行控制的题,能用飞控芯片吗

本帖最后由 paulhyde 于 2014-9-15 03:10 编辑 如果四旋翼飞行器出个飞行控制的题,能用飞控芯片吗?    …

查看全部问答>

大虾们,偶在做一个温湿度传感器,用的DHT21传感器,但是有一段程序困扰我好久了,...

函数名称 : 读温湿度字节函数 功    能 : 读取温湿度每个字节 说    明 : 无 *********************************************************/ void  COM(void)//读字节 {    U8 i;    & ...…

查看全部问答>