STM32CUBEIDE-F407(2)-定时器中断

概述

本章通过STM32CUBEIDE配置STM32F407的定时器中断

 原理

本文选用的定时器为高级定时器TIM1,可生成上溢中断、下溢中断,其内部定时器原理如下图所示

其生成PWM波最主要的模块为其时基单元,时基单元主要包括:计数器寄存器 (TIMx_CNT)、预分频器寄存器 (TIMx_PSC)、自动重载寄存器 (TIMx_ARR)、重复计数器寄存器 (TIMx_RCR)。

预分频器可对计数器时钟频率进行分频,分频系数介于 1 和 65536 之间。

在递增计数模式下,计数器从 0 计数到自动重载值(TIMx_ARR 寄存器的内容),然后重新

从 0 开始计数并生成计数器上溢事件。如下图所示

在递减计数模式下,计数器从自动重载值(TIMx_ARR 寄存器的内容)开始递减计数到 0,

然后重新从自动重载值开始计数并生成计数器下溢事件。如下图所示

在中心对齐模式下,计数器从 0 开始计数到自动重载值(TIMx_ARR 寄存器的内容)— 1,

生成计数器上溢事件;然后从自动重载值开始向下计数到 1 并生成计数器下溢事件。之后从

0 开始重新计数。

将通道配置为输出模 式时,其输出比较中断标志将在以下模式下置 1,即:计数器递减计数(中心对齐模式 1, CMS =“01”)、计数器递增计数(中心对齐模式 2,CMS =“10”)以及计数器递增/递 减计数(中心对齐模式 3,CMS =“11”)。

在中心对齐模式下,如果 RCR 值为奇数,更新事件将在上溢或下溢时发生,这取决于何时

写入 RCR 寄存器以及何时启动计数器。如果在启动计数器前写入 RCR,则 UEV 在上溢时

发生。如果在启动计数器后写入 RCR,则 UEV 在下溢时发生。例如,如果 RCR = 3,UEV

将在每个周期的第四个上溢或下溢事件时生成(取决于何时写入 RCR)。

IDE操作

中断频率 f=定时器时钟频率/(PSC+1)*(ARR+1)

上溢/下溢中断:中断频率=f(RCR=0)

中心对齐模式1:中断频率=f(RCR=0)

定时器1对应的时钟为168M,故中断频率为20k。

 

生成代码如下所示,

void TIM1_UP_TIM10_IRQHandler(void)
{
  /* USER CODE BEGIN TIM1_UP_TIM10_IRQn 0 */

  /* USER CODE END TIM1_UP_TIM10_IRQn 0 */
  HAL_TIM_IRQHandler(&htim1);
  /* USER CODE BEGIN TIM1_UP_TIM10_IRQn 1 */

}

在main.c文件里进行初始化以及中断开启函数使能

  MX_TIM1_Init();

  HAL_TIM_Base_Start_IT(&htim1);

需要注意的是控制算法需在定时器中断回调函数里进行编写

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    if(htim == (&htim1))
    {

//中断函数编写

    }

}

采用GPIO口输出翻转模式来测量中断频率是否正确


void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    if(htim == (&htim1))
    {
        HAL_GPIO_TogglePin(GPIOE,GPIO_PIN_4);

}

}

可以看到,其频率为10k,因为是在每次上升沿和下降沿的时候发生中断,故中断频率为20k,绿色波形为PWM波,其频率为10k,后续会讲到。

  • 18
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值