【正点原子STM32连载】第十七章 通用定时器中断实验 摘自【正点原子】APM32F407最小系统板使用指南

2023-11-17

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

第十七章 通用定时器中断实验

本章介绍APM32F407通用定时器的使用,通用定时器相较于基本定时器,拥有输入捕获和输出比较等功能,这些功能可以用来测量脉冲宽度、频率和占空比,并且可以产生并输出波形等。通过本章的学习,读者将学习到通用定时器的基本使用。
本章分为如下几个小节:
17.1 硬件设计
17.2 程序设计
17.3 下载验证

17.1 硬件设计
17.1.1 例程功能

  1. 程序运行后配置定时器14溢出时间为500毫秒,并开启中断,在中断服务函数中翻转LED1的状态
  2. 在主循环中每200毫秒执行一次LED0状态翻转操作
    17.1.2 硬件资源
  3. LED
    LED0 - PF9
    LED1 - PF10
  4. 定时器14
    17.1.3 原理图
    本章实验使用的定时器14为APM32F407的片上资源,因此没有对应的连接原理图。
    17.2 程序设计
    17.2.1 Geehy标准库的TMR驱动
    本章实验仅是使用通用定时器14代替上一章中基本定时器6,实现通用定时器的一些基本功能,具体的原理和使用的Geehy标准库函数都是一样的,因此请参考第16.2.1小节中对Geehy标准库中TMR驱动的相关介绍。
    17.2.2 通用定时器驱动
    本章实验的通用定时器驱动主要负责向应用层提供通用定时器的初始化函数,并实现通用定时器的中断回调函数。本章实验中,通用定时器的驱动代码包括gtmr.c和gtmr.h两个文件。
    通用定时器驱动中,对TMR的相关宏定义,如下所示:
#define GTMR_TMRX_INT				TMR14
#define GTMR_TMRX_INT_IRQn			TMR8_TRG_COM_TMR14_IRQn
#define GTMR_TMRX_INT_IRQHandler	TMR8_TRG_COM_TMR14_IRQHandler
#define GTMR_TMRX_INT_CLK_ENABLE()							\
    do {														\
    		RCM_EnableAPB1PeriphClock(RCM_APB1_PERIPH_TMR14);	\
    } while (0)

通用定时器驱动中TMR14的初始化函数,如下所示:

/**
 * @brief	初始化通用定时器中断
 * @note	当APB1PSC!=1时,定时器的时钟频率为APB1时钟的2倍
 * 			因此定时器的时钟频率为84MHz
 * 			定时器溢出时间计算方法:Tout = ((arr + 1) * (psc + 1)) / TMRxCLK
 * 			TMRxCLK=定时器时钟频率,单位MHz
 * @param	arr: 自动重装载值
 * @param	psc: 预分频器数值
 * @retval	无
 */
void gtmr_tmrx_int_init(uint16_t arr, uint16_t psc)
{
    TMR_BaseConfig_T tmr_init_struct;
    
    /* 使能时钟 */
    GTMR_TMRX_INT_CLK_ENABLE();								/* 使能通用定时器时钟 */
    
    /* 配置通用定时器 */
    tmr_init_struct.countMode		= TMR_COUNTER_MODE_UP;	/* 向上计数 */
    tmr_init_struct.clockDivision	= TMR_CLOCK_DIV_1;		/* 时钟分频系数 */
    tmr_init_struct.period			= arr;					/* 自动重装载值 */
    tmr_init_struct.division		= psc;					/* 预分频器数值 */
    TMR_ConfigTimeBase(GTMR_TMRX_INT, &tmr_init_struct);	/* 配置通用定时器 */
    
    /* 使能通用定时器及其相关中断 */
    NVIC_EnableIRQRequest(GTMR_TMRX_INT_IRQn, 1, 0);		/* 开启中断 */
    TMR_EnableInterrupt(GTMR_TMRX_INT, TMR_INT_UPDATE);		/* 使能更新中断 */
    TMR_Enable(GTMR_TMRX_INT);								/* 使能通用定时器 */
}

从上面的代码中可以看出,本实验中对通用定时器TMR14的初始化与上一章实验中对基本定时器TMR6的初始化基本类似,不同之处在于通用定时器TMR14可以配置计数模式和时钟分频系数。
通用定时器驱动代码中,TMR14的中断回调函数也与上一章实验中TMR6的中断回调函数类似,如下所示:

