STM32CubeMX教程17 DAC - 输出三角波/噪声波

news2024/11/19 10:34:50

目录

1、准备材料

2、实验目标

3、实验流程

3.0、前提知识

3.1、CubeMX相关配置

3.1.1、时钟树配置

3.1.2、外设参数配置

3.1.3、外设中断配置

3.2、生成代码

3.2.1、外设初始化调用流程

3.2.2、外设中断调用流程

3.2.3、添加其他必要代码

4、常用函数

5、烧录验证

5.1、实验具体流程

5.2、实验现象

6、注释解析

参考资料


1、准备材料

开发板(正点原子stm32f407探索者开发板V2.4)

STM32CubeMX软件(Version 6.10.0)

野火DAP仿真器

keil µVision5 IDE(MDK-Arm)

一台示波器

2、实验目标

使用STM32CubeMX软件配置STM32F407开发板的DAC OUT1实现输出三角波

3、实验流程

3.0、前提知识

STM32F407的DAC输出引脚除可以输出 DACoutput = VREF+ * DOR / 4095 的模拟电压之外,其DAC控制逻辑中还有两个重要的波形生成器,分别为三角波和噪声波,本小节的实验主要以生成三角波为例,只会在“3.0、前提知识”中简单提到噪声波相关内容,在实际生成过程中两者的设置类似,且均简单易理解 

使用DAC输出指定三角波/噪声波需要先指定DAC的输出触发源,DAC输出的触发源一共有7个,包括Timer 2/4/5/6/7/8 Trigger Out event和Software trigger,一般使用定时器的溢出时间作为DAC输出的触发源,本实验采用了TIM6的溢出更新事件作为DAC OUT1 三角波的触发源,所有可选的触发源如下图所示

当DAC输出三角波时需要设置Maximum Triangle Amplitude参数,当触发源定时器每次产生溢出更新事件时,DAC的输出值就会从基值增加1/减少1,因为TIM6基础定时器只能向上计数,因此当TIM6每次溢出时,DAC的输出会增加1,直到增加到设置的Maximum Triangle Amplitude参数值为止,然后逐渐减少直到基值,这个过程会反复执行从而生成三角波,上述过程如下图所示(注释1)

当DAC输出伪噪声波时需要设置Noise Amplitude参数,其主要配置生成噪声波使用的12位LFSR寄存器解锁的位,如下图所示为DAC使用LFSR寄存器生成伪噪声的算法结构图,这里具体不做深究(注释1)

3.1、CubeMX相关配置

请先阅读“STM32CubeMX教程1 工程建立”实验3.4.1小节配置RCC和SYS

3.1.1、时钟树配置

系统时钟树配置均设置为STM32F407总线能达到的最高时钟频率,具体如下图所示

3.1.2、外设参数配置

在Pinout & Configuration页面左边功能分类栏目Analog中单击其中DAC,在Mode中勾选OUT1 Configuration

DAC OUT1的触发源选择TIM6外部触发,最大三角波幅值设置为4095

具体配置如下图所示

在Pinout & Configuration页面左边功能分类栏目Timers中单击其中TIM6,勾选Activated激活定时器,配置其计数器参数溢出时间为0.1ms,具体参数解释请阅读“STM32CubeMX教程5 TIM 定时器概述及基本定时器”

外部事件触发选择更新事件Updata Event,具体配置如下图所示

3.1.3、外设中断配置

此实验无需开启DAC的任何中断

3.2、生成代码

请先阅读“STM32CubeMX教程1 工程建立”实验3.4.3小节配置Project Manager

单击页面右上角GENERATE CODE生成工程

3.2.1、外设初始化调用流程

请阅读“STM32CubeMX教程15 DAC - 输出3.3V内任意电压”实验“3.2.1、外设初始化调用流程”小节

3.2.2、外设中断调用流程

此实验无需开启DAC的任何中断

3.2.3、添加其他必要代码

在主函数中启动DAC通道1输出,默认基值设置为0即可,源代码如下所示

