tim.c
#include "stm32f10x.h" // Device header
#include "tim.h"
void tim_config(void)
{
TIM_TimeBaseInitTypeDef TIMinitStructure;//2.配置定时器时钟结构体
NVIC_InitTypeDef NVICinitStructure;//3.开启定时器中断,配置中断结构体
RCC_APB1PeriphClockCmd( RCC_APB1Periph_TIM2, ENABLE);//1.使能时钟 定时器时钟
NVIC_PriorityGroupConfig( NVIC_PriorityGroup_1);//中断服务组
TIMinitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIMinitStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIMinitStructure.TIM_Period = 10000-1; //Tout
TIMinitStructure.TIM_Prescaler = 7200-1;
TIM_TimeBaseInit( TIM2, &TIMinitStructure);
TIM_Cmd( TIM2, ENABLE); //要有定时器使能
TIM_ITConfig( TIM2, TIM_IT_Update, ENABLE);
NVICinitStructure.NVIC_IRQChannel = TIM2_IRQn;
NVICinitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVICinitStructure.NVIC_IRQChannelSubPriority = 1;
NVICinitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init( &NVICinitStructure );
}
tim.h
#include "stm32f10x.h" // Device header
void tim_config(void);
main.c
#include "stm32f10x.h" // Device header
#include "usart.h"
#include "led.h"
#include "tim.h"
void delay(uint16_t time)
{
uint16_t i = 0;
while(time--)
{
i=12000;
while(i--);
}
}
int main(void)
{
LED_Init();
tim_config();
GPIO_SetBits( GPIOC, GPIO_Pin_13);
while(1)
{
}
}
//4. 配置定时器中断服务函数
void TIM2_IRQHandler(void)
{
static uint16_t temp;
if(TIM_GetITStatus( TIM2, TIM_IT_Update) != RESET) //判断定时器中断标志位是否被打开
{
if(temp++ %2 == 1) //奇偶判断
{
GPIO_ResetBits( GPIOC, GPIO_Pin_13);
}
else
{
GPIO_SetBits( GPIOC, GPIO_Pin_13);
}
}
TIM_ClearITPendingBit( TIM2, TIM_IT_Update);//最后要做定时器清除中断标志位
}