STM32Cube学习(2)——定时器中断

0、引言

单片机:STM32F407ZGT6;
仿真器:ST Link V2;
开发环境:STM32CubeIDE 1.10.1;
功能说明:采用定时器中断的方式,实现LED按照定时器频率闪烁。

前情提要:
STM32Cube学习(1)——点灯&配置

参考资料:
【STM32】HAL库 STM32CubeMX教程六----定时器中断
【STM32】HAL库——定时器溢出中断

1、STM32CubeIDE配置

打开CubeIDE,新建工程,选择匹配的芯片

1.1、配置时钟

在这里插入图片描述

在时钟配置中按照如下进行配置,使能HSE、PLLX72,外部时钟配置为8M,APB1分频器为/2,定时器频率设置为72M
在这里插入图片描述

1.2、定时器配置

时钟源选择内部时钟
在这里插入图片描述

1.3、参数设置

PSC(Prescaler,预分频器)=7199
Counter Mode(触发器模式)=up(向上计数)
Counter Period (arr,自动重载值)=4999
CKD(Internal Clock Division,时钟分频因子)=失能
auto-reload preload(自动重载arr值)=使能

TRGO:定时器的触发信号输出 在定时器的定时时间到达的时候输出一个信号
(如:定时器更新产生TRGO信号来触发ADC的同步转换,)
在这里插入图片描述
计算公式如下
其中Tout为计算得到的时间,Tclk为时钟频率
在这里插入图片描述
按照公式计算得,定时为500ms
在这里插入图片描述
使能定时器中断
在这里插入图片描述

1.4、生成配置

在这里插入图片描述
生成代码
在这里插入图片描述

2、代码编辑

在main.c中添加以下代码

int main(void)中初始化中断

  /* USER CODE BEGIN 2 */
  //开启定时器中断
  HAL_TIM_Base_Start_IT(&htim2);
  /* USER CODE END 2 */

回调函数,该回调函数会自动将中断标志位复位。

/* USER CODE BEGIN 4 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    
    
    static unsigned char ledState = 0;
    if (htim == (&htim2))
    {
    
    
        if (ledState == 0)
        	HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin,GPIO_PIN_RESET);
        else
        	HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin,GPIO_PIN_SET);
        ledState = !ledState;
    }
}
/* USER CODE END 4 */

猜你喜欢

转载自blog.csdn.net/u014798590/article/details/126644898