STM32F103DAC功能实现

发布者:phi31最新更新时间:2022-01-27 来源: eefocus关键字:STM32F103  模拟信号 手机看文章 扫描二维码
随时随地手机看文章

所谓的DAC功能也就是将数字信号转换为模拟信号,一般情况下使用比较多的就是ADC功能,也就是将模拟信号转换为数字信号,多用于读取传感器的值。但是有时候需要控制某些传感器,需要用模拟信号控制,这就需要将数字信号转换为模拟信号了。


数字/模拟转换模块(DAC)是12位数字输入,电压输出的数字/模拟转换器。

或12位模式,也可以与DMA控制器配合使用。DAC工作在12位模式时,数据可以设置成左对齐或右对齐。DAC模块有2个输出通道,每个通道都有单独的转换器。在双DAC模式下,2个通道可以独立地进行转换,也可以同时进行转换并同步地更新2个通道的输出。DAC可以通过引脚输入参考电压V REF+ 以获得更精确的转换结果。


DAC 主要特征


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

8位或者12位单调输出

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

同步更新功能

噪声波形生成

三角波形生成

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

每个通道都有DMA功能

外部触发转换

输入参考电压V REF+

下面就通过代码来实现模拟信号输出。


#include "dac.h"


void DAC1_Init(void)

{

    GPIO_InitTypeDef GPIO_InitStructure;

    DAC_InitTypeDef DAC_InitStructure;


    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC , ENABLE);


    //PA4设置为为模拟输入,使能DAC通道后,PA4会与DAC模拟输出相连,设置为输入为了避免了干扰

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //设置为模拟输入

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

    GPIO_Init(GPIOA, &GPIO_InitStructure);


    DAC_InitStructure.DAC_Trigger = DAC_Trigger_None; //不使用触发功能 TEN1=0

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

    DAC_InitStructure.DAC_LFSRUnmask_TriangleAmplitude = DAC_LFSRUnmask_Bit0; //屏蔽、幅值设置

    DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Disable; //DAC1输出缓存关闭

    DAC_Init(DAC_Channel_1, &DAC_InitStructure); //初始化DAC通道1


    DAC_Cmd(DAC_Channel_1, ENABLE); //使能DAC1

    DAC_SetChannel1Data(DAC_Align_12b_R, 0); //12位右对齐数据格式设置DAC值

}

//设置通道1输出电压

//vol:0--3300,代表0-3.3V

void DAC1_Set_Vol(u16 vol)

{

    float temp = vol;

    temp /= 1000;

    temp = temp * 4096 / 3.3;


    DAC_SetChannel1Data(DAC_Align_12b_R, temp);

}


在初始化的时候,要注意一个问题,STM32F103单片机的DAC输出通道有两个。

image.png

PA4和PA5,但是在初始化引脚的时候,要将PA4和PA5初始化为模拟输入功能。这个在官方文档上也有说明。

image.png

内部自动就会将PA4和PA5与模拟输出引脚连接起来。所以在初始化的时候,虽然用的是输出功能,但是还是要将引脚设置为输入。


初始化引脚之后,接下来初始化DAC功能,在这里不使用触发功能,也不使用波形发生功能。直接通过软件来控制


接下里通过一个函数将要输出的电压值换算为寄存器的设置值。DAC的转换为12位,所以最大值就是2^12,也就是4096,而stm32单片机的供电电压值3.3V,所以将要设置的电压值除以3.3,然后乘以4096就是DAC寄存器需要设置的值。


如果要输出模拟电压值时,只需要在主函数中调用DAC1_Set_Vol()函数,并将要设置的电压值传递给这个函数就行了。


int main(void)

{

    u16 adcx;

    float temp;

    u8 t = 0;

    u16 dacval = 0;

    u8 key;


    delay_init();

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

    uart_init(115200);

    LED_Init();

    DAC1_Init();    

    while(1)

    {

        LED0 = !LED0;

        DAC1_Set_Vol(1000);

        delay_ms(100);

    }

}


在主函数中设置DAC输出的电压值为1000,也就是1V。这时通过万用表就可以在stm32单片机的PA4引脚量到1V的电压值了。

关键字:STM32F103  模拟信号 引用地址:STM32F103DAC功能实现

上一篇:STM32F103使用DAC功能输出三角波
下一篇:STM32F103单片机驱动蜂鸣器

推荐阅读最新更新时间:2024-11-10 23:27

