【正点原子STM32连载】 第四十章 DAC输出三角波实验 摘自【正点原子】APM32F407最小系统板使用指南

本文主要是介绍【正点原子STM32连载】 第四十章 DAC输出三角波实验 摘自【正点原子】APM32F407最小系统板使用指南,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1)实验平台:正点原子stm32f103战舰开发板V4
2)平台购买地址:https://detail.tmall.com/item.htm?id=609294757420
3)全套实验源码+手册+视频下载地址: http://www.openedv.com/thread-340252-1-1.html##

第四十章 DAC输出三角波实验

本章将使用软件的方式控制APM32F407的DAC输出指定幅值、频率和个数的三角波。通过本章的学习,读者将学习到DAC的使用。
本章分为如下几个小节:
40.1 硬件设计
40.2 程序设计
40.3 下载验证

40.1 硬件设计
40.1.1 例程功能

  1. 按下KEY_UP和KEY0按键,可分别利用DAC输出高采样率和低采样率的三角波
  2. 可通过USMART直接设置DAC输出特定的三角波
  3. LED0闪烁,指示程序正在运行
    40.1.2 硬件资源
  4. LED
    LED0 - PF9
  5. 按键
    KEY0 - PE4
    KEY_UP - PA0
  6. USART1(PA9、PA10连接至板载USB转串口芯片上)
  7. 正点原子 2.8/3.5/4.3/7/10寸TFTLCD模块(仅限MCU屏,16位8080并口驱动)
  8. DAC
    通道1 - PA4
    40.1.3 原理图
    本章实验使用的DAC为APM32F407的片上资源,因此没有对应的连接原理图。
    40.2 程序设计
    40.2.1 Geehy标准库的DAC驱动
    本章实验与上一章实验十分相似,上一章实验使用按键控制DAC通道1输出“离散”的电压,而本章实验的是使用软件算法控制DAC通道1输出的电压,使之输出一个三角波,因此大部分内容都是相似的,以及操作DAC的方式都是一样的,因此请见第39.2.1小节中Geehy标准库的DAC驱动的相关内容。
    40.2.2 DAC驱动
    本章实验的DAC驱动主要负责向应用层提供DAC的初始化以及控制DAC输出指定幅值、频率和个数的三角波的函数。本章实验中,DAC的驱动代码包括dac.c和dac.h两个文件。
    本章实验DAC驱动中对DAC的初始化与上一章实验中对DAC的初始化方式一致,请见第39.2.2小节中DAC初始化的相关内容提供。本小节仅介绍通过软件控制DAC输出三角波的函数,如下所示:
/*** @brief	设置DAC通道1输出三角波* @param	maxval	: 最大值,范围:0~4095* @param	dt		: 每个采样点输出后的延时,单位:微秒* @param	samples	: 一个三角波周期采样点的个数,范围:0~(2 * maxval)* @param	n		: 输出三角波的个数* @retva	l无*/
void dac_triangular_wave(	uint16_t maxval,uint16_t dt,uint16_t samples,uint16_t n)
{uint16_t incval;uint16_t curval;uint16_t i;uint16_t j;samples += (samples % 2);			/* 确保采样点的个数为偶数 */incval = maxval / (samples / 2);	/* 计算下一个采样点相对于当前采样点的增量 */if (incval == 0){return;}for (j=0; j<n; j++){curval = 0;DAC_ConfigChannel1Data(DAC_ALIGN_12BIT_R, curval);/* 每个周期从0开始输出 */for (i=0; i<(samples / 2); i++)						/* 输出三角波的上升沿 */{curval += incval;DAC_ConfigChannel1Data(DAC_ALIGN_12BIT_R, curval);delay_us(dt);}for (i=0; i<(samples / 2); i++)						/* 输出三角波的下降沿 */{curval -= incval;DAC_ConfigChannel1Data(DAC_ALIGN_12BIT_R, curval);delay_us(dt);}}
}

可以看到,该函数就是每间隔一段时间就修改一次DAC的输出电压,以控制DAC输出指定的三角波,对于该函数的实现,读者无需深究,仅需会使用该函数即可。
40.2.3 实验应用代码
本章实验的应用代码,如下所示:

int main(void)
{uint8_t key;uint8_t t = 0;NVIC_ConfigPriorityGroup(NVIC_PRIORITY_GROUP_3);	/* 设置中断优先级分组为组3 */sys_apm32_clock_init(336, 8, 2, 7);					/* 配置系统时钟 */delay_init(168);										/* 初始化延时功能 */usart_init(115200);									/* 初始化串口 */usmart_dev.init(84);								/* 初始化USMART */led_init();											/* 初始化LED */lcd_init();											/* 初始化LCD */dac_init(1);											/* 初始化DAC通道1 */lcd_show_string(30, 50, 200, 16, 16, "APM32", RED);lcd_show_string(30, 70, 200, 16, 16, "DAC Triangular WAVE TEST", RED);lcd_show_string(30, 90, 200, 16, 16, "ATOM@ALIENTEK", RED);lcd_show_string(30, 110, 200, 16, 16, "KEY_UP:Wave1  KEY0:Wave2", RED);lcd_show_string(30, 130, 200, 16, 16, "DAC None ", BLUE);while (1){t++;key = key_scan(0);if (key == WKUP_PRES)		/* ADC通道1输出高采样率三角波,频率约为100Hz */{lcd_show_string(30, 130, 200, 16, 16, "DAC Wave1", BLUE);/* 幅值4095,采样点间隔5us,2000个采样点,100个波形 */dac_triangular_wave(4095, 5, 2000, 100);lcd_show_string(30, 130, 200, 16, 16, "DAC None ", BLUE);}else if (key == KEY0_PRES)	/* ADC通道1输出低采样率三角波,频率约为100Hz */{lcd_show_string(30, 130, 200, 16, 16, "DAC Wave2", BLUE);/* 幅值4095,采样点间隔500us,20个采样点,100个波形 */dac_triangular_wave(4095, 500, 20, 100);lcd_show_string(30, 130, 200, 16, 16, "DAC None ", BLUE);}if (t == 10){LED0_TOGGLE();t = 0;}delay_ms(10);}
}

