1.描述
这段风格是从GD32F4系列学过来的,特别好用所以做个小笔记。运行在标准固件库工程中。
1.1.基本构成
定时器RCC时钟、Prescaler、Period和NVIC等配置
记录延迟的变量
定时器中断服务函数与逻辑
2.代码
timer.c部分
#include "timer.h"
uint16_t count = 0;
void TIM2_Config( void )
{
TIM_TimeBaseInitTypeDef TIM2_TimeBaseInitStructure;
NVIC_InitTypeDef TIM2_NVICInitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
TIM2_TimeBaseInitStructure.TIM_Prescaler = 7199;
TIM2_TimeBaseInitStructure.TIM_Period = 9;
TIM2_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM2_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseInit(TIM2, &TIM2_TimeBaseInitStructure);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
TIM2_NVICInitStructure.NVIC_IRQChannel = TIM2_IRQn;
TIM2_NVICInitStructure.NVIC_IRQChannelPreemptionPriority = 0;
TIM2_NVICInitStructure.NVIC_IRQChannelSubPriority = 0;
TIM2_NVICInitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&TIM2_NVICInitStructure);
TIM_Cmd(TIM2, ENABLE);
}
void delay_ms(uint32_t ms)
{
count = ms;
while(count != 0);
}
void TIM2_IRQHandler( void )
{
if(TIM_GetITStatus(TIM2, TIM_IT_Update))
{
TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
if(count > 0)
{
count --;
}
}
}
timer.h部分
#ifndef TIMER_H
#define TIMER_H
#include "stm32f10x.h"
void TIM2_Config( void );
void delay_ms(uint32_t ms);
#endif