1、准备材料

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

STM32CubeMX软件(Version 6.10.0

keil µVision5 IDE(MDK-Arm

ST-LINK/V2驱动

野火DAP仿真器

XCOM V2.6串口助手

一台示波器

2、实验目标

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

3、实验流程

3.0、前提知识

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

使用DAC输出指定三角波/噪声波需要先指定DAC的输出触发源 Trigger ,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相关配置

3.1.0、工程基本配置

打开STM32CubeMX软件,单击ACCESS TO MCU SELECTOR选择开发板MCU(选择你使用开发板的主控MCU型号),选中MCU型号后单击页面右上角Start Project开始工程,具体如下图所示

开始工程之后在配置主页面System Core/RCC中配置HSE/LSE晶振,在System Core/SYS中配置Debug模式,具体如下图所示

详细工程建立内容读者可以阅读“STM32CubeMX教程1 工程建立

3.1.1、时钟树配置

系统时钟使用8MHz外部高速时钟HSE,HCLK、PCLK1和PCLK2均设置为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、生成代码

3.2.0、配置Project Manager页面

单击进入Project Manager页面,在左边Project分栏中修改工程名称、工程目录和工具链,然后在Code Generator中勾选“Gnerate peripheral initialization as a pair of 'c/h' files per peripheral”,最后单击页面右上角GENERATE CODE生成工程,具体如下图所示

详细Project Manager配置内容读者可以阅读”STM32CubeMX教程1 工程建立“实验3.4.3小节

3.2.1、外设初始化调用流程

请阅读“STM32CubeMX教程16 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教程16 DAC - 输出3.3V内任意电压”实验

5、烧录验证

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

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

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

6、注释解析

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

参考资料

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

更多内容请浏览 STM32CubeMX+STM32F4系列教程文章汇总贴

STM32CubeMX教程17 DAC - 输出三角波噪声波的更多相关文章

  1. 002_89C52_Proteus_DAC0832_输出50HZ,正弦波,三角波,矩形波,锯齿波

    (一)非常感谢:89C51与ad0832 输出正弦波,三角波,矩形波,锯齿波 (二)在上面的情况下进行程序的修改,实现50HZ的输出 (三)电路图 (三)输出方波 (四)输出锯齿波 (五)输出三角波 ...

  2. 村田噪声抑制基础教程-第一章 需要EMI静噪滤波器的原因

    1-1. 简介 EMI静噪滤波器 (EMIFIL®) 是为电子设备提供电磁噪声抑制的电子元件,配合屏蔽罩和其他保护装置一起使用.这种滤波器仅从通过连线传导的电流中提取并移除引起电磁噪声的元件.第1章说 ...

  3. 标准pcm数据(正弦波、方波、三角波)解读

    一年前写了一个demo,用于生成几种标准的波形,如正弦波.方波.三角波.之前写的只有这几个功能:波形/通道/时长/频率的控制选择,这几天抽了些时间又加了增益控制功能.为了避免东西丢失或意外删除,特上传 ...

  4. Directx11教程(17) D3D11管线(6)

    原文:Directx11教程(17) D3D11管线(6)       VS shader输出clip空间的顶点位置及参数信息(比如颜色)到一个FIFO中,之后PA(primitive assembl ...

  5. STM32F103定时器输出PWM波控制直流电机

    这个暑假没有回家,在学校准备九月份的电子设计竞赛.今天想给大家分享一下STM32高级定时器输出PWM波驱动直流电机的问题.. 要想用定时器输出的PWM控制直流电机,,首先要理解“通道”的概念..一个定 ...

  6. stm32 DAC输出音频

    #define DAC_DHR8R1_Address 0x40007410 // Init Structure definition DAC_InitTypeDef DAC_InitStructure ...

  7. e8_4输出菲波拉契数列的前10项

    program fbnq;{输出菲波拉契数列的前10项} var a:..] of integer; i:integer; begin a[]:=; a[]:=; do a[i]:=a[i-]+a[i ...

  8. 方法输出C++输出斐波那契数列的几种方法

    PS:今天上午,非常郁闷,有很多简单基础的问题搞得我有些迷茫,哎,代码几天不写就忘.目前又不当COO,还是得用心记代码哦! 定义: 斐波那契数列指的是这样一个数列:0, 1, 1, 2, 3, 5, ...

  9. C++输出斐波那契数列的几种方法

    定义: 斐波那契数列指的是这样一个数列:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ... 这个数列从第三项开始,每一项都等于前两项之和. 以输出斐波那 ...

  10. [译]Vulkan教程(17)帧缓存

    [译]Vulkan教程(17)帧缓存 Framebuffers 帧缓存 We've talked a lot about framebuffers in the past few chapters a ...

随机推荐

  1. CSS 尺寸单位概述

    在本文中,我们将探讨 CSS 尺寸单位的四大类别.我们将了解这些尺寸单位的用途.它们的最佳工作原理,以及如何在每种情况下选择最佳尺寸单位,从而在各种媒体和设备尺寸下优化我们的布局. 关于 CSS 尺寸 ...

  2. Windows10下的hexo搭建

    用hexo搭建个人博客 查看效果:慢蜗牛博客 目录 用hexo搭建个人博客 准备环境 Github Node.js和Git 连接Github 安装hexo 安装插件 部署 Hexo 到 GitHub ...

  3. 【luogu题解】T378828 位运算

    位运算 题目背景 题目由 daiyulong20120222 创作(me) 并由 QBW1117完善以及数据 . 题目描述 给定两个数\(x,y\) ,在给定一个位运算符号 \(c\). 请你列出 \ ...

  4. serdes级联时钟

    级联时钟在其他的IP领域下很少见到,在serdes中时个基本的功能. 因为高密场景下需要时钟数几十个IP,一般摆放在芯片边缘位置. 而SOC的管脚资源非常有限.因此就需要多个IP之间的ref clk进 ...

  5. Linux笔记02: Linux环境_2.3 Linux网络连接

    2.3 Linux网络连接 本节介绍VMware Workstation Player 17下CentOS 7的网络连接. 2.3.1 VMware网络类型 VMware提供的网络连接有5种: ●桥接 ...

  6. Linux笔记02: Linux环境_2.1虚拟机软件VMware

    2.1 虚拟机软件VMware 如果直接在计算机上安装多个操作系统,同一个时刻只能运行一个操作系统,切换系统需重启计算机.VMware可以使用户在一台计算机上同时运行多个操作系统(如Windows.L ...

  7. UMP系统概述

    突出性能: 1.低成本,高性能    2.开源数据库 UMP在设计时要实现一下原则: 多租户:

  8. Hexo 主题开发之自定义模板

    关于 Hexo 如何开发主题包的教程在已经是大把的存在了,这里就不在赘述了.这边文章主要讲的是作为一个主题的开发者,如何让你的主题具有更好的扩展性,在用户自定义修改主题后,能够更加平易升级主题. 问题 ...

  9. ubuntu安装cudnn

    有些忙,这一段时间,博客就随便写写了--- 默认cuda安装好了,这里就不多说了,我们从cuda的环境变量开始说起: 配置cuda环境变量: 打开终端,输入"gedit ~/.bashrc& ...

  10. 华企盾DSC防泄密软件造成VS启动报目录错误

    解决方法:找到安装路径下的Privateregistry.bin文件解密即可