新手上路
- 积分
- 34
- 金钱
- 34
- 注册时间
- 2013-5-10
- 在线时间
- 0 小时
|
用SRM32定时器3,做最简单的溢出中断
void TIMER3_INIT(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; //定时器声明
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //定时器2时钟使能,2分频,72M
TIM_TimeBaseStructure.TIM_Prescaler =(7200-1); //psc 设置预分频数 72M/7200=10K
TIM_TimeBaseStructure.TIM_Period = (5000); //arr 设置自动重装载寄存器 arr 10K/5000=2Hz 500ms溢出时间
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上模式
TIM_TimeBaseStructure.TIM_ClockDivision= TIM_CKD_DIV1; //=0x0000 设置时间分割值
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //初始化
TIM_ClearITPendingBit(TIM3, TIM_IT_Update); //清中断标志位
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); //使能中断
TIM_ARRPreloadConfig(TIM3, DISABLE); //禁止ARR预装载缓冲器
TIM_Cmd(TIM2,ENABLE); //开启定时器
}
void MBTIM3_ENable(void) //定时器3中断配置
{
NVIC_InitTypeDef NVIC_InitStructure; //声明
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); //设置中断优先级分组
NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; //设置为定时器3中断,设置中断源
// NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1 ; //设置抢占优先级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //设置响应优先级
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; //使能
NVIC_Init(&NVIC_InitStructure); //初始化
}
以下是重点,以上配置是500ms溢出,现在想产生5分钟的时间溢出中断,在中断里累加,当累加到600,也就是5分钟,但是程序运行几秒钟,就进入断点了,怎么回事啊。以前在AVR就是用这样的方法,现在在STM32里不行了啊
unsigned int iTimerCount = 0;
void TIM3_IRQHandler(void) //定时器中断
{
if(TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //如果产生定时器中断
{
iTimerCount++;
if(iTimerCount>=600)
{
iTimerCount=0;
TIM3->CR1&=0xfe; //关闭定时器3
TIM_SetCounter(TIM3,0); //清计数器
TIM_ClearITPendingBit(TIM3, TIM_IT_Update); //清标志位
led_off;
}
} |
|