[STM32WB] 【STM32WB09KE测评】-基础任务5-Tim2外设驱动

[复制链接]
1811|10
 楼主| YangTwo 发表于 2024-11-10 11:50 | 显示全部楼层 |阅读模式
本帖最后由 YangTwo 于 2024-11-11 13:49 编辑

STM32WBO的TIM2介绍

通用定时器(TIM2)由一个16位自动重新加载计数器,配有一个可编程预分频器。

它可用于多种用途,包括测量输入的脉冲长度信号(输入捕获)或产生输出波形(输出比较,PWM,带死区插入的互补PWM)。

脉冲长度和波形周期可以从几微秒到几微秒调制,在32 MHz的定时器输入时钟上使用定时器预分频器。

TIM2主要特性

TIM2定时器功能包括:

•16位向上,向下,向上/向下自动加载计数器。

•16位可编程的预分频器允许划分(也“在飞行中”)计数器

频率是1到65536之间的任意因子。

•多达4个独立通道:

-输入捕获

-输出比较

- PWM生成(边缘和中心对齐模式)

—单脉冲输出

•重复计数器,仅在给定次数的循环后更新计时器寄存器

柜台。

•中断/DMA产生以下事件:

-更新:计数器溢出/下溢,计数器初始化(通过软件或

内部/外部触发)

-触发事件(计数器启动、停止、初始化或由内部/外部触发计数)

(只有中断)

-输入捕获

-输出比较

•支持增量(正交)编码器的定位目的

•触发输入外部时钟或周期逐周期电流管理


本次体验使用Tim2生成周期为1Hz的时钟,在中断ISR内部,翻转LED1蓝色小灯的状态。
首先在STM32CubeIDE内置的CubeMX图形化外设配置工具内部,设置Tim2的分频,中断等参数。
4956467302bfe7e597.png

其中TIM2模块的时钟来源为:
8971667302c3ab651a.png


更新频率:64MHz/64/(TIM2 ARR 9999 + 1) = 1Hz
点击保存,自动生成TIM2初始化代码,
  1. static void MX_TIM2_Init(void)
  2. {

  3.   /* USER CODE BEGIN TIM2_Init 0 */

  4.   /* USER CODE END TIM2_Init 0 */

  5.   TIM_ClockConfigTypeDef sClockSourceConfig = {0};

  6.   /* USER CODE BEGIN TIM2_Init 1 */

  7.   /* USER CODE END TIM2_Init 1 */
  8.   htim2.Instance = TIM2;
  9.   htim2.Init.Prescaler = 6400;
  10.   htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
  11.   htim2.Init.Period = 9999;
  12.   htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  13.   htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
  14.   if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
  15.   {
  16.     Error_Handler();
  17.   }
  18.   sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  19.   if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
  20.   {
  21.     Error_Handler();
  22.   }
  23.   /* USER CODE BEGIN TIM2_Init 2 */

  24.   /* USER CODE END TIM2_Init 2 */

  25. }


注意在main.c里面要启动TIM2模块。
  1.   if (HAL_TIM_Base_Start_IT(&htim2) != HAL_OK)
  2.   {
  3.     /* Starting Error */
  4.     Error_Handler();
  5.   }
  6.   printf("** Tim2 Started ** \n\r");

在TIM2的ISR中加入LED控制:
  1. /**
  2.   * [url=home.php?mod=space&uid=247401]@brief[/url] This function handles TIM2 global interrupt.
  3.   */
  4. void TIM2_IRQHandler(void)
  5. {
  6.   /* USER CODE BEGIN TIM2_IRQn 0 */

  7.   /* USER CODE END TIM2_IRQn 0 */
  8.   HAL_TIM_IRQHandler(&htim2);
  9.   /* USER CODE BEGIN TIM2_IRQn 1 */
  10.   HAL_GPIO_TogglePin(PB1_LD1_BLUE_GPIO_Port, PB1_LD1_BLUE_Pin);
  11.   UTIL_SEQ_SetTask(1U << CFG_TASK_SIMPLEBLEAUTONOTIFY, CFG_SEQ_PRIO_0);
  12.   /* USER CODE END TIM2_IRQn 1 */
  13. }


编译,烧录,验证效果:

QQMail_0 (8).gif

zhangjsh 发表于 2024-11-11 14:48 | 显示全部楼层
想了解更多
21mengnan 发表于 2024-11-28 18:52 | 显示全部楼层
定时器挺灵活的。
顽强de板子 发表于 2024-11-28 23:38 | 显示全部楼层
STM32WB09KE微控制器配备了多个定时器(TIM),其中TIM2是其中之一。定时器可以用于多种应用,如PWM输出、输入捕获、延时等。本任务的目标是搭建和开发STM32WB09KE的TIM2外设驱动。
mmbs 发表于 2025-3-19 14:53 | 显示全部楼层
初始化HAL库和系统时钟。
初始化TIM2并开始计数。
jonas222 发表于 2025-3-19 16:02 | 显示全部楼层
可以在空闲时进入低功耗模式              
jkl21 发表于 2025-3-19 17:51 | 显示全部楼层
STM32WBO的TIM2定时器凭借其高精度、多通道和互补输出特性,是电机控制、PWM生成、信号测量的理想选择。
mmbs 发表于 2025-3-20 12:22 | 显示全部楼层
STM32WB系列的TIM2是一个功能全面且灵活的通用定时器。其丰富的特性和广泛的应用场景使其成为STM32WB系列微控制器中不可或缺的一部分。
wengh2016 发表于 2025-3-20 13:51 | 显示全部楼层
TIM2的基本配置、中断优先级的设置以及中断服务例程
plsbackup 发表于 2025-3-20 15:13 | 显示全部楼层
使用TIM2生成一个1Hz的时钟信号
earlmax 发表于 2025-3-20 17:04 | 显示全部楼层
可以在STM32WB0开发板上使用TIM2生成1Hz的时钟,并在中断服务例程中翻转LED1的状态。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

27

主题

110

帖子

1

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