LV16-32-定时器-03-高级定时器-01-基础知识
本文主要是STM32开发——定时器 高级定时器 的 基础知识 相关笔记,若笔记中有错误或者不合适的地方,欢迎批评指正😃。
点击查看使用工具及版本
Windows | windows11 |
Ubuntu | Ubuntu16.04的64位版本 |
VMware® Workstation 16 Pro | 16.2.3 build-19376536 |
SecureCRT | Version 8.7.2 (x64 build 2214) - 正式版-2020年5月14日 |
开发板 | 正点原子 i.MX6ULL Linux阿尔法开发板 |
uboot | NXP官方提供的uboot,NXP提供的版本为uboot-imx-rel_imx_4.1.15_2.1.0_ga(使用的uboot版本为U-Boot 2016.03) |
linux内核 | linux-4.15(NXP官方提供) |
STM32开发板 | 正点原子战舰V3(STM32F103ZET6) |
点击查看本文参考资料
- 通用
分类 | 网址 | 说明 |
官方网站 | https://www.arm.com/ | ARM官方网站,在这里我们可以找到Cotex-Mx以及ARMVx的一些文档 |
https://www.st.com/content/st_com/zh.html | ST官方网站,在这里我们可以找到STM32的相关文档 | |
https://www.stmcu.com.cn/ | 意法半导体ST中文官方网站,在这里我们可以找到STM32的相关中文参考文档 | |
http://elm-chan.org/fsw/ff/00index_e.html | FatFs文件系统官网 | |
教程书籍 | 《ARM Cortex-M3权威指南》 | ARM公司专家Joseph Yiu(姚文祥)的力作,中文翻译是NXP的宋岩 |
《ARM Cortex-M0权威指南》 | ||
《ARM Cortex-M3与Cortex-M4权威指南》 | ||
开发论坛 | http://47.111.11.73/forum.php | 开源电子网,正点原子的资料下载及问题讨论论坛 |
https://www.firebbs.cn/forum.php | 国内Kinetis开发板-野火/秉火(刘火良)主持的论坛,现也做STM32和i.MX RT | |
https://www.amobbs.com/index.php | 阿莫(莫进明)主持的论坛,号称国内最早最火的电子论坛,以交流Atmel AVR系列单片机起家,现已拓展到嵌入式全平台,其STM32系列帖子有70W+。 | |
http://download.100ask.net/index.html | 韦东山嵌入式资料中心,有些STM32和linux的相关资料也可以来这里找。 | |
博客参考 | http://www.openedv.com/ | 开源网-原子哥个人博客 |
http://blog.chinaaet.com/jihceng0622 | 博主是原Freescale现NXP的现场应用工程师 | |
cortex-m-resources | 这其实并不算是一个博客,这是ARM公司专家Joseph Yiu收集整理的所有对开发者有用的官方Cortex-M资料链接(也包含极少数外部资源链接) |
点击查看相关文件下载
分类 | 网址 | 说明 |
STM32相关 | STM32F103xx英文数据手册 | STM32F103xC/D/E系列的英文数据手册 |
STM32F103xx中文数据手册 | STM32F103xC/D/E系列的中文数据手册 | |
STM32F10xxx英文参考手册(RM0008) | STM32F10xxx系列的英文参考手册 | |
STM32F10xxx中文参考手册(RM0008) | STM32F10xxx系列的中文参考手册 | |
Arm Cortex-M3 处理器技术参考手册-英文版 | Cortex-M3技术参考手册-英文版 | |
STM32F10xxx Cortex-M3编程手册-英文版(PM0056) | STM32F10xxx/20xxx/21xxx/L1xxxx系列Cortex-M3编程手册-英文版 | |
STM32 HAL库开发实战 | 野火STM32开发教程在线文档——基于F103系列开发板 | |
STM32库开发实战指南 | 野火STM32开发教程在线文档——基于野火霸道开发板 | |
SD卡相关 | SD卡相关资料——最新版本 | 有关SD卡的一些资料可以从这里下载 |
SD卡相关资料——历史版本 | 有关SD卡的一些历史版本资料可以从这里下载,比如后边看的SD卡2.0协议 | |
SD 2.0 协议标准完整版 | 这是一篇关于SD卡2.0协议的中文文档,还是比较有参考价值的,可以一看 | |
ESP32 | SD卡相关资料——最新版本 | 这个⼿册介绍了 ESP8266EX 的产品参数。 |
ESP8266 系列入门教程 | 一个入门手册(安信可官网) | |
ESP8266 AT 指令集 | 这是一篇关于ESSP8266的AT指令集的文档(安信可官网) | |
ESP8266 AT 指令使用实例 | 这是一篇关于ESSP8266的AT指令集使用实例的文档(安信可官网) | |
ESP-AT 用户指南 | 本指南详细介绍 ESP-AT 是什么、如何连接硬件、以及如何下载和烧录 AT 固件(乐鑫官网) | |
乐鑫官方技术文档 | 这里是乐鑫官方技术文档的入口,文档都可以来这里找(乐鑫官网) |
从这一节开始主要来学习高级定时器, STM32F103 有 2 个高级定时器(TIM1 和 TIM8)。将会通过四个实验来学习高级定时器的各个功能,分别是高级定时器输出指定个数 PWM 实验、高级定时器输出比较模式实验、高级定时器互补输出带死区控制实验和高级定时器 PWM 输入模式实验。
一、高级定时器框图
高级定时器的框图和通用定时器框图很类似,只是添加了其它的一些功能,如:重复计数器、带死区控制的互补输出通道、断路输入等。这些功能在高级定时器框图的位置如下:
上图中,框出来三个部分,这是和通用定时器不同的地方,下面来分别学习它们。
二、各部分说明
1. ① 重复计数器
在 F1 系列中,高级定时器 TIM1 和 TIM8 都有重复计数器。下面来介绍一下重复计数器有什么作用?在学习基本定时器和通用定时器的时候,我们知道定时器发生上溢或者下溢时,会直接生成更新事件。但是有重复计数器的定时器并不完全是这样的,定时器每次发生上溢或下溢时,重复计数器的值会减一,当重复计数器的值为 0 时,再发生一次上溢或者下溢才会生成定时器更新事件。如果我们设置重复计数器寄存器 RCR 的值为 N,那么更新事件将在定时器发生 N+1 次上溢或下溢时发生。
这里需要注意的是重复计数器寄存器是具有影子寄存器的,所以 RCR 寄存器只是起缓冲的作用。 RCR 寄存器的值会在更新事件发生时,被转移至其影子寄存器中,从而真正生效。重复计数器的特性,在控制生成 PWM 信号时很有用。
2. ② 输出比较
高级定时器输出比较部分和通用定时器相比, 多了带死区控制的互补输出功能。 第②部分的 TIMx_CH1N、 TIMx_CH2N 和 TIMx_CH3N 分别是定时器通道 1、通道 2 和通道 3的互补输出通道,通道 4 是没有互补输出通道的。 DTG 是死区发生器,死区时间由 DTG[7:0]位来配置。 如果不使用互补通道和死区时间控制,那么高级定时器 TIM1 和 TIM8 和通用定时器的输出比较部分使用方法基本一样,只是要注意 MOE 位得置 1 定时器才能输出。
如果使用互补通道,那么就有一定的区别了,具体我们在高级定时器互补输出带死区控制实验再学习。
3. ③ 断路功能
断路功能也称刹车功能,一般用于电机控制的刹车。 F1 系列有一个断路通道,断路源可以是刹车输入引脚(TIMx_BKIN),也可以是一个时钟失败事件。时钟失败事件由复位时钟控制器中的时钟安全系统产生。 系统复位后, 断路功能默认被禁止, MOE 位为低。
使能断路功能的方法:将 TIMx_BDTR 的位 BKE 置 1。断路输入引脚 TIMx_BKIN 的输入有效电平可通过 TIMx_BDTR 寄存器的位 BKP 设置。
使能刹车功能后:由 TIMx_BDTR 的 MOE、 OSSI、 OSSR 位, TIMx_CR2 的 OISx、 OISxN位, TIMx_CCER 的 CCxE、 CCxNE 位控制 OCx 和 OCxN 输出状态。无论何时, OCx 和 OCxN输出都不能同时处在有效电平。
当发生断路输入后,会怎么样?
(1)MOE 位被异步地清零, OCx 和 OCxN 为无效、空闲或复位状态(由 OSSI 位选择)。
(2)OCx 和 OCxN 的状态:由相关控制位状态决定,当使用互补输出时:根据情况自动控制输出电平,参考《STM32F10xxx 参考手册_V10(中文版).pdf》手册第 245 页的表 75 带刹车功能的互补通道 Ocx 和 OcxN 的控制位。
(3)BIF 位置 1,如果使能了 BIE 位,还会产生刹车中断;如果使能了 TDE 位,会产生 DMA请求。
(4)如果 AOE 位置 1,在下一个 更新事件 UEV 时, MOE 位被自动置 1。