#include "project.h"
#include "timer.h"
//TIM4_Init(2000 ,72);//定时2ms
/*
定时器中断的定时时间设定
定时器只需要配置时钟、TIM和NVIC即可
*/
void TIM4_Init(u16 period, u16 prescaler)
{
NVIC_InitTypeDef NVIC_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); //使能TIM4时钟
NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn; //TIM4中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //先占优先级0级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //从优先级0级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
NVIC_Init(&NVIC_InitStructure); //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器
TIM_TimeBaseStructure.TIM_Period = period-1; //总的值设置为0xFFFF,设定计数器自动重装值
TIM_TimeBaseStructure.TIM_Prescaler = prescaler-1; //预分频器
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式
TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
TIM_Cmd(TIM4, ENABLE); //开启定时器
TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE); //开启定时器更新中断
}
//定时器4中断服务程序
void TIM4_IRQHandler(void)
{
static u16 tmr200ms = 0;
static u16 tmr1s =0;
if(TIM_GetITStatus(TIM4, TIM_IT_Update) == SET) //溢出中断
{
TIM_ClearITPendingBit(TIM4, TIM_IT_Update); //清除中断标志位
}
}
STM32-TIM4-定时器中断
Guess you like
Origin blog.csdn.net/weixin_43352501/article/details/103835835
Ranking