当前位置: 首页 > news >正文

第二十章 TIM——基本定时器

单芯片解决方案,开启全新体验——W55MH32 高性能以太网单片机

W55MH32是WIZnet重磅推出的高性能以太网单片机,它为用户带来前所未有的集成化体验。这颗芯片将强大的组件集于一身,具体来说,一颗W55MH32内置高性能Arm® Cortex-M3核心,其主频最高可达216MHz;配备1024KB FLASH与96KB SRAM,满足存储与数据处理需求;集成TOE引擎,包含WIZnet全硬件TCP/IP协议栈、内置MAC以及PHY,拥有独立的32KB以太网收发缓存,可供8个独立硬件socket使用。如此配置,真正实现了All-in-One解决方案,为开发者提供极大便利。

在封装规格上,W55MH32 提供了两种选择:QFN100QFN68

W55MH32L采用QFN100封装版本,尺寸为12x12mm,其资源丰富,专为各种复杂工控场景设计。它拥有66个GPIO、3个ADC、12通道DMA、17个定时器、2个I2C、5个串口、2个SPI接口(其中1个带I2S接口复用)、1个CAN、1个USB2.0以及1个SDIO接口。如此丰富的外设资源,能够轻松应对工业控制中多样化的连接需求,无论是与各类传感器、执行器的通信,还是对复杂工业协议的支持,都能游刃有余,成为复杂工控领域的理想选择。 同系列还有QFN68封装的W55MH32Q版本,该版本体积更小,仅为8x8mm,成本低,适合集成度高的网关模组等场景,软件使用方法一致。更多信息和资料请进入http://www.w5500.com/网站或者私信获取。

此外,本W55MH32支持硬件加密算法单元,WIZnet还推出TOE+SSL应用,涵盖TCP SSL、HTTP SSL以及 MQTT SSL等,为网络通信安全再添保障。

为助力开发者快速上手与深入开发,基于W55MH32L这颗芯片,WIZnet精心打造了配套开发板。开发板集成WIZ-Link芯片,借助一根USB C口数据线,就能轻松实现调试、下载以及串口打印日志等功能。开发板将所有外设全部引出,拓展功能也大幅提升,便于开发者全面评估芯片性能。

若您想获取芯片和开发板的更多详细信息,包括产品特性、技术参数以及价格等,欢迎访问官方网页:http://www.w5500.com/,我们期待与您共同探索W55MH32的无限可能。

第二十章 TIM——基本定时器

目录

第二十章 TIM——基本定时器

1 定时器分类

2 基本定时器功能框图讲解

2.1 时钟源

2.2 计数器时钟

2.3 计数器

2.4 自动重装载寄存器

2.5 定时时间的计算

3 定时器初始化结构体详解


本章参考资料:《W55H32参考手册》 基本定时器章节。学习本章时,配合参考资料一起阅读,效果会更佳,特别是涉及到寄存器说明的部分。

1 定时器分类

定时器

计数器分辨率

计数器类型

预分频系数

产生 DMA 请求

捕获 / 比较通道

互补输出

TIM1、TIM8

16 位

向上,向下,向上 / 向下

1~65536 之间的任意整数

可以

4

TIM2、TIM3、TIM4、TIM5

16 位

向上,向下,向上 / 向下

1~65536 之间的任意整数

可以

4

没有

TIM9、TIM12

16 位

向上

1~65536 之间的任意整数

不可以

2

没有

TIM10、TIM11、TIM13、TIM14

16 位

向上

1~65536 之间的任意整数

不可以

1

没有

TIM6、TIM7

16 位

向上

1~65536 之间的任意整数

可以

0

没有

高级控制定时器(TIM1 和 TIM8)

两个高级控制定时器(TIM1 和 TIM8)可以被看成是分配到 6 个通道的三相 PWM 发生器,它具有带死区插入的互补 PWM 输出,还可以被当成完整的通用定时器。四个独立的通道可以用于:

  • 输入捕获
  • 输出比较
  • 产生 PWM(边缘或中心对齐模式)
  • 单脉冲输出

配置为 16 位标准定时器时,它与 TIMx 定时器具有相同的功能。配置为 16 位 PWM 发生器时,它具有全调制能力(0~100%)。

