#include "stm32f2xx.h" #include "TIM.h" void TIM2_Init(void) { // 使能定时器2时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; // 配置定时器参数 TIM_TimeBaseStructure.TIM_Prescaler = 8399; // 预分频器,即84MHz/8400=10kHz的计数频率 TIM_TimeBaseStructure.TIM_Period = 10000; // 设定自动重装载寄存器周期的值,计数10,000次为1s TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); // 启动定时器2 TIM_Cmd(TIM2, ENABLE); } void TIM2_Start(void) { // 启动定时器2的中断 TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); // 启用定时器2中断 NVIC_InitTypeDef NVIC_InitStructure; NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } void TIM2_Stop(void) { // 关闭定时器2的中断 TIM_ITConfig(TIM2, TIM_IT_Update, DISABLE); } void TIM2_IRQHandler(void) { if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) { // 处理定时器中断 // 清除中断标志 TIM_ClearITPendingBit(TIM2, TIM_IT_Update); } }