news 2026/4/16 12:10:10

STM32——定时器:高级定时器

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
STM32——定时器:高级定时器

定时器归纳总页:



STM32——定时器-CSDN博客

四、高级定时器

4.1 高级定时器简介

4.2 高级定时器框图(熟悉)

4.3 高级定时器输出指定个数PWM实验

4.3.1 重复计数器特性

再同步:产生于一次更新事件后,RCR寄存器的值会再缓冲到它的影子寄存器中,相当于重置了影子寄存器。所以发生软件更新事件后,还要溢出四次,才能产生更新时间。

设置RCR为N,更新事件将在N+1次溢出时产生。

4.3.2 高级定时器输出指定个数PWM实验原理

输出原理参考 “通用定时器PWM输出实验”

步骤:

1.配置边沿对齐模式输出PWM(递增)

2.指定输出N个PWM,则把N-1写入RCR中

(RCR中 N 发生溢出需要 N+1, 需要N次就发生溢出,则存入N-1)

3.在更新中断内,关闭计数器

*.高级定时器通道输出必须把MOE位 置1

4.3.3 高级定时器输出指定个数PWM实验配置步骤

步骤HAL库函数备注
1.配置定时器基础工作参数HAL_TIM_PWM_Init()
2.定时器PWM输出MSP初始化HAL_TIM_PWM_MspInit()配置NVIC、CLOCK、GPIO等
3.配置PWM模式/比较值等HAL_TIM_PWM_ConfigChannel()
4.设置优先级,使能中断

HAL_NVIC_SetPeriority()

HAL_NVIC_EnableIRQ()

5.使能定时器更新中断__HAL_TIM_ENABLE_IT()
6.使能输出、主输出、计数器HAL_TIM_PWM_Start()主输出 只有高级定时器才有
7.编写中断服务函数TIMx_IRQHandler()等

会调用中断公共处理函数

HAL_TIM_IRQHandler()

8.编写更新中断回调函数HAL_TIM_PeriodElapsedCallback()

4.3.4 例程

【免费】Proj-11-TIM-高级定时器输出指定个数PWM实验资源-CSDN下载https://download.csdn.net/download/PinnsiR/92561274

硬件链接:

pin脚选择:

芯片手册 中的pin脚复用 PC6:

原理图LED1的位置:由PE5控制

选择用跳线链接PC6到PE5:

重复计数器在更新事件的时候会启动刷新,所以代码就是:改变句柄里的RCR值,利用软件事件缓冲RCR值到影子寄存器

4.4 高级定时器输出比较模式实验

【免费】Proj-12-TIM-高级定时器输出比较模式实验资源-CSDN下载https://download.csdn.net/download/PinnsiR/92564378

4.4.1 高级定时器输出比较模式实验原理

一个方波的计数个数:2*(ARR+1),【+1是因为从0开始计数】

一个周期的时间:计数个数* (PSC+1)/ Ft ,计数频率(1s钟计的次数):Ft/(PSC+1)

也就是 PWM波周期或频率由ARR决定,相位由CRR决定

占空比:翻转模式下,固定50%

4.4.2 高级定时器输出模式实验配置步骤

4.4.3 例程

手册:

