#include "stm32f10x.h" // Device header
void TimerInit(void)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
TIM_InternalClockConfig(TIM2);
// 初始化配置时基单元
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitTypeStructrue;
TIM_TimeBaseInitTypeStructrue.TIM_ClockDivision = TIM_CKD_DIV1; // 是否分频
TIM_TimeBaseInitTypeStructrue.TIM_CounterMode = TIM_CounterMode_Up; // 中心对齐模式1
TIM_TimeBaseInitTypeStructrue.TIM_Period = 10000 - 1; // 更新周期值
TIM_TimeBaseInitTypeStructrue.TIM_Prescaler = 7200 - 1; // 预分频器值
TIM_TimeBaseInitTypeStructrue.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitTypeStructrue);
// 使能中断 更新中断到NVIC的路
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
// NVIC优先级分组
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
// 初始化NVIC
NVIC_InitTypeDef NVIC_InitStructrue;
NVIC_InitStructrue.NVIC_IRQChannel=TIM2_IRQn;
NVIC_InitStructrue.NVIC_IRQChannelCmd=ENABLE;
NVIC_InitStructrue.NVIC_IRQChannelPreemptionPriority=2; // 配置抢断优先级
NVIC_InitStructrue.NVIC_IRQChannelSubPriority=1; // 配置响应优先级
NVIC_Init(&NVIC_InitStructrue);
// 启动定时器
TIM_Cmd(TIM2, ENABLE);
}
// 定时器2的中断函数
void TIM2_IRQHandler(void)
{
// 检查一下中断是否真的触发了
// 如果中断2的更新中断变成set了,就可以执行中断函数了
if(TIM_GetITStatus(TIM2, TIM_IT_Update) == SET)
{
// 可以在这里执行中断事件
// 清除中断标志位
TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
}
}
标签:TIM2,初始化,定时器,InitStructrue,TIM,中断,NVIC,Tim,TimeBaseInitTypeStructrue
From: https://www.cnblogs.com/Abraverman/p/18280315