/**
 * @brief	通用定时器中断服务函数
 * @param	无
 * @retval	无
 */
void GTMR_TMRX_INT_IRQHandler(void)
{
    /* 判断更新中断标志 */
    if (TMR_ReadIntFlag(GTMR_TMRX_INT, TMR_INT_UPDATE) == SET)
    {
    		LED1_TOGGLE();										/* 翻转LED1状态 */
    		TMR_ClearIntFlag(GTMR_TMRX_INT, TMR_INT_UPDATE);	/* 清除更新中断标志 */
    }
}

从上面的代码中可以看出,在TMR14每次计数溢出后都会翻转一次LED1的状态。
17.2.3 实验应用代码
本章实验的应用代码,如下所示:

int main(void)
{
    NVIC_ConfigPriorityGroup(NVIC_PRIORITY_GROUP_3);	/* 设置中断优先级分组为组3 */
    sys_apm32_clock_init(336, 8, 2, 7);					/* 配置系统时钟 */
    delay_init(168);										/* 初始化延时功能 */
    usart_init(115200);									/* 初始化串口 */
    led_init();											/* 初始化LED */
    gtmr_tmrx_int_init(5000 - 1, 8400 - 1);				/* 初始化通用定时器中断 */
    
    while (1)
    {
    		LED0_TOGGLE();
    		delay_ms(200);
    }
}

与上一章实验一样,TMR14的计数频率为10KHz,溢出频率为2Hz,因此LED1的闪烁频率也为1Hz。
17.3 下载验证
在完成编译和烧录操作后,可以看到板子上的LED0和LED1都在闪烁,但闪烁的频率不同,LED0每间隔200毫秒改变一次状态,LED1在TMR14的中断回调函数中被改变状态,其闪烁的频率约为1Hz。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【正点原子STM32连载】第十七章 通用定时器中断实验 摘自【正点原子】APM32F407最小系统板使用指南 的相关文章

  • 【C++历险记】面向对象

    个人主页 兜里有颗棉花糖 欢迎 点赞 收藏 留言 加关注 本文由 兜里有颗棉花糖 原创 收录于专栏 C 之路 本专栏旨在记录C 的学习路线 望对大家有所帮助 希望我们一起努力 成长 共同进步 目录 一 多继承以及菱形继承 二 多继承引发的问
  • 优加DaaS背后,看见新的营销潮

    DaaS 融合开放 这是京东云优加对外传递出来的两个最清晰的声音 前者对应的是能力和边界 后者对应的是态度和打法 两者结合 恰构成了京东云优加 或者说京东在营销侧的未来想象力 作者 皮爷 出品 产业家 今年我们有接近60 以上的营销费用花在
  • Sublime Text 工具安装&配置

    一 安装 官网下载 https www sublimetext com download Windows 下载下来为exe安装程序 portable version 下载下来为zip压缩包 解压后无需安装就能运行 二 安装插件 插件官网 h

