论坛元老
 
- 积分
- 4519
- 金钱
- 4519
- 注册时间
- 2018-5-11
- 在线时间
- 946 小时
|
发表于 2019-5-19 10:46:40
|
显示全部楼层
本帖最后由 warship 于 2019-5-19 20:01 编辑
//配置TIM2为1s产生一次中断,用于定时器使用
void Timer2_Init(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitTypeStruct;
NVIC_InitTypeDef NVIC_InitTypeStruct;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
//72000000/7200=10000=10K
//10Khz的计数频率,每次为1/10K=0.1ms=100us, 计数到10000为1s
TIM_TimeBaseInitTypeStruct.TIM_Prescaler = 7199;//tim2预分频值72000000,即时钟为100us
TIM_TimeBaseInitTypeStruct.TIM_CounterMode = TIM_CounterMode_Up; //向上计数
TIM_TimeBaseInitTypeStruct.TIM_Period = 9999+1; //10000*100us=1s溢出一次
TIM_TimeBaseInitTypeStruct.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitTypeStruct);
NVIC_InitTypeStruct.NVIC_IRQChannel = TIM2_IRQn; //配置定时器中断优先级
NVIC_InitTypeStruct.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitTypeStruct.NVIC_IRQChannelSubPriority = 0;
NVIC_InitTypeStruct.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitTypeStruct);
TIM_ITConfig(TIM2,TIM_IT_Update,DISABLE); //允许溢出中断
TIM_Cmd(TIM2,DISABLE);
}
void StopMyTimer2(void)
{
TIM_Cmd(TIM2,DISABLE ); //失能定时器2
TIM_ITConfig( TIM2,TIM_IT_Update, DISABLE); //关闭TIM2超时溢出中断
}
void StartMyTimer2(void)
{
TIM_Cmd(TIM2,ENABLE ); //使能定时器2
TIM_ITConfig( TIM2,TIM_IT_Update, ENABLE); //允许TIM2超时溢出中断
}
/****************** 以下为TIM2 的中断服务程序 ******************/
volatile u16 My_Delay_s;
//定时器2中断服务: 每1s中断一次
void TIM2_IRQHandler(void)
{
if(TIM_GetITStatus(TIM2, TIM_IT_Update)) //1秒超时溢出
{
TIM_ClearITPendingBit(TIM2, TIM_IT_Update); //清超时标志
if(My_Delay_s) My_Delay_s--; else AutoStartCollect=1;
TIM_ClearITPendingBit(TIM2, TIM_IT_Update); //清超时标志
TIM_Cmd(TIM2,ENABLE);
}
}
|
|