在调试模式下,计数器可以被冻结,同时 PWM 输出被禁止,从而切断由这些输出所控制的开关。很多功能都与标准的 TIM 定时器相同,内部结构也相同,因此高级控制定时器可以通过定时器链接功能与 TIM 定时器协同操作,提供同步或事件链接功能。

通用定时器(TIM2、TIM3、TIM4、TIM5)

本系列产品中,内置了 4 个可同步运行的标准定时器(TIM2、TIM3、TIM4、TIM5)。每个定时器都有一个 16 位的自动加载递加/递减计数器、一个 16 位的预分频器和 4 个独立的通道,每个通道都可用于输入捕获、输出比较、PWM 和单脉冲模式输出。它们还能通过定时器链接功能与高级控制定时器共同工作,提供同步或事件链接功能。在调试模式下,计数器可以被冻结。任一标准定时器都能用于产生 PWM 输出。每个定时器都有独立的 DMA 请求机制。这些定时器还能够处理增量编码器的信号,也能处理 1 至 3 个霍尔传感器的数字输出。

通用定时器(TIM10、TIM11、TIM9)

这些定时器基于 16 位自动重新加载计数器和 16 位预分频器。TIM10 和 TIM11 有一个独立的通道,而 TIM9 有两个用于输入捕获/输出比较、PWM 或单脉冲模式的独立通道输出它们可以与TIM2、TIM3、TIM4、TIM5 全功能同步通用定时器。它们也可以用作简单的时基。

通用定时器(TIM13、TIM14、TIM12)

这些定时器基于 16 位自动重新加载计数器和 16 位预分频器。TIM13 和 TIM14 有一个独立的通道,而 TIM12 有两个独立的通道用于输入捕获/输出比较、PWM 或单脉冲模式的独立通道输出它们可以与 TIM2、TIM3、TIM4、TIM5 全功能同步通用定时器。它们也可以用作简单的时基。独立看门狗独立的看门狗是基于一个 12 位的递减计数器和一个 8 位的预分频器,它由一个内部独立的40kHz 的 RC 振荡器提供时钟;因为这个 RC 振荡器独立于主时钟,所以它可运行于停机和待机模式。它可以被当成看门狗用于在发生问题时复位整个系统,或作为一个自由定时器为应用程序提供超时管理。通过选项字节可以配置成是软件或硬件启动看门狗。在调试模式下,计数器可以被冻结。

基本定时器 TIM6 和 TIM7

这些定时器主要用于 DAC 触发器的生成。它们也可以用作通用 16 位时基。

窗口看门狗内有一个 7 位的递减计数器,并可以设置成自由运行。它可以被当成看门狗用于在发生问题时复位整个系统。它由主时钟驱动,具有早期预警中断功能;在调试模式下,计数器可以被冻结。

系统时基定时器

这个定时器是专用于实时操作系统,也可当成一个标准的递减计数器。它具有下述特性:

  • 24 位的递减计数器
  • 自动重加载功能
  • 当计数器为 0 时能产生一个可屏蔽系统中断
  • 可编程时钟源

2 基本定时器功能框图讲解

基本定时器的核心是时基,不仅基本定时器有,通用定时器和高级定时器也有。学习定时器时,我们先从简单的基本定时器学起, 到了后面的通用和高级定时器的学习中,我们直接跳过时基部分的讲解即可。 基本定时器的功能框图见下图,基本定时器功能框图 :

2.1 时钟源

计数器的时钟由内部时钟(CK_INT)提供。

TIMx_CR1 寄存器的 CEN 位和 TIMx_EGR 寄存器的 UG 位是实际的控制位,(除了 UG 位被自动清除外)只能通过软件改变它们。一旦置 CEN 位为'1',内部时钟即向预分频器提供时钟。

2.2 计数器时钟

定时器时钟经过 PSC 预分频器之后,即 CK_CNT,用来驱动计数器计数。PSC是一个16 位的预分频器, 可以对定时器时钟 TIMxCLK 进行 1~65536之间的任何一个数进行分频。具体计算方式为:CK_CNT=TIMxCLK/(PSC+1)。

