打印
[STM32WB]

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

[复制链接]
176|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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的分频,中断等参数。


其中TIM2模块的时钟来源为:



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

  /* USER CODE BEGIN TIM2_Init 0 */

  /* USER CODE END TIM2_Init 0 */

  TIM_ClockConfigTypeDef sClockSourceConfig = {0};

  /* USER CODE BEGIN TIM2_Init 1 */

  /* USER CODE END TIM2_Init 1 */
  htim2.Instance = TIM2;
  htim2.Init.Prescaler = 6400;
  htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim2.Init.Period = 9999;
  htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
  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();
  }
  /* USER CODE BEGIN TIM2_Init 2 */

  /* USER CODE END TIM2_Init 2 */

}


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

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

  /* USER CODE END TIM2_IRQn 0 */
  HAL_TIM_IRQHandler(&htim2);
  /* USER CODE BEGIN TIM2_IRQn 1 */
  HAL_GPIO_TogglePin(PB1_LD1_BLUE_GPIO_Port, PB1_LD1_BLUE_Pin);
  UTIL_SEQ_SetTask(1U << CFG_TASK_SIMPLEBLEAUTONOTIFY, CFG_SEQ_PRIO_0);
  /* USER CODE END TIM2_IRQn 1 */
}


编译,烧录,验证效果:



使用特权

评论回复
沙发
zhangjsh| | 2024-11-11 14:48 | 只看该作者
想了解更多

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

23

主题

101

帖子

1

粉丝