#include "./SYSTEM/sys/sys.h" #include "./SYSTEM/usart/usart.h" #include "./SYSTEM/delay/delay.h" #include "./BSP/LED/led.h" #include "./BSP/TIMER/atim.h" extern TIM_HandleTypeDef g_timx_comp_pwm_handle; /* 定时器x句柄 */ int main(void) { uint8_t t = 0; HAL_Init(); /* 初始化HAL库 */ sys_stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */ delay_init(72); /* 延时初始化 */ usart_init(115200); /* 串口初始化为115200 */ led_init(); /* 初始化LED */ atim_timx_comp_pwm_init(1000 - 1, 72 - 1); __HAL_TIM_SET_COMPARE(&g_timx_comp_pwm_handle, TIM_CHANNEL_1, 250 - 1); __HAL_TIM_SET_COMPARE(&g_timx_comp_pwm_handle, TIM_CHANNEL_2, 500 - 1); __HAL_TIM_SET_COMPARE(&g_timx_comp_pwm_handle, TIM_CHANNEL_3, 750 - 1); __HAL_TIM_SET_COMPARE(&g_timx_comp_pwm_handle, TIM_CHANNEL_4, 1000 - 1); while (1) { delay_ms(10); t++; if (t >= 20) { LED0_TOGGLE(); /* LED0(RED)闪烁 */ t = 0; } } }
#include "./BSP/TIMER/atim.h" TIM_HandleTypeDef g_timx_comp_pwm_handle; /* 定时器x句柄 */ /* 高级定时器 输出比较模式 初始化函数 */ void atim_timx_comp_pwm_init(uint16_t arr, uint16_t psc) { TIM_OC_InitTypeDef timx_oc_comp_pwm = {0}; g_timx_comp_pwm_handle.Instance = TIM8; /* 定时器8 */ g_timx_comp_pwm_handle.Init.Prescaler = psc ; /* 定时器分频 */ g_timx_comp_pwm_handle.Init.CounterMode = TIM_COUNTERMODE_UP; /* 递增计数模式 */ g_timx_comp_pwm_handle.Init.Period = arr; /* 自动重装载值 */ HAL_TIM_OC_Init(&g_timx_comp_pwm_handle); /* 输出比较模式初始化 */ timx_oc_comp_pwm.OCMode = TIM_OCMODE_TOGGLE; timx_oc_comp_pwm.OCPolarity = TIM_OCPOLARITY_HIGH; HAL_TIM_OC_ConfigChannel(&g_timx_comp_pwm_handle, &timx_oc_comp_pwm, TIM_CHANNEL_1); HAL_TIM_OC_ConfigChannel(&g_timx_comp_pwm_handle, &timx_oc_comp_pwm, TIM_CHANNEL_2); HAL_TIM_OC_ConfigChannel(&g_timx_comp_pwm_handle, &timx_oc_comp_pwm, TIM_CHANNEL_3); HAL_TIM_OC_ConfigChannel(&g_timx_comp_pwm_handle, &timx_oc_comp_pwm, TIM_CHANNEL_4); __HAL_TIM_ENABLE_OCxPRELOAD(&g_timx_comp_pwm_handle, TIM_CHANNEL_1); __HAL_TIM_ENABLE_OCxPRELOAD(&g_timx_comp_pwm_handle, TIM_CHANNEL_2); __HAL_TIM_ENABLE_OCxPRELOAD(&g_timx_comp_pwm_handle, TIM_CHANNEL_3); __HAL_TIM_ENABLE_OCxPRELOAD(&g_timx_comp_pwm_handle, TIM_CHANNEL_4); HAL_TIM_OC_Start(&g_timx_comp_pwm_handle, TIM_CHANNEL_1); HAL_TIM_OC_Start(&g_timx_comp_pwm_handle, TIM_CHANNEL_2); HAL_TIM_OC_Start(&g_timx_comp_pwm_handle, TIM_CHANNEL_3); HAL_TIM_OC_Start(&g_timx_comp_pwm_handle, TIM_CHANNEL_4); } /* 定时器 输出比较 MSP初始化函数 */ void HAL_TIM_OC_MspInit(TIM_HandleTypeDef *htim) { if (htim->Instance == TIM8) { GPIO_InitTypeDef gpio_init_struct; __HAL_RCC_TIM8_CLK_ENABLE(); __HAL_RCC_GPIOC_CLK_ENABLE(); gpio_init_struct.Pin = GPIO_PIN_6; gpio_init_struct.Mode = GPIO_MODE_AF_PP; gpio_init_struct.Pull = GPIO_NOPULL; gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(GPIOC, &gpio_init_struct); gpio_init_struct.Pin = GPIO_PIN_7; HAL_GPIO_Init(GPIOC, &gpio_init_struct); gpio_init_struct.Pin = GPIO_PIN_8; HAL_GPIO_Init(GPIOC, &gpio_init_struct); gpio_init_struct.Pin = GPIO_PIN_9; HAL_GPIO_Init(GPIOC, &gpio_init_struct); } }

4.5 高级定时器互补输出带死区控制实验

4.5.1 互补输出&&死区控制

互补输出通道只有 通道 1至3(OCx & OCxN)

4.5.2 带死区控制的互补输出应用之H桥

