STM32入门指南(6)—DAC的使用

这篇具有很好参考价值的文章主要介绍了STM32入门指南(6)—DAC的使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

STM32入门指南(6)—DAC的使用

前言

本文以STM32F103ZET6为例,介绍STM32的DAC的如何在STM32CubeMX中配置,以及一些代码上的说明。主要是针对用DAC输出一些特定信号(以各种频率的正弦信号为例)。

硬件:

一块STM32F103ZET6开发板

软件:

  1. MDK 532
  2. STM32CubeMX 6.0.1

该芯片的数据手册可以从ST的官网下载到:

https://www.stmicroelectronics.com.cn/…


DAC主要特征

Digital-to-Analog Converter的缩写,将表示一定比例电压值的数字信号转换为模拟信号。STM32的DAC模块是12位数字输入,电压输出型的DAC。

这里借鉴一下CSDN上的博客:

https://blog.csdn.net/qq_38410730/article/details/80095881

  • 2 个 DAC 转换器:每个转换器对应 1 个输出通道
  • 8 位或者 12 位单调输出
  • 12 位模式下数据左对齐或者右对齐
  • 同步更新功能
  • 噪声波形生成
  • 三角波形生成
  • 双 DAC 通道同时或者分别转换
  • 每个通道都有 DMA 功能
  • 外部触发转换

DAC通道映射

STM32F103带1个ADC控制器,一共支持2个通道,其IO固定。、

DAC有自己的中断向量,可以配置DMA。

通道 GPIO
DAC_OUT1 PA4
DAC_OUT2 PA5

DAC数据对齐

假设通道1的数据为 d ,通道2数据为 e 。

DAC有三种数据对齐方式: (一般采用 12 bit 右对齐)


单通道下:

  • 8 bit 右对齐

    b15 b14 b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0
    d7 d6 d5 d4 d3 d2 d1 d0
  • 12 bit 左对齐

    b15 b14 b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0
    d11 d10 d9 d8 d7 d6 d5 d4 d3 d2 d1 d0
  • 12 bit 右对齐

    b15 b14 b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0
    d11 d10 d9 d8 d7 d6 d5 d4 d3 d2 d1 d0

双通道下:

  • 8 bit 右对齐

    b15 b14 b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0
    e7 e6 e5 e4 e3 e2 e1 e0 d7 d6 d5 d4 d3 d2 d1 d0
  • 12 bit 左对齐

    b31 b30 b29 b28 b27 b26 b25 b24 b23 b22 b21 b20 b19 b18 b17 b16
    e11 e10 e9 e8 e7 e6 e5 e4 e3 e2 e1 e0
    b15 b14 b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0
    d11 d10 d9 d8 d7 d6 d5 d4 d3 d2 d1 d0
  • 12 bit 右对齐

    b31 b30 b29 b28 b27 b26 b25 b24 b23 b22 b21 b20 b19 b18 b17 b16
    e11 e10 e9 e8 e7 e6 e5 e4 e3 e2 e1 e0
    b15 b14 b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0
    d11 d10 d9 d8 d7 d6 d5 d4 d3 d2 d1 d0

DAC转换模式

对于每一个通道,DAC在被触发后执行一次转换,可以设置为软件触发或者定时器触发。如果设置了中断,转换完成会产生中断。

DAC输出缓存

DAC集成了2个输出缓存,可以用来减少输出阻抗,无需外部运放即可直接驱动外部负载。每个DAC通道输出缓存可以单独配置。

但是,如果STM32的DAC输出缓存使能的话,虽然输出能力强一点,输出没有办法减到0。

DAC转换时间

DAC最高转化速度为1MHz(指的是DAC的值增加1bit的情况下,LSB)。但是受到DAC压摆率的影响,波形会失真,勿应用于超过200KHz的场合。

DAC配置及代码解析

1. DAC直接输出信号

  1. 在CubeMX配置如下:
    1. 选择通道

    2. 输出缓冲使能(也可不使能)

STM32入门指南(6)—DAC的使用,STM32,stm32,单片机,arm

  1. 在MDK中,main函数添加代码:
int main(void)
{
    while (1)
    {
        uint32_t val;
		HAL_DAC_Start(&hdac,DAC_CHANNEL_1);								//使能DAC通道1
		for(val = 0x0000; val < 0x1000; val += 0x80)					//DAC输出信号范围
		{
			
			HAL_DAC_SetValue(&hdac,DAC_CHANNEL_1,DAC_ALIGN_12B_R,val);	//设置通道输出的值
			HAL_Delay(10);
		}
		HAL_DAC_Stop(&hdac,DAC_CHANNEL_1);								//停止DAC通道1
    }
}

​ 输出效果如下图:

STM32入门指南(6)—DAC的使用,STM32,stm32,单片机,arm

2. DAC + DMA + TIMER

  1. CubeMX配置

    1. 选择通道

    2. 输出缓冲使能(也可不使能)

    3. 设置触发

    STM32入门指南(6)—DAC的使用,STM32,stm32,单片机,arm

    1. 配置DMA

      注意这里DMA的方式为循环搬移模式,适合输出周期信号

    STM32入门指南(6)—DAC的使用,STM32,stm32,单片机,arm

    1. 配置定时器

      方式同ADC的定时器触发,不在赘述。
      STM32入门指南(6)—DAC的使用,STM32,stm32,单片机,arm
      或者:

      STM32入门指南(6)—DAC的使用,STM32,stm32,单片机,arm


  1. 在MDK中,main函数添加代码:
const uint16_t dac_data_len = 1024;					//周期信号长度
uint16_t dac_data[dac_data_len];					//周期信号

