[STM32WB] STM32WB09KE+TIM定时器

[复制链接]
1139|3
 楼主| meiyaolei 发表于 2024-11-21 22:33 | 显示全部楼层 |阅读模式
今天来用一下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板,找到定时器进行配置。

80655673f431dcbfee.png



定时器相关代码:
  1. static void MX_TIM2_Init(void)
  2. {

  3.   TIM_ClockConfigTypeDef sClockSourceConfig = {0};

  4.   htim2.Instance = TIM2;
  5.   htim2.Init.Prescaler = PRESCALER_VALUE;
  6.   htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
  7.   htim2.Init.Period = PERIOD_VALUE;
  8.   htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  9.   htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  10.   if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
  11.   {
  12.     Error_Handler();
  13.   }
  14.   sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  15.   if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
  16.   {
  17.     Error_Handler();
  18.   }
  19. }



实际输出波形:
66072673f437572904.png



输出视频:

65552673f44838d886.gif





yangjiaxu 发表于 2024-12-5 09:47 | 显示全部楼层
用PWM搞个点灯,呼吸灯啊,这样是不是更加好看了呢
而服务器人 发表于 2024-12-31 23:27 | 显示全部楼层
可以使用一个通用定时器来定期生成中断,周期性地执行任务。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:工程师
简介:超越自我,为设计激发灵感和想象。

263

主题

836

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部