STM32F103ZET6 — EXTI
STM32F103ZET6 支持 20 个外部中断输入(EXIT0~EXIT19),其中有4个: EXTI线16连接到PVD输出 EXTI线17连接到RTC闹钟事件 EXTI线18连接到USB唤醒事件 EXTI线19连接到以太网唤醒事件(只适用于互联型产品) 另外的16个均可以作为外部输入中断,其中: EXIT0~EXIT4 有独立的中断向量 EXIT6~EXIT9 共享一个中断向量 EXTI9_5_IRQHandler EXIT10~EXIT16 共享一个中断向量 EXTI15_10_IRQHandler 共享的中断向量需要在对应的 ISR 中通过读取 Pending 的标志位来判断到底
[单片机]
FreeRTOS+STM32F103串口通信错误解决方法
在调试FreeRTOS系统时,在串口中断中用队列存储数据,然后再定时器中断中用队列接收数据,并通过串口打印出来。在调试代码中编译器报错。 …OBJLED.axf: Error: L6915E: Library reports error: __use_no_semihosting was requested, but _ttywrch was referenced 在网上搜索之后,找到了一个解决方法。在usart.c文件中添加以下代码,可以解决这个问题。 //__use_no_semihosting was requested, but _ttywrch was _ttywrch(int ch) { ch = ch
[单片机]
FreeRTOS+<font color='red'>STM32F103</font>串口通信错误解决方法
stm32F103状态机矩阵键盘
矩阵键盘程序,作为麦知club小车项目的一部分,从IAR状态机应用修改而来。 IAR7.4+STM32CUBEMX调试通过。 键盘行4,列3,每条线都有10K上拉电阻。改到4×4矩阵也很容易。 行线设置为 输入,针脚为浮空; 列线设置为开漏输出。 不支持长按和组合键,主要是我不会改。 在OS中使用20ms任务周期调用。 以下贴出代码。 keypad.h /* * * Name: keypad.h */ #ifndef KEYPAD_H #define KEYPAD_H #include stm32f1xx_hal.h #include pinname.h #define
[单片机]
基于STM32F103的语音识别汽车空调控制系统设计
引言 现在汽车上使用的电器越来越多,驾驶员需要手动操作的电器开关也越来越多,不但增加了驾驶员的负担,还影响了行车安全。本文以STM32F103VET6(以下简称STM32)芯片为控制核心,采用高性能LD3320语音识别芯片,设计基于语音识别的汽车空调控制系统。该系统可以用语音有效控制汽车空调,减轻了驾驶员的操作负担,保证行车过程中的安全。 1 系统硬件设计 运用语音识别技术,结合各种传感器对车身内外的环境(如气温、阳光强度等)以及制冷压缩机的状态等多种参数进行实时检测,与设定参数相比较,微控制器经过运算处理做出判断,输出相应的调节和控制信号。执行机构经过实时调整和修正,实现对车厢内空气环境全方位、多功能的调节和控制。系统的执行
[单片机]
基于<font color='red'>STM32F103</font>的语音识别汽车空调控制系统设计
用I/O操作实现RS232口数字及模拟信号的采集
1. 前言 RS232端口几乎是所有x86计算机必备的端口,它可以连接FAX/MODEM设备、串行鼠标器、串行小键盘、采集模块、PLC等,还可以连接RS232-RS485适配接头,控制RS485网络设备。RS232端口广泛采用9芯D型接头,具有接线简单、传输速率高、传数据可靠等优点。除了Tx/Rx方式的高效数据传输外,RS232接口还具备直接I/O输入输出能力。本文介绍的是利用RS232接口直接完成4路数字量信号的输入,可广泛地应用于机关开关式传感器、临近感应式传感器、霍尔效应式传感器、小型机械键盘、TTL信号的输入。除此之外,利用简单的I/O操作,还可实现RS232口的多路模拟信号采集。简单的串口I/O操作,只是利用RS232口的
[嵌入式]
安捷伦推出全新旗舰型微波模拟信号发生器
  2013 年 12 月5日,北京——安捷伦科技公司(NYSE:A)日前宣布推出两款新型信号发生器,具备无与伦比的相位噪声、输出功率和频率切换速度性能。新型 N5183B MXG 和 N5173B EXG 微波模拟信号发生器在规格、速度和成本等方面均具备一定的优势,为安捷伦旗舰产品 E8267D 矢量 PSG 和 E8257D 模拟 PSG 提供有力的补充。   安捷伦副总裁兼通信与微波事业部总经理 Andy Botka 说:“安捷伦微波信号发生器是当前最先进的测量系统中的重要部分,它们提供开发人员所需的信号纯度、输出功率和调制功能,帮助用户在雷达、电子战和卫星通信应用中得到明显的性能提升。”   纯净、精密的 N5183B
