STM32基础12--数模转换(DAC)

发布者:sedsedq最新更新时间:2022-07-22 来源: csdn关键字:STM32  数模转换  DAC 手机看文章 扫描二维码
随时随地手机看文章

前言


        在做51单片机项目时,如果需要对外围电路的压输出,往往会在51单片机上面外挂一个DAC转换芯片(例如DAC0808)。但在STM32F407中,不再需要这么干了,因为在STM32的内部就已经集成了DAC电路。


        STM32中,DAC 模块是 12 位电压输出数模转换器。DAC 可以按 8 位或 12 位模式进行配置,并且可与 DMA 控制器配合使用。在 12 位模式下,数据可以采用左对齐或右对齐。DAC 有两个输出 通道,每个通道各有一个转换器。在 DAC 双通道模式下,每个通道可以单独进行转换;当 两个通道组合在一起同步执行更新操作时,也可以同时进行转换。可通过一个输入参考电压

引脚 VREF+ (与 ADC 共享)来提高分辨率。


DAC框图

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


         经过线性转换后,数字输入会转换为 0 到 VREF+ 之间的输出电压。

各 DAC 通道引脚的模拟输出电压通过以下公式确定:


                                DACoutput  =  (VREF /4095)*DOR 


功能需求

        1)DAC的参考电压采用 Vref  = 3.3V,通过设定DHR寄存器的值,改变DOR的值,从而改变DACOutput电压的输出;


        2)使用ADC1对DAC产生的电压进行测量;


        3)ADC测量的结果通过串口打印输出到PC端。


硬件电路

        在硬件电路中,PA4作为DAC的输出,而PA5作为ADC的输入。

 

 STM32CubeMx配置DAC

功能代码实现 

 STM32CubeMx生成初始化代码

ADC与DAC功能代码


       HAL_DAC_SetValue(&hdac,DAC1_CHANNEL_1,DAC_ALIGN_12B_R,2048);

      

       HAL_ADC_Start(&hadc1);  

       HAL_ADC_PollForConversion(&hadc1, 200);

 

       

       if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1), HAL_ADC_STATE_REG_EOC))

 

      {

 

          /*##-3- Get the converted value of regular channel  ######################*/

 

         AD_Value = HAL_ADC_GetValue(&hadc1);

         printf("AD_Value = %d rn",AD_Value);

         sprintf(str,"DAC Voltag : %f rn",(float)((AD_Value*3.3)/4096));

         HAL_UART_Transmit(&huart1,(uint8_t *)str,strlen((const char *)str),100);

 

      }

    

      HAL_Delay(1000);


         注:


        1)在HAL_DAC_SetValue的第3个参数是填写格式(这个格式需要与ADC的格式一直,否则会对电压解释错误);


        2)在HAL_DAC_SetValue的第4个参数是填写DHR的数值(该数值决定DAC输出的电压);


串口输出

关键字:STM32  数模转换  DAC 引用地址:STM32基础12--数模转换(DAC)

上一篇:STM32基础13--直接存储器访问(DMA)
下一篇:STM32基础11--模数转换(ADC)

推荐阅读最新更新时间:2024-11-12 10:56

