【正点原子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

相关文章

Linux系统之主机网络配置方式

《Linux系统之主机网络配置方式》:本文主要介绍Linux系统之主机网络配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、查看主机的网络参数1、查看主机名2、查看IP地址3、查看网关4、查看DNS二、配置网卡1、修改网卡配置文件2、nmcli工具【通用

Linux系统之dns域名解析全过程

《Linux系统之dns域名解析全过程》:本文主要介绍Linux系统之dns域名解析全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、dns域名解析介绍1、DNS核心概念1.1 区域 zone1.2 记录 record二、DNS服务的配置1、正向解析的配置

Linux系统中配置静态IP地址的详细步骤

《Linux系统中配置静态IP地址的详细步骤》本文详细介绍了在Linux系统中配置静态IP地址的五个步骤,包括打开终端、编辑网络配置文件、配置IP地址、保存并重启网络服务,这对于系统管理员和新手都极具... 目录步骤一:打开终端步骤二:编辑网络配置文件步骤三:配置静态IP地址步骤四:保存并关闭文件步骤五:重

python多种数据类型输出为Excel文件

《python多种数据类型输出为Excel文件》本文主要介绍了将Python中的列表、元组、字典和集合等数据类型输出到Excel文件中,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录一.列表List二.字典dict三.集合set四.元组tuplepython中的列表、元组、字典

Windows系统下如何查找JDK的安装路径

《Windows系统下如何查找JDK的安装路径》:本文主要介绍Windows系统下如何查找JDK的安装路径,文中介绍了三种方法,分别是通过命令行检查、使用verbose选项查找jre目录、以及查看... 目录一、确认是否安装了JDK二、查找路径三、另外一种方式如果很久之前安装了JDK,或者在别人的电脑上,想

2025最新版Python3.13.1安装使用指南(超详细)

《2025最新版Python3.13.1安装使用指南(超详细)》Python编程语言自诞生以来,已经成为全球最受欢迎的编程语言之一,它简单易学易用,以标准库和功能强大且广泛外挂的扩展库,为用户提供包罗... 目录2025最新版python 3.13.1安装使用指南1. 2025年Python语言最新排名2.

Linux系统之authconfig命令的使用解读

《Linux系统之authconfig命令的使用解读》authconfig是一个用于配置Linux系统身份验证和账户管理设置的命令行工具,主要用于RedHat系列的Linux发行版,它提供了一系列选项... 目录linux authconfig命令的使用基本语法常用选项示例总结Linux authconfi

Spring AI集成DeepSeek实现流式输出的操作方法

《SpringAI集成DeepSeek实现流式输出的操作方法》本文介绍了如何在SpringBoot中使用Sse(Server-SentEvents)技术实现流式输出,后端使用SpringMVC中的S... 目录一、后端代码二、前端代码三、运行项目小天有话说题外话参考资料前面一篇文章我们实现了《Spring

Nginx配置系统服务&设置环境变量方式

《Nginx配置系统服务&设置环境变量方式》本文介绍了如何将Nginx配置为系统服务并设置环境变量,以便更方便地对Nginx进行操作,通过配置系统服务,可以使用系统命令来启动、停止或重新加载Nginx... 目录1.Nginx操作问题2.配置系统服android务3.设置环境变量总结1.Nginx操作问题

CSS3 最强二维布局系统之Grid 网格布局

《CSS3最强二维布局系统之Grid网格布局》CS3的Grid网格布局是目前最强的二维布局系统,可以同时对列和行进行处理,将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局,本文介... 深入学习 css3 目前最强大的布局系统 Grid 网格布局Grid 网格布局的基本认识Grid 网