int main(void)
{
    uint32_t i;
    for(i = 0; i < dac_data_len; i ++)				//生成周期信号
    {
        dac_data[i] = i*4;
    }
    HAL_TIM_Base_Start(&htim6);						//启动定时器
    HAL_DAC_Start_DMA(&hdac,DAC_CHANNEL_1,\			//以DMA方式启动DAC
    	(uint32_t *)dac_data,dac_data_len,DAC_ALIGN_12B_R);
    HAL_Delay(10000);								//10s延时
    HAL_DAC_Stop_DMA(&hdac,DAC_CHANNEL_1);			//停止DAC和DMA
    HAL_TIM_Base_Stop(&htim6);						//停止定时器
}

​ 输出效果如下图:

STM32入门指南(6)—DAC的使用,STM32,stm32,单片机,arm文章来源地址https://www.toymoban.com/news/detail-622856.html

到了这里,关于STM32入门指南(6)—DAC的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 初学者入门:认识STM32单片机

    本教程含有较多专业词汇,大部分时候,不完全理解并不影响继续往下阅读,大家只需要了解大致的概念即可。当然,也鼓励大家多查百度和多问chatgpt,让自己学会的更多。 什么是单片机? 单片机,就是把中央处理器CPU、存储器、等计算机的功能部件,和定时器、I/0(输入

    2024年02月07日
    浏览(57)
  • STM32单片机入门学习笔记——MPU6050

    笔记整理自B站UP主江科大自化协教程《[10-2] MPU6050简介_哔哩哔哩_bilibili》,所用单片机也为教程推荐单片机。 如果芯片里再集成一个3轴的磁场传感器,测量XYZ轴的磁场强度,那就叫做9轴姿态传感器,如果再集成一个气压传感器,测量气压大小,那就叫做10轴姿态传感器,一

    2024年02月08日
    浏览(52)
  • STM32/51单片机编程入门(点亮LED)

    目录 一、Proteus电路仿真软件上的C51程序设计及仿真 1.原理图绘制 2.Keil5上的51程序编写 3.仿真 二、安装mdk5软件和stm32包,完成一个stm32的简单程序 1.mdk5软件中编写程序 2.stm32仿真程序调试 三、STM32F103系列芯片的地址映射和寄存器映射原理,GPIO端口的初始化设置的一般步骤

    2024年02月02日
    浏览(60)
  • STM32的DAC

    STM32 的 DAC 模块(数字/模拟转换模块)是 12 位数字输入,电压输出型的 DAC。 DAC 可以配置为 8 位或 12 位模式,也可以与 DMA 控制器配合使用 DAC 工作在 12 位模式时,数据可以设置成左对齐或右对齐。 DAC 模块有 2 个输出通道,每个通道都有单独的转换器。在双DAC 模式下,2 个通

    2024年02月16日
    浏览(25)
  • STM32—DAC详解

    数字/模拟转换模块(DAC)是12位数字输入,电压输出的数字/模拟转换器。 DAC输出可以配置为8位或12位模式,也可以与DMA控制器配合使用。 DAC工作在12位模式时,数据可以设置成左对齐或右对齐。 DAC模块有2个输出通道,每个通道都有单独的转换器。 在双DAC模式下,2个通道可以

    2024年02月13日
    浏览(22)
  • STM32F407使用Helix库软解MP3并通过DAC输出,最精简的STM32+SD卡实现MP3播放器

    只用STM32单片机+SD卡+耳机插座,实现播放MP3播放器! 看过很多STM32软解MP3的方案,即不通过类似VS1053之类的解码器芯片,直接用STM32和软件库解码MP3文件,通常使用了labmad或者Helix解码库实现,Helix相对labmad占用的RAM更少。但是大多数参考的方案还是用了外接IIS接口WM98xx之类的

    2024年02月12日
    浏览(57)
  • STM32实验-输出DAC正弦波

    首先我们知道正弦波的解析式为y=Asin(omiga*x+fei)+b,拓展到STM32中则会得到如下的式子: y=2048*sin((2*pi/samples)*x)+2048. 其中形参的取值范围是(samples/2)maxval,采样的间隔是2*pi/samples。 接下来编写我们的函数代码dac_sin.c: 接下来编写函数头文件dac_sin.h: 最后编写主函数main.c: 到这

    2024年02月15日
    浏览(34)
  • STM32——DAC数模转换实验

    一、数模转换原理 STM32的DAC模块是十二位数字输入,电压输出型的DAC,DAC可以配置为8位或12位模式,也可以与DMA控制器配合使用。DAC工作在12位模式时,数据可以设置成左对齐或者右对齐。DAC模块有2个输出通道,每个通道都有单独的转换器。在双DAC模式下,2个通道可以独立的

    2024年02月05日
    浏览(42)
  • STM32单片机入门学习笔记——定时器TIM第二部分

    笔记整理自B站UP主 江科大自化协 教程 《STM32入门教程-2023持续更新中》 ,所用单片机也为教程推荐单片机。 第一部分:定时器基本定时的功能,定时器每隔这个时间产生一个中断,来实现每隔一个固定时间执行一段程序的目的,比如要做一个时钟、秒表或者使用一些程序算

    2024年02月08日
    浏览(55)
  • STM32单片机 超入门项目:流水灯(不同闪烁模式和速度)

    流水灯通过交替闪烁实现灯光流动的效果,本篇将分析如何采用STM32单片机实现流水灯。 STM32单片机(STM32F103RCT6)、发光二极管 4(我用的是七彩快闪,用红绿蓝LDE自行搭配也可)、1k电阻 4、面包板飞线等自备。 打开STM32CubeMX,选择型号STM32F103RCT6,配置调试器PinoutConfigurati

    2023年04月09日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包