STM32自学笔记(1.什么是STM32
STM32微控制器的核心: Cortex-M3处理器。 嵌套中断向量控制器(NVIC)是Cortex-M3处理器中一个比较关键的组件。提供了标准的中断架构和优秀的中断响应能力,为超过240个终端源提供专门的中断入口,并可以赋予每个中断源单独的优先级。 Cortex-M3的CPU支持两种运行模式: 线程模式和处理模式(都拥有自己独立的堆栈)。 Cortex-M3还包括一个24位的可自动重装载定时器,可以为实现内核(RTOS)提供一个周期性中断。 Cortex-M3支持新型的ARM Thumb-2指令集。 STM32具有精密性、可靠性和安全性 可靠性 有两个看门狗定时器。 第一个叫窗口看门狗,窗口看门狗必
[单片机]
STM32学习笔记一一红外遥控
1. 简述 红外遥控是一种无线、非接触控制技术,具有抗干扰能力强,信息传输可靠,低功耗,低成本。 红外遥控的编码方式目前广泛使用的是: PWM (脉冲宽度调制)的 NEC 协议和 Philips PPM(脉冲位置调制) 的 RC-5 协议的。 1.1 NEC 协议定义 NEC 码的位定义: 一个脉冲对应 560us 的连续载波,一个逻辑 1 传输需要2.25ms(560us 脉冲+1680us 低电平),一个逻辑 0 的传输需要1.125ms(560us 脉冲+560us 低电平)。而遥控接收头在收到脉冲的时候为低电平,在没有脉冲的时候为高电平,这样,我们在接收头端收到的信号为:逻辑 1 应该是 560us 低+1680u
[单片机]
<font color='red'>STM32</font>学习笔记一一红外遥控
STM32 高级定时器 4种触发输入模式
IC1是输入捕获通道1. TI1,是定时器输入通道1. 他们可以有个交错的关系,比如IC1,可以输入到TI2,也可以输入到TI1,所以得设置一下.
[单片机]
<font color='red'>STM32</font> 高级定时器 4种触发输入模式
STM32 SysTick延时的使用说明
/*初始化时钟*/ void Init_SysTick(void) { if(SysTick_Config(SystemCoreClock / 1000)) //注意:3.5库中 SystemFrequency 被 SystemCoreClock 取代。 while(1); } /*延时1ms函数*/ __IO uint32_t TimingDelay; void delay_ms(__IO uint32_t nTime) { TimingDelay = nTime; while(TimingDelay != 0); } /*stm32f10x_it.c中的void SysTick_Handler(v
[单片机]
stm32休眠 以及休眠中如何喂狗
在STM32开发中经常会用到独立看门狗(IWDG)和低功耗模式,看门狗是为了检测和解决由软件错误引起的故障,低功耗模式是为了在CPU不需要继续运行时进入到休眠模式用以节省电能。其中独立看门狗的时钟由独立的RC振荡器(STM32F10x一般为40kHz)提供,即使在主时钟出现故障时,也仍然有效,因此可以在停止和待机模式下工作。而且独立看门狗一旦启动,除了系统复位,它不能再被停止。但这样引发的一个问题是当MCU进入到低功耗模式后由于CPU停止运行无法喂狗,会导致系统频繁复位。那如何解决这个问题呢,难道独立看门狗和低功耗模式没法同时使用? 一个很好的方式是在休眠模式下通过RTC定时唤醒来喂狗,喂完够在进入继续进入到休眠模式。比如看门狗复
[单片机]
串口通信协议stm32
串口通信指串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。 UART串口时序 UART串口配置 1)串口时钟使能。串口作为 STM32 的一个外设,其时钟由外设时钟使能寄存器控制,这里我们使用的串口1是APB2ENR寄存器的第14位。(除了串口 1 的时钟使能在 APB2ENR 寄存器,其他串口的时钟使能位都在 APB1ENR 寄存器,而 APB2(72M)的频率一般是 APB1(36M)的一倍。) 2)串口复位。当外设出现异常的时候可以通过复位寄存器里面的对应位设置,实现该外设的复位,然后重新配置这个外设达到让其重新工作的目的。一般在系统刚开始
[单片机]
串口通信协议<font color='red'>stm32</font>
STM32的ADC单次转换设计
下面分别为库函数和直接操作寄存器的两个范便,我都已测试通过 使用此程序前必要对GPIO设好为模拟输入方式 =====================================库函数版========================================= void AD_CONFIG_SINGLE(void ) { //先配置IO口: ADC_InitTypeDef adcInitStruct; ////PB1 作为模拟通道输入引脚 RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 , ENABLE);//使能ADC和GPIOC时钟 //配置ADC: //将ADC配置成非
[单片机]
<font color='red'>STM32</font>的ADC单次转换设计
在Mac OSX中开发STM32程序
在Mac OSX下编写STM32程序: 1、下载stm32的gcc软件包,参考下面URL: 2、安装moxa NPORT 5110在虚拟Windows中; 3、安装ST Flash Loader 软件; 需要注意的: 1、Mac OSX 需要10.5; 2、NPORT装完要关机重启;
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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