应用代码中会初始化DAC通道1(PA4引脚),完成初始化后,便不断地扫描按键,并根据扫描到的按键,控制DAC通道1输出指定幅值、频率和个数三角波。
40.3 下载验证
在完成编译和烧录操作后,便可分别按下KEY0按键和KEY_UP按键控制DAC通道1输出不同类型的三角波,DAC通道1输出的三角波可通过示波器观察PA4引脚(DAC通道1输出引脚)看到。

这篇关于【正点原子STM32连载】 第四十章 DAC输出三角波实验 摘自【正点原子】APM32F407最小系统板使用指南的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/172459

相关文章

使用TomCat,service输出台出现乱码的解决

《使用TomCat,service输出台出现乱码的解决》本文介绍了解决Tomcat服务输出台中文乱码问题的两种方法,第一种方法是修改`logging.properties`文件中的`prefix`和`... 目录使用TomCat,service输出台出现乱码问题1解决方案问题2解决方案总结使用TomCat,

C#实现系统信息监控与获取功能

《C#实现系统信息监控与获取功能》在C#开发的众多应用场景中,获取系统信息以及监控用户操作有着广泛的用途,比如在系统性能优化工具中,需要实时读取CPU、GPU资源信息,本文将详细介绍如何使用C#来实现... 目录前言一、C# 监控键盘1. 原理与实现思路2. 代码实现二、读取 CPU、GPU 资源信息1.

在C#中获取端口号与系统信息的高效实践

《在C#中获取端口号与系统信息的高效实践》在现代软件开发中,尤其是系统管理、运维、监控和性能优化等场景中,了解计算机硬件和网络的状态至关重要,C#作为一种广泛应用的编程语言,提供了丰富的API来帮助开... 目录引言1. 获取端口号信息1.1 获取活动的 TCP 和 UDP 连接说明:应用场景:2. 获取硬

JAVA系统中Spring Boot应用程序的配置文件application.yml使用详解

《JAVA系统中SpringBoot应用程序的配置文件application.yml使用详解》:本文主要介绍JAVA系统中SpringBoot应用程序的配置文件application.yml的... 目录文件路径文件内容解释1. Server 配置2. Spring 配置3. Logging 配置4. Ma

2.1/5.1和7.1声道系统有什么区别? 音频声道的专业知识科普

《2.1/5.1和7.1声道系统有什么区别?音频声道的专业知识科普》当设置环绕声系统时,会遇到2.1、5.1、7.1、7.1.2、9.1等数字,当一遍又一遍地看到它们时,可能想知道它们是什... 想要把智能电视自带的音响升级成专业级的家庭影院系统吗?那么你将面临一个重要的选择——使用 2.1、5.1 还是

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用

C++中实现调试日志输出

《C++中实现调试日志输出》在C++编程中,调试日志对于定位问题和优化代码至关重要,本文将介绍几种常用的调试日志输出方法,并教你如何在日志中添加时间戳,希望对大家有所帮助... 目录1. 使用 #ifdef _DEBUG 宏2. 加入时间戳:精确到毫秒3.Windows 和 MFC 中的调试日志方法MFC

Ubuntu系统怎么安装Warp? 新一代AI 终端神器安装使用方法

《Ubuntu系统怎么安装Warp?新一代AI终端神器安装使用方法》Warp是一款使用Rust开发的现代化AI终端工具,该怎么再Ubuntu系统中安装使用呢?下面我们就来看看详细教程... Warp Terminal 是一款使用 Rust 开发的现代化「AI 终端」工具。最初它只支持 MACOS,但在 20

windows系统下shutdown重启关机命令超详细教程

《windows系统下shutdown重启关机命令超详细教程》shutdown命令是一个强大的工具,允许你通过命令行快速完成关机、重启或注销操作,本文将为你详细解析shutdown命令的使用方法,并提... 目录一、shutdown 命令简介二、shutdown 命令的基本用法三、远程关机与重启四、实际应用

Debian如何查看系统版本? 7种轻松查看Debian版本信息的实用方法

《Debian如何查看系统版本?7种轻松查看Debian版本信息的实用方法》Debian是一个广泛使用的Linux发行版,用户有时需要查看其版本信息以进行系统管理、故障排除或兼容性检查,在Debia... 作为最受欢迎的 linux 发行版之一,Debian 的版本信息在日常使用和系统维护中起着至关重要的作