/*启动DAC输出*/
HAL_DAC_Start(&hdac,DAC_CHANNEL_1);
/*设置DAC三角波输出基值*/
int32_t DacValue=0;
HAL_DAC_SetValue(&hdac,DAC_CHANNEL_1,DAC_ALIGN_12B_L,DacValue);
/*启动TIM6触发源*/
HAL_TIM_Base_Start(&htim6);
printf("Reset\r\n");

4、常用函数

请阅读“STM32CubeMX教程15 DAC - 输出3.3V内任意电压”实验

5、烧录验证

5.1、实验具体流程

“配置定时器TIM6实现0.1ms定时时间 -> 配置其外部触发事件选择更新事件 -> 配置DAC OUT1触发源、生成波形模式及最大幅值 -> 主函数中启动DAC OU1输出即可”

5.2、实验现象

烧录程序,单片机上电后,将示波器的探头挂钩与DAC OUT1引脚PA4相连接,接地环与开发板上的GND引脚连接,将示波器每格电压幅值调节为1.00V,将每格子采集时间调节为400ms,然后开启示波器对DAC OU1输出的波形采集

设置Maximum Triangle Amplitud最大三角波幅值设置为2047时由示波器采集到的三角波如下图所示,其中三角波的幅值电压为1.48V,大致为3.3V的一半,波形频率为2.446Hz,计算的周期大约为408.8ms,定时器溢出时间为0.1ms,期待的周期为0.1*2048*2=409.6ms,与示波器采集结果大致一致

设置Maximum Triangle Amplitud最大三角波幅值设置为4095时由示波器采集到的三角波如下图所示,其中三角波的幅值电压为2.96V,波形频率为1.207Hz,计算的周期大约为828.5ms,定时器溢出时间为0.1ms,期待的周期为0.1*4096*2=819.2ms,与示波器采集结果大致一致

6、注释解析

注释1:图片来源STM32F4xx 中文参考手册

参考资料

STM32Cube高效开发教程(基础篇)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1351745.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浪涌保护器的必要性和安装方案

浪涌保护器SPD是一种用于限制电力线路或信号线路上的瞬时过电压,并将其导入地线的装置,主要用于防止雷电或其他电源干扰对电气设备或电子设备造成损坏。浪涌保护器的类型和结构根据不同的用途和场合有所不同,但一般都包含一个或多个非线性电压…

后台管理系统 -- 点击导航栏菜单对应的面包屑和标签(Tag)的动态编辑功能

相信很多时候,面包屑和标签(Tag)的功能几乎是后台管理系统标配。 就是会随着路由的跳转来进行相应的动态更新。 我先展示一下效果: 1.面包屑 先说一下思路: 我们导航菜单点击之后,将当前显示路由对象存储到Vuex的storge里面,然后在面包屑组件里面,读取这个状态即可…

电子负载是如何实现这些功能的

电子负载模拟真实负载的电子设备,它可以吸收或释放电能,以实现对电源、电池、发电机等电源设备的测试和保护。电子负载的主要功能包括恒流、恒压、恒功率、恒电阻等模式,以及过压、过流、短路、过热等保护功能。那么,电子负载是如…

RAL论文:一种自感知扭转塔折纸软体机器人

折纸是一种以纸张折成各种不同形状的艺术活动。折纸与自然科学结合在一起,不仅成为建筑学院的教具,还发展出了折纸几何学成为现代几何学的一个分支。根据折痕的不同分布,可以将纸张折叠成不同的形状,例如有许多经典的折纸结构&…

东信免驱系列身份证阅读器串口通讯协议解析示例,适用于单片机、ARM等系统开发集成使用

完整的一次读卡流程包括: 身份证寻卡 > 身份证选卡 > 身份证读卡,三个步骤 缺一不可(见通讯协议)。 寻卡:EA EB EC ED 04 00 B0 B4 BB 返回:EA EB EC ED 05 00 00 B0 B5 BB 选卡:EA …

【EI会议征稿通知】2024年第四届数字信号与计算机通信国际学术会议(DSCC 2024)

2024年第四届数字信号与计算机通信国际学术会议(DSCC 2024) 2024 4th International Conference on Digital Signal and Computer Communications 第四届数字信号与计算机通信国际会议(DSCC 2024)将于2024年4月12日至14日在中国-香港举行。DSCC 2024旨…

