1、定时器溢出时间配置
2、定时器中断实验配置步骤
msp
函数是对
MCU
相关的硬件进行初始化设置,通常被设计用于处理特定硬件外设或功能的底层初始化工作
3、实验目的
使用定时器 2
进行中断点灯,
500ms LED
灯翻转一次。
4、实验代码
timer.c
#include "timer.h"
#include "led.h"
TIM_HandleTypeDef timer_handle = {0};
//定时器初始化函数
void timer_init(uint16_t arr, uint16_t psc)
{
timer_handle.Instance = TIM2;
timer_handle.Init.Prescaler = psc;
timer_handle.Init.Period = arr;
timer_handle.Init.CounterMode = TIM_COUNTERMODE_UP;
timer_handle.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
HAL_TIM_Base_Init(&timer_handle);
HAL_TIM_Base_Start_IT(&timer_handle);
}
//msp函数
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)
{
if(htim->Instance == TIM2)
{
__HAL_RCC_TIM2_CLK_ENABLE();
HAL_NVIC_SetPriority(TIM2_IRQn, 2, 2);
HAL_NVIC_EnableIRQ(TIM2_IRQn);
}
}
//中断服务函数
void TIM2_IRQHandler(void)
{
HAL_TIM_IRQHandler(&timer_handle);
}
//更新中断回调函数
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance == TIM2)
{
led1_toggle();
}
}
timer.h
#ifndef __TIMER_H__
#define __TIMER_H__
#include "sys.h"
void timer_init(uint16_t arr, uint16_t psc);
#endif
main.c
#include "sys.h"
#include "delay.h"
#include "led.h"
#include "timer.h"
int main(void)
{
HAL_Init(); /* 初始化HAL库 */
stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */
led_init(); /* 初始化LED灯 */
timer_init(5000 - 1, 7200 - 1);
while(1)
{
// led1_on();
// led2_off();
// delay_ms(500);
// led1_off();
// led2_on();
// delay_ms(500);
}
}
led的代码上述文章都有在此不赘述