2.3 计数器

计数器 CNT 是一个 16 位的计数器,只能往上计数,最大计数值为65535。当计数达到自动重装载寄存器的时候产生更新事件,并清零从头开始计数。

2.4 自动重装载寄存器

自动重装载寄存器 ARR 是一个 16位的寄存器,这里面装着计数器能计数的最大数值。当计数到这个值的时候,如果使能了中断的话,定时器就产生溢出中断。

2.5 定时时间的计算

定时器的定时时间等于计数器的中断周期乘以中断的次数。计数器在 CK_CNT的驱动下,计一个数的时间则是 CK_CLK的倒数, 等于:1/(TIMxCLK/(PSC+1)),产生一次中断的时间则等于:1/(CK_CLK * ARR)。如果在中断服务程序里面设置一个变量time, 用来记录中断的次数,那么就可以计算出我们需要的定时时间等于:1/CK_CLK* (ARR+1)*time。

3 定时器初始化结构体详解

在标准库函数头文件w55mh32_tim.h中对定时器外设建立了四个初始化结构体,基本定时器只用到其中一个即TIM_TimeBaseInitTypeDef, 具体的见 代码清单:基本定时器-1 ,其他三个我们在高级定时器章节讲解。

代码清单:基本定时器-1 定时器基本初始化结构体

typedef struct {uint16_t TIM_Prescaler;          // 预分频器uint16_t TIM_CounterMode;        // 计数模式uint32_t TIM_Period;             // 定时器周期uint16_t TIM_ClockDivision;      // 时钟分频uint8_t TIM_RepetitionCounter;   // 重复计算器
} TIM_TimeBaseInitTypeDef;

TIM_Prescaler: 定时器预分频器设置,时钟源经该预分频器才是定时器时钟,它设定TIMx_PSC寄存器的值。可设置范围为0至65535,实现1至65536分频。

TIM_CounterMode: 定时器计数方式,可是在为向上计数、向下计数以及三种中心对齐模式。基本定时器只能是向上计数,即TIMx_CNT只能从0开始递增,并且无需初始化。

TIM_Period: 定时器周期,实际就是设定自动重载寄存器的值,在事件生成时更新到影子寄存器。可设置范围为0至65535。

TIM_ClockDivision: 时钟分频,设置定时器时钟CK_INT频率与数字滤波器采样时钟频率分频比,基本定时器没有此功能,不用设置。

TIM_RepetitionCounter: 重复计数器,属于高级控制寄存器专用寄存器位,利用它可以非常容易控制输出PWM的个数。这里不用设置。

虽然定时器基本初始化结构体有5个成员,但对于基本定时器只需设置其中两个就可以,想想使用基本定时器就是简单。

相关文章:

  • Javascript 学习
  • leetcode2947. 统计美丽子字符串 I-medium
  • AGI大模型(32):LangChain实现RAG
  • 探秘 C++ 计数器类:从基础实现到高级应用
  • (Git) 稀疏检出(Sparse Checkout) 拉取指定文件
  • SpringCloud (3) 配置中心
  • 【AT32】 at32 软复位
  • 利用GeoTools实现导出MySQL地理数据表为shp格式
  • DHT11介绍
  • 对于Python虚拟环境的理解
  • YOLOv8模型剪枝笔记(DepGraph和Network Slimming网络瘦身)
  • C++(29):结构体
  • SpringBoot Day_03|数据校验|异常处理|日志级别|定时器
  • 位运算及其算法
  • 并发编程 之 可见性、原子性、volatile、synchronized、Java内存模型的深入剖析
  • Google机器学习实践指南(梯度下降篇)
  • 裸机任务调度框架、DMA、空闲中断
  • Linux安装SRILM
  • HCIP(广域网)
  • 养生指南:五维守护身心健康
  • 广州黄埔区网站建设/电话营销
  • 常用网站开发技术和工具/企业员工培训课程有哪些
  • 麟游住房和城市建设局网站/数据网站有哪些
  • 免费java源码网/太原seo外包平台
  • 有人做网站花了10几万/整合营销传播的方法包括
  • 网站是做后台好还是做前台好/网站关键词优化软件效果