[测试测量]
stm32f103系列引脚定义-功能
  器件功能和配置(STM32F103xx增强型)   STM32F103xx增强型模块框架图   STM32F103xx增强型VFQFPN36管脚图   STM32F103xx增强型LQFP100管脚图   STM32F103xx增强型LQFP64管脚图   STM32F103xx增强型LQFP48管脚图   STM32F103xx增强型BGA100管脚图   STM32F103xx系列各个管脚名称定义、功能:
[单片机]
<font color='red'>stm32f103</font>系列引脚定义-<font color='red'>功能</font>图
Stm32f103c8t6工程模板(内部晶振)源码
虽说内部晶振相对外部晶振误差较大,但是在大部分情况下不需要太高的精确度,使用内部晶振就可以搞定。 单片机源程序如下: #include config.h Sys_timeTypeDef Systime={0,0,0,0}; u8 once=0; void Init_Systick(void) //滴答定时器 { SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK); SysTick_Config(SystemCoreClock / 1000); } void SYS_Init(void) { NVIC_PriorityGro
[单片机]

推荐帖子

这个MOS管是不是画错了
本帖最后由jishuaihu于2015-5-2213:27编辑 这个MOS管是不是画错了,如图,电路的作用也说明白了。看这个图的时候发现这样接的话直接导通的还是那个二极管,导通压降比一般的二极管也不小啊。用MOS管代替二极管降低压降的用法我理解,MOS管导通电阻小,压降自然小。下图中漏极和源极是不是画反了。本人没有用过MOS管,也没有深入研究过。用过的给说说呗这个MOS管是不是画错了文中第一句是“需要在Vcc上进行反向极性电压保护”。按照图中接法,输入电压Vin接反时,M
jishuaihu 综合技术交流
新手请教vs2008如何给wince4.2写程序。
我们应用一种wince4.2系统的人机界面,我想应该可以用vs.net来给他写程序,于是写了个很简单的程序,选的项目类型是智能设备.netframework2.0,目标平台是windowsce,.netcompactframeworkversion2.0写了简单的程序后生成工程,然后把生成的可执行文件拷贝到了wince人机界面的存储器里。在wince系统中运行该程序,错误提示:找不到我写的程序(或它的一个组件)请确认组件全部安装什么的。请问我的操作有什么问题?为什么会这样?
anzx23 WindowsCE
初学单片机者必备
http://www.51dz.com/n.asp?dl=2&a...12812&i=wen3329一个适合电子初学者的网站,欢迎大家来访问!!还提供各种电子元件套件。初学单片机几个不易掌握的概念 随着电子技术的迅速发展,计算机已深入地渗透到我们的生活中,许多电子爱好者开始学习单片机知识,但单片机的内容比较抽象,相对电子爱好者已熟悉的模拟电路、数字电路,单片机中有一些新的概念,这些概念非常基本以至于一般作者不屑去谈,教材自然也不会很深入地讲解这些概念,但这些内容又是学习中必须要理解的
hcbhcbhcbhcb 单片机
大家都来秀秀桌面吧
imgborder=0src=e:\\无标题.bmp大家都来秀秀桌面吧斑竹:看不到图的啊得先上传附件,然后点附件后面的插入把图片插入到合适的位置。
huo_hu 51单片机
LSD-FET430UIF用MSP430Flasher升级固件后怎么装驱动?
前不久想用利尔达的仿真器LSD-FET430UIF直接将msp430-txt文件下载进430单片机,使用MSP430_Flasher,结果按照软件提示进行固件升级后,电脑就再也无法为其安装驱动了(固件升级前仿真器是可用的),也无法访问仿真器了,但插上仿真器后电脑能识别到这个是TexasInstrumentsMSP430-JTAG,然后如果指定到利尔达所附光盘内的驱动,就提示无法找到需要的软件,无法安装该硬件,打开电脑的设备管理器,该设备显示在“其它设备”目录下。从Wiki上
wojiaomt 微控制器 MCU
用CSK6大模型开发板自定制一个能说会唱的桌面聊天机器人/AI智能语音助理
桌面机器人,作为人工智能领域中一个充满潜力的分支,正逐渐成为我们日常生活中的伙伴。它们不仅能够提供信息查询、陪伴关怀等实用功能,还能以更加人性化的方式与我们互动,成为我们工作和娱乐的好帮手。本文以聆思CSK6大模型开发板为例,讲解怎么定义人设、修改发音人音色、增加技能、挂载私有知识库、让您的桌面小伙伴更加智能、更加贴近用户的需求。1、个性人设塑造功能描述:个性塑造功能支持设置设备的交互风格,包括对话风格、语调语速等,增加个性化体验。支持更改大模型的自我认知
胡黎明 DIY/开源硬件专区
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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