定时器属于常见功能,程序如下:
/*
********************************************************************************************************
函 数 名: TimerApp_Init
功 能: 定时器初始化
参 数: p_s_Base_Add - TIM选择
u32_frequent - 频率
返 回: 无
********************************************************************************************************
*/
void TimerApp_Init(TIM_TypeDef *p_s_Base_Add, uint32 u32_frequent)
{
TIM_TimeBaseInitTypeDef s_TIM_TimeBaseStructure;
NVIC_InitTypeDef s_NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1PERIPH_TIM2, ENABLE);
/* 100us(1 * 100)中断一次 */
s_TIM_TimeBaseStructure.TIM_Period = u32_frequent - 1; /* TimeOut Ms 触发一次 */
s_TIM_TimeBaseStructure.TIM_Prescaler = 84 - 1; /* TIMx counter clock at 1 MHz */
s_TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
s_TIM_TimeBaseStructure.TIM_CounterMode = TIM_COUNTERMODE_UP;
TIM_TimeBaseInit(p_s_Base_Add, &s_TIM_TimeBaseStructure);
TIM_PrescalerConfig(p_s_Base_Add, s_TIM_TimeBaseStructure.TIM_Prescaler, TIM_PSCRELOADMODE_IMMEDIATE);
TIM_ClearFlag(p_s_Base_Add, TIM_FLAG_UPDATE);
TIM_ITConfig(p_s_Base_Add, TIM_IT_UPDATE, ENABLE);
TIM_Cmd(p_s_Base_Add, ENABLE);
/* Enable the TIM3 gloabal Interrupt */
s_NVIC_InitStructure.NVIC_IRQChannel = (uint8)TIM2_IRQn;
s_NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2U;
s_NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1U;
s_NVIC_InitStructure.e_NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&s_NVIC_InitStructure);
}
TimerApp_Init(TIM2, 100);
#ifndef TIMER_H
#define TIMER_H
/* Includes ----------------------------------------------------------------- */
#include "Config.h"
#include "stm32f4xx.h"
#include "stm32f4xx_conf.h"
/* Exported define ------------------------------------------------------- */
#define function_ms (200U) /* 定义调用函数间隔时间 */
#define function_ms2 (100U) /* 定义调用函数间隔时间 */
/* Exported functions ----------------------------------------------------------- */
void SysTick_ISR(void);
void Fun_RunPerXms(void);
void Fun_RunPerYms(void);
void TimerApp_Init(TIM_TypeDef *p_s_Base_Add, uint32 u32_frequent);
void SysTick_Delay_us(uint32 nDelay);
void SysTick_Init(void);
uint32 SysTick_GetTime(void);
uint8 SysTick_CompareTime(uint32 TimeValue, uint32 Period);