打印
[STM32C0]

【STM32C092RC 测评】+06 使用定时器2闪烁LED

[复制链接]
53|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
STM32c092包括一个高级控制定时器、六个通用定时器、两个看门狗定时器和一个SysTick定时器。表7比较了高级控制定时器和通用定时器的功能。

一:高级控制定时器(TIM1)
先进的控制定时器可以看作是在6个通道上多路复用的三相PWM单元。它具有具有可编程插入死区的互补PWM输出。它也可以看作是一个完整的一般用途定时器。四个独立的通道可用于:
输入捕捉
输出比较
PWM输出(边缘或中心对齐模式),具有全调制能力(0-100%)单脉冲模式输出。
除此之外,还有两个内部通道可供使用。
在调试模式下,高级控制定时器计数器可以被冻结,PWM输出被禁用,从而可以关闭由这些输出驱动的电源开关。
许多特性与通用TIMx定时器(在3.15.2节中描述)共享,使用相同的架构因此高级控制定时器可以通过Timer Link功能与TIMx定时器一起工作,以实现同步或事件链。

二:其他定时说明
通用定时器(TIM2、3、14、15、16、17)设备中嵌入了六个可同步的一般用途定时器(参见表7进行比较)。每个一般用途定时器都可以用于生成PWM输出或作为简单的定时器。
TIM2, TIM3
这些是功能齐全的一般计时器:
-TIM2具有32位自动重载上/下计数器和16位预分频器-TIM3 具有 16 位自动上/下计数器和 16 位预分频器它们有四个独立的通道用于输入捕获/输出比较、PWM或单脉冲模式输出。它们可以与其他通用定时器通过定时器链接功能进行组合操作,以实现同步或事件链。它们可以生成独立的DMA请求并支持正交编码器。它们的计数器可以在调试模式下冻结。
TIM14
这个定时器基于16位自动重载计数器和16位预分频器。它有一个通道用于输入捕获/输出比较、PWM输出或单脉冲模式输出。它的计数器可以在调试模式下冻结。
TIM15.TIM16.TIM17
这些是通用计时器,具有以下功能:
16位自动重新加载计数器和16位预分频器2个通道和1个用于TIM15的辅助通道
-1个通道和1个互补通道用于TIM16和TIM17
所有通道都可以用于输入捕获/输出比较、PWM或单脉冲模式输出。定时器可以通过定时器链接功能一起操作以实现同步或事件链。它们可以生成独立的DMA请求。它们的计数器可以在调试模式下冻结。

三:STM32cube MX 配置如下:
3.1 配置定时器2的基本参数,预分频系数和分频系数,重装值等等。

3.2 配置定时器的中断部分

四:软件编写:
1:使能定时器时钟。
2:初始化定时器,配置ARR,PSC。
3:开启定时器中断,配置NVIC。
4:使能定时器中断,配置优先级。
5: 编写定时器回调函数。

定时器初始化部分
void MX_TIM2_Init(void)
{

  /* USER CODE BEGIN TIM2_Init 0 */

  /* USER CODE END TIM2_Init 0 */

  TIM_SlaveConfigTypeDef sSlaveConfig = {0};
  TIM_MasterConfigTypeDef sMasterConfig = {0};

  /* USER CODE BEGIN TIM2_Init 1 */

  /* USER CODE END TIM2_Init 1 */
  htim2.Instance = TIM2;
  htim2.Init.Prescaler = 47;
  htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim2.Init.Period = 999;
  htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
  if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
  {
    Error_Handler();
  }
  sSlaveConfig.SlaveMode = TIM_SLAVEMODE_DISABLE;
  sSlaveConfig.InputTrigger = TIM_TS_ITR0;
  if (HAL_TIM_SlaveConfigSynchro(&htim2, &sSlaveConfig) != HAL_OK)
  {
    Error_Handler();
  }
  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN TIM2_Init 2 */
                HAL_TIM_Base_Start_IT(&htim2);
  /* USER CODE END TIM2_Init 2 */

}
回调函数的编写:
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
  /* USER CODE BEGIN Callback 0 */

  /* USER CODE END Callback 0 */

  /* USER CODE BEGIN Callback 1 */
  if (htim->Instance == TIM2) {
  Time2point++;
    if(Time2point >=1000)
    {
        Time2point = 0 ;
         HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
          //HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_9);
     }
  }
}
试验现象:LED灯以1S的时间间隔闪烁。

使用特权

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

本版积分规则

61

主题

166

帖子

1

粉丝