Java8新特性 Stream流详解

目录 1、介绍 2、获取Stream流的两种方式 方式一:根据Collection获取流 方式二:Stream中的静态方法of获取流 区别 3、Stream流注意事项 4、Stream流的常用方法 forEach count filter limit skip map sorted distinct match find max和…

【JAVA核心知识】分布式事务框架Seata

Seata 基本信息 GitHub:https://github.com/seata/seatastars: 20.6k 最新版本: v1.6.1 Dec 22, 2022 官方文档:http://seata.io/zh-cn/index.html 注意 官方仅仅支持同步调用。 官方在FAQ中表示对于异步框架需要自行支持。 具体的扩展思…

学习Go语言Web框架Gee总结--上下文Context(二)

学习Go语言Web框架Gee总结--上下文Context context/go.modcontext/main.gocontext/gee/context.gocontext/gee/router.gocontext/gee/gee.go 学习网站来源:Gee 项目目录结构: context/go.mod module examplego 1.21.5require gee v0.0.0 replace gee…

python设计模式:模板方法模式

更多Python学习内容:ipengtao.com 软件设计和编程中,设计模式是一种有助于解决常见问题的强大工具。其中之一是"模板方法模式",它是一种行为型设计模式,允许你定义一个算法的骨架,但将一些步骤的具体实现延迟…

【elfboard linux开发板】7.i2C工具应用与aht20温湿度寄存器读取

1. I2C工具查看aht20的温湿度寄存器值 1.1 原理图 传感器通过IIC方式进行通信,连接的为IIC1总线,且设备地址为0x38,实际上通过后续iic工具查询,这个设备是挂载在iic-0上 1.2 I2C工具 通过i2c工具可以实现查询i2c总线、以及上面…

第7章 参数估计(重点)

注意:区分正态总体还是非正态总体、总体方差已知还是未知、样本是大样本还是小样本,从而使用对应的Z或者t分布。

面试题理解深层次的数组名

目录 引言 一:一维数组 举例如下 1.铺垫知识 数组名是数组首元素的地址,但是有两个特殊情况 (1)sizeof(数组名) (2)&数组名 2.分析讲解上述代码结果 2.字符数组 举例一如下 1.知识铺垫 …

CMake入门教程【基础篇】CMake+Visual Studio2022构建C++项目

文章目录 1.概述2.Visual Studio 2022简介3.安装Visual Studio 20224.安装CMake5.创建CMake项目6. 构建项目 1.概述 CMake和Visual Studio 2022结合 在现代软件开发中,CMake和Visual Studio 2022的结合提供了一个强大的环境,用于构建和管理各种规模的C项…

STM32 学习(二)GPIO

目录 一、GPIO 简介 1.1 GPIO 基本结构 1.2 GPIO 位结构 1.3 GPIO 工作模式 二、GPIO 输出 三、GPIO 输入 1.1 传感器模块 1.2 开关 一、GPIO 简介 GPIO(General Purpose Input Output)即通用输入输出口。 1.1 GPIO 基本结构 如下图&#xff0…

C++基础:静态变量(保姆级讲解)

1.静态变量定义 在C的,静态变量是一个非常有用的特性,它在程序执行期间只初始化一次,并在程序的整个执行期间都保持其值。 可能这样子说大家无法特别理解:静态变量该怎么定义呢?静态变量的作用是什么?该如…

算法29:不同路径问题(力扣62和63题)--针对算法28进行扩展

题目:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff0…

网络端口(包括TCP端口和UDP端口)的作用、定义、分类,以及在视频监控和流媒体通信中的定义

目 录 一、什么地方会用到网络端口? 二、端口的定义和作用 (一)TCP协议和UDP协议 (二)端口的定义 (三)在TCP/IP体系中,端口(TCP和UDP)的作用 (…

Visual Studio 2017 + opencv4.6 + contribute + Cmake(Aruco配置版本)指南

之前配置过一次这个,想起这玩意就难受,贼难配置。由于要用到里面的一个库,不得已再进行配置。看网上的博客是真的难受,这写一块,那里写一块,乱七八糟,配置一顿发现写的都是错的,还得…