随机推荐

  • HIT--ICS计算机系统大作业

    目录 摘要 第1章 概述 1 1 Hello简介 1 2 环境与工具 1 3 中间结果 1 4 本章小结 第2章 预处理 2 1 预处理的概念与作用 2 2在Ubuntu下预处理的命令 2 3 Hello的预处理结果解析 2 4 本章小结
  • 伪类和伪元素的区别?

    前言 伪类和伪元素是CSS中的两种特殊方式 可以对HTML元素添加一些不同于普通选择器样式的显示效果 它们的实现方法类似 但其意义和使用方式有所不同 伪类 Pseudo Class 是在 CSS3 中引入的 用于描述元素的一些动态的和行为相
  • 蓝桥杯接龙数列(动态规划)

    蓝桥杯2023年第十四届省赛真题 接龙数列 C语言网 dotcpp com 我们要求最少删除多少个数 可以使剩下的序列是接龙序列 那么找到一条最长的接龙数列即可求出最少删除的个数 运用动态规划的思想 从前往后挨个考虑每个数字 一个前缀为6的
  • 五分钟带你了解Python基础知识【精华】

    Python基础知识详解 一 Python输出 1 repr 或 str 转成字符串 2 字符串填充空格进行格式化 3 a 使用 ascii s 使用 str 和 r 使用 repr 可以用于在格式化某个值之前对其进行转化 二 Python
  • .NET/C# 随机不重不漏的输出一个集合中的元素

    一 介绍 1 Random Random 类是一个产生伪随机数字的类 介绍 https docs microsoft com en us dotnet api system random redirectedfrom MSDN view n
  • C++primer习题3.14 vector读写字符

    include
  • sentinel-3卫星测高学习资料整理

    在学习过程中 整理关于sentinel 3测高的学习资料 1 SAR Radar Altimeter SRAL instrument specifics https eumetsatspace atlassian net wiki spac
  • pandas中DataFrame 数据合并,连接(merge,join,concat)

    pandas作者Wes McKinney 在 PYTHON FOR DATA ANALYSIS 中对pandas的方方面面都有了一个权威简明的入门级的介绍 但在实际使用过程中 我发现书中的内容还只是冰山一角 谈到pandas数据的行更新 表
  • Ubuntu16.04如何调整屏幕分辨率至1920*1080

    1 引言 ubuntu16 04桌面版安装好后 发现屏幕分辨率调整选项里没有1920x1080这一选项 经过一番研究 可通过如下方式进行屏幕分辨率设置 以下操作均在ubuntu16 04桌面版操作 不要用远程连接操作 否则xrandr命令会
  • 华为OD机试(2021-04)题目一

    题目 一个 0 1000 的整数 拆解为一个 本身 或多个连续自然数的和 按照自然数的个数从少到多输出各个方案 input solution 方案内的自然数按照从小到大排列 public static void main String ar
  • 循环“停止”的三种特殊语句

    对于一个初学者来说 循环的控制无疑是一个难点和重点 但是在有些时候循环是不需要执行完的 或者这个循环的这一次是不用执行的 那么我们如何来实现这些功能呢 下面通过一个例子来加以说明 1 break语句跳出就近的一层循环 while i lt
  • 渗透相关问题(3)

    1 sql注入绕过的方法 注释符号绕过 大小写绕过 内联注释绕过 双写关键字绕过 特殊编码绕过 宽字节绕过 2 WAF常用的类型 硬件设备类型 软件产品类型 基于云的WAF 3 sql注入漏洞防御方法 代码层面 对输入进行严格的转义和过滤
  • JavaSE学习总结:异常处理

    Java异常处理 1 什么是异常 2 异常的处理机制的原理 过程 3 异常的体系结构 1 java lang Throwable 2 java lang Error 3 java lang Exception 4 异常的处理机制 1 抛 2
  • 以太坊区块链技术开发岗位面试题集锦,附答案

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 超过100道以太坊区块链开发技术岗位的面试题 附参考答案 面试题目涵盖 以太坊的基本概念 Geth客户端使用 智能合约基本概念 Solidity开发语言 去中心化 应用DA
  • 目标检测中的IOU和CIOU原理讲解以及应用(附测试代码))

    上期讲解了目标检测中的三种数据增强的方法 这期我们讲讲目标检测中用来评估对象检测算法的IOU和CIOU的原理应用以及代码实现 交并比IOU 交并比IOU Interp over union 在目标检测任务中 我们用框框来定位对象 如下图定位
  • Linux文件/proc/net/tcp

    导语 proc net tcp文件提供了tcp的连接信息 是由net ipv4 tcp ipv4 c中的tcp4 seq show 实现信息打印的 本文内容来源于linux官方文档proc net tcp txt 官方文档解释 proc n
  • 输入框不能为空格

    需求 在表单中 输入的内容要去除两端空格 技术栈 vue elementui 最简单的做法 element ui 中自带的表单必填项校验输入空格时 依然能逃过验证 required true还是可以通过 需要再 在v model 加上 tr
  • 3.Jmeter学习_线程组(Thread Group)

    xxxx
  • VS2022安装qt插件

    1 安装Qt软件 Qt下载网址 5 14之后的需要手动编译 官方不提供exe文件 2 配置环境变量 3 安装插件 vs2022 qt vsaddin插件已经更新 可以下载安装 链接 https download qt io developm
  • 【正点原子STM32连载】第十七章 通用定时器中断实验 摘自【正点原子】APM32F407最小系统板使用指南

    1 实验平台 正点原子stm32f103战舰开发板V4 2 平台购买地址 https detail tmall com item htm id 609294757420 3 全套实验源码 手册 视频下载地址 http www openedv