H桥:用于控制电机正反转(多用mos管)

正常的电路会加上更多的元器件,由于元器件是有延迟特性,所以需要加上死区时间控制。

加入死区时间会使这段时间内,输出与互补输出 相同电平,即无效电平,在控制H桥时,OC1与OC1N同时输出低电平,两个mos管是截止状态,通过死区时间后,才会开启mos管。

4.5.3 捕获/比较通道的输出部分(通道1至3)

4.5.4 死区时间计算

4.5.5 刹车(断路)功能

MOE被清0,被称为空闲模式,置1,被称为运行模式

4.5.6 高级定时器互补输出带死区控制实验配置步骤

用于HAL_TIM_PWM_ConfigChannel()

用于 HAL_TIMx_PWM_ConfigBreakDeadTime()

4.5.7 例程

【免费】AdvancedTimerComplementaryOutputwithDead-TimeControlProject资源-CSDN下载https://download.csdn.net/download/PinnsiR/92565740

72MHz使用4分频,可根据死区时间计算公式计算死区时间

重映射PE8 PE9到 TIM1的输出通道和互补输出通道1上

重映射PE15 到TIM1 的刹车通道上

寄存器复用设置

死区时间示波器结果

设置DTG = 100

设置TDG = 250

刹车功能验证:

刹车后输出和互补输出通道都为低,(OCIdleState和OCNIdleState设置空闲情况下的输出情况,不可同时为高导通电路。由硬件强制控制不可同时为高。)

4.6 高级定时器PWM输入模式实验

4.6.1 PWM输入模式工作原理

测量PWM参数 周期、频率、占空比。

4.6.2 PWM输入模式时序

4.6.3 高级定时器PWM输入模式实验配置步骤

TIM1/TIM8有独立的输入捕获中断服务函数:

4.6.4 例程

【免费】Proj-14-TIM-AdvancedTimerPWMInputModeExperiment资源-CSDN下载https://download.csdn.net/download/PinnsiR/92565902

不溢出不需要Tout + 1

TIM3的通道2占空比设置 的比较寄存器:

结果:

PWM 输出设置频率超过910:

想要采样更大的PWM周期,需要提高精度,提高PSC

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/4 19:50:41

STM32——MPU(内存保护)

总:STM32——学习总纲 参考资源: 【免费】STmcu选型手册资源资源-CSDN下载 【免费】芯片资料STM32F103ZET6(中文版)资源-CSDN下载 【免费】STM32F1系列参考手册-V10(中)

作者头像 李华
网站建设 2026/4/2 3:43:08

1毛钱鸡蛋月入百万的生意经

鸡蛋一毛钱一斤,月营业额却能做到一百多万,这听起来像是天方夜谭,却是一个真实发生在社区生鲜店里的商业案例。一家95后姑娘经营的店铺,在竞争激烈的老小区中,不仅站稳了脚跟,还让周边好几家同行陆续关门。…

作者头像 李华
网站建设 2026/4/13 23:54:17

基于HTA的Meterpreter反向Shell攻击实验

基于HTA的Meterpreter反向Shell攻击实验 一、实验概述 实验目的 通过HTA(HTML Application)文件作为攻击载体,配合Metasploit Framework,实现对Windows 10系统的远程控制,获取Meterpreter会话权限。 实验环境 攻击机&a…

作者头像 李华
网站建设 2026/4/15 14:44:17

两款桌面免费神器!桌面倒计时提醒+定时关机,定时重启,定时睡眠,定时启动软件,定时提醒等等定时任务处理!黑科技神器

下载链接 http://pan.freedw.com/s/qGN3xH 软件介绍 两款桌面免费神器!桌面倒计时提醒定时关机,定时重启,定时睡眠,定时启动软件,定时提醒等等定时任务处理!黑科技神器 软件特点 可定时关机桌面定时闹钟…

作者头像 李华
网站建设 2026/4/2 8:22:12

基于深度学习/YOLO的交通标志识别系统,交通标(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

基于深度学习/YOLO的交通标志识别系统,交通标(设计源文件万字报告讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码 志检测系统,交通标志检测 配置好环境可直接使用,运行效果见图像 项目介绍: 网络:深度学习网络y…

作者头像 李华