今天来用一下STM32WB09KE的定时器,STM32WB09KE是一款基于ARM Cortex-M0+内核的超低功耗无线微控制器,集成了强大的功能,包括低功耗蓝牙®和超低功耗的无线电,非常适合用于物联网(IoT)设备。 TIM定时器是STM32系列微控制器中的重要外设之一,它提供了精确的定时功能,可用于多种应用场景,可以这样说,每个MCU上面都会有这个定时器,而且是非常重要的,很多地方都需要用到它。 一、TIM定时器的类型与功能 STM32WB09KE中的TIM定时器根据复杂度和应用场景的不同,分为高级定时器、通用定时器和基本定时器三种类型。
基本定时器:主要提供定时中断功能。它只有一个内部时钟源,且只能向上计数。基本定时器通常用于需要简单定时功能的场合。 通用定时器:功能更为丰富,具备基本定时器的所有功能外,还支持内外时钟源选择、输入捕获、输出比较、编码器接口以及主从触发模式等。 高级定时器:功能最为强大,包含了通用定时器的所有功能,并在此基础上进行了升级和扩展。高级定时器具有更高的定时精度和更多的输出比较通道,适用于需要高精度定时和复杂控制功能的场合。 二、TIM定时器的结构与工作原理 TIM定时器的核心结构包括预分频器、计数器和自动重装载寄存器。这些组件共同构成了时基单元,用于实现定时功能。
预分频器:对输入的时钟信号进行分频处理,以降低计数器的计数频率。预分频器的值可以通过编程进行设定,从而实现不同的分频比。 计数器:对经过预分频器处理后的时钟信号进行计数。当计数器的值达到设定的ARR值时,会产生一个更新事件或更新中断。 自动重装载寄存器:用于存储计数目标值。当计数器的值达到ARR值时,计数器会被清零,并重新开始计数。同时,可以触发一个更新事件或更新中断。
三、TIM定时器的配置与使用 在使用TIM定时器之前,需要进行一系列的配置工作,包括时钟源选择、时基单元初始化、中断配置等。
时钟源选择:TIM定时器可以选择内部时钟源或外部时钟源作为计数时钟。内部时钟源通常来自微控制器的内部时钟系统,而外部时钟源则可以通过GPIO口输入。 时基单元初始化:包括设置预分频器的值、计数器的计数模式以及ARR的值等。这些参数决定了定时器的定时精度和定时范围。 中断配置:如果需要定时器在达到设定时间时产生中断信号,还需要配置中断相关的参数,包括中断优先级和中断服务函数等。 在配置完成后,就可以通过启动定时器来开始计时了。在计时过程中,可以通过读取计数器的值来监控定时器的状态,或者在达到设定时间时通过中断服务函数来处理定时事件。
四、定时器配置 以上是有关定时器的理论知识,下面开始STM32WB09KE的定时器使用,与配置。 先打开STM32CubeMX-找到STM32WB09KE或者NUCLEO-WB09KE板,找到定时器进行配置。
定时器相关代码:
static void MX_TIM2_Init(void)
{
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
htim2.Instance = TIM2;
htim2.Init.Prescaler = PRESCALER_VALUE;
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
htim2.Init.Period = PERIOD_VALUE;
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
{
Error_Handler();
}
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
{
Error_Handler();
}
}
实际输出波形:
输出视频:
|