本文主要是介绍RM电控讲义【定时器篇】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
HAL库最显著的特点是基于结构体从而利用句柄进而简化代码。
定时器初始化:
TIM6_DAC_IRQn是STM32G431单片机中定时器TIM6的中断请求名。TIM6是STM32G431的一个基本定时器,具有基本的定时功能。当累加的时钟脉冲数超过预定值时,TIM6能触发中断或触发DMA请求。此外,TIM6还被专门用于驱动数模转换器(DAC)。
在STM32G431中,TIM6的中断服务函数名为TIM6_DAC_IRQHandler(),而不是常见的TIM6_IRQHandler()。这是因为TIM6的中断不仅与TIM6自身的计时功能有关,还与DAC的转换完成有关。因此,当中断发生时,TIM6_DAC_IRQHandler()函数会被调用,以处理与TIM6和DAC相关的中断事件。
中断服务函数和中断回调函数的区别:
中断服务函数(ISR):
ISR是响应硬件中断而自动调用的函数。当特定的硬件事件(如定时器溢出、外部中断等)发生时,CPU会暂停当前正在执行的代码,跳转到与该硬件事件相关联的ISR执行。ISR通常是预先定义好的,并且在系统的初始化阶段配置到相应的中断向量表中。一旦中断发生,CPU会根据中断的类型查找中断向量表,然后跳转到相应的ISR执行。
中断回调函数(Interrupt Callback Function):
中断回调函数通常不是直接由硬件中断触发的,而是由某个库函数或框架在适当的时候调用的。它允许用户或开发者定义在某个特定事件发生时应该执行的代码。
中断回调函数通常用于异步事件处理,如网络请求完成、定时器到期、异步I/O操作完成等。当这些事件发生时,相应的回调函数会被调用。
中断回调函数通常不是由系统预先定义好的,而是由用户或开发者根据需要编写的,并通过某种机制(如注册回调函数)与事件处理框架关联起来。ISR是响应硬件中断而自动调用的函数,而中断回调函数是在特定事件发生时由框架或库调用的函数。
ISR通常是由系统预先定义并配置好的,而中断回调函数是由用户或开发者编写的。
ISR主要用于处理硬件事件,而中断回调函数主要用于处理异步事件。
无需手工调用,HAL库中已经对HAL_TIM_PeriodElapsedCallback做好了调用机制。
定时器达到阈值并归零的时候调用回调函数,让LED灯翻转,如此出现LED一闪一闪的现象仿佛有了定时。这个不属于PWM波输出。
定时器中断:
定时器的PWM功能:
通用定时器的时钟为APB1时钟的2倍, 而APB1为36M, 所以定时器时钟 = 72Mhz
定时器溢出时间计算方法: Tout = ((arr + 1) * (psc + 1)) / Ft us. 其中Ft=定时器工作频率,单位:Mhz
arr: 自动重装值 psc: 时钟预分频数
TIM_OC_InitTypeDef timx_oc_pwm_chy = {0}; /* 定时器PWM输出配置 */
TIM_OC_InitTypeDef,该结构体用于初始化定时器(TIM)的输出比较(Output Compare.输出比较功能是定时器的一种工作模式,常用于生成PWM(脉冲宽度调制)信号、测量脉冲宽度或周期等。
是指HAL库中的定时器3的通道2
重映射就是把引脚的外设功能映射到其他的引脚上,但不是可以随便映射的,具体的映射关系参考引脚功能表。
stm32 TIM2 重映射_pa1 tm2重映射-CSDN博客
【STM32】STM32端口复用和重映射(AFIO辅助功能时钟)_stm32 tim5映射-CSDN博客
可以看出,我们可以将串口1重映射到PB6、PB7引脚上。
部分重映射和完全重映射:
部分重映射允许你将定时器的一个或多个输出通道重新映射到不同的GPIO引脚,而定时器的其他通道和功能则保持默认的映射。这种重映射方式通常用于那些需要改变特定通道输出引脚的应用,而不需要改变整个定时器的所有通道。全重映射则更加彻底,它会将定时器的所有输出通道和功能重新映射到不同的GPIO引脚。这种重映射方式适用于那些需要完全改变定时器输出引脚配置的应用。
在main.c中extern定时器句柄。
extern TIM_HandleTypeDef g_timx_pwm_chy_handle; /* 定时器x句柄 */
__HAL_TIM_SET_COMPARE(&g_timx_pwm_chy_handle, TIM_CHANNEL_2, ledrpwmval);
定时器的输入捕获:
定时器的输入捕获(Input Capture)功能主要用于测量脉冲宽度和PWM(脉冲宽度调制)的输入测量。通过配置定时器来检测不同的跳变边沿(如上升沿或下降沿),可以实现对高低电平的计时捕获。具体来说,输入捕获就是用定时器检测引脚上的电平时间,可以检测高电平时间和低电平时间,然后计算引脚上信号的频率和占空比。这对于需要精确控制时间或测量信号特性的应用非常有用,例如在电机控制、通信协议、传感器测量等领域。此外,当定时器捕获到特定的边沿信号时,会产生一个捕获中断。这个中断可以用于触发特定的操作或数据处理,例如在微控制器中读取当前定时器的值,从而得到脉冲宽度或周期等信息。
高级定时器可以输出指定个数的PWM波,例如输出5个PWM波(控制TIM8_CH1, 即PC6输出5个脉冲。
ARR自动重装载值 PSC预分频值 CCR输出比较值(PWM输出比较功能)
/* 设置时钟为72Mhz的情况下: */
atim_timx_comp_pwm_init(1000 - 1, 72 - 1); /* 1Mhz的计数频率 1Khz的周期,第一个参数为ARR的值,第二个参数为PSC的值 */
TIM8->CCR4 = 1000 - 1; /* 通道4 相位100% ,修改的是CCR的值*/
TIM8->CCR4 = 500 - 1;/* 通道4 相位50% */
定时器输出比较功能的初始化(一次打开TIM8四个通道)
HAL_TIM_OC_ConfigChannel(&g_timx_comp_pwm_handle, &timx_oc_comp_pwm, TIM_CHANNEL_4); /* 初始化定时器的输出比较通道4 */
__HAL_TIM_ENABLE_OCxPRELOAD(&g_timx_comp_pwm_handle, TIM_CHANNEL_4); /* 通道4 预装载使能 */
HAL_TIM_OC_Start(&g_timx_comp_pwm_handle, TIM_CHANNEL_1);
高级定时器还具有互补输出带死区控制功能,常用于BLDC的三个半桥控制。
高级定时器(如TIM1和TIM8)通常具有刹车输入(Brake Input)功能。刹车输入用于快速停止定时器的计数操作,并可能关闭相关的输出通道,以便在紧急情况下保护外围设备。
//刹车 HAL_TIM_OC_Stop(&htim1, TIM_CHANNEL_1); // 停止相关输出
当刹车输入被激活时,定时器会立即停止,从而实现紧急制动的效果
cubemx中关于TIM的名词含义:
TIM1_BKIN 是STM32微控制器中高级定时器TIM1的一个刹车输入(Brake Input)引脚。这个引脚用于接收一个外部信号,当该信号被触发时,会导致TIM1定时器立即停止其计数操作,并可能关闭相关的输出通道。
TIM1_CH1N 是STM32微控制器中高级定时器TIM1的一个输出比较通道的互补输出。TIM1_CH1N 是 TIM1_CH1 的互补输出,通常用于实现TIM1的同步PWM(脉冲宽度调制)模式。
atim_timx_cplm_pwm_set(300, 100); /* 占空比:7:3, 死区时间 100 * tDTS */
定时器的PWM输入模式是一种特殊的工作模式,用于测量PWM信号的脉冲宽度和频率。在PWM输入模式下,定时器将捕获PWM信号的上升沿和下降沿,从而测量出PWM信号的周期和脉宽。具体来说,PWM输入模式通常使用两个捕获通道(如IC1和IC2)来分别捕获PWM信号的上升沿和下降沿。当PWM信号的上升沿到达时,IC1捕获该信号,并启动定时器计数。当PWM信号的下降沿到达时,IC2捕获该信号,并停止定时器计数。通过测量定时器计数的值,可以计算出PWM信号的周期和脉宽。
这篇关于RM电控讲义【定时器篇】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!