OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4229|回复: 3

定时器二怎么就进入中断一次,这样写 好像没错吧,求大神解答

[复制链接]

12

主题

45

帖子

0

精华

初级会员

Rank: 2

积分
113
金钱
113
注册时间
2014-9-1
在线时间
0 小时
发表于 2014-11-27 17:06:50 | 显示全部楼层 |阅读模式
5金钱

void TIM2_Int_Init(u16 arr,u16 psc)
{  
TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //?±??????
TIM_TimeBaseStructure.TIM_Period = arr; //?è???????????ü??????×°????????×?????×°???????÷???????? ??????5000??500ms
TIM_TimeBaseStructure.TIM_Prescaler = psc; //?è??????×÷??TIMx?±?????????????¤·?????  10Khz??????????  
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //?è???±??·???:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM?ò??????????
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //?ù??TIM_TimeBaseInitStruct?????¨????????????TIMx???±???ù??????
TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE ); //???????¨??TIM2????,???í?ü??????
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;  //TIM2????
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  //??????????0??
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  //????????3??
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ?¨??±?????
NVIC_Init(&NVIC_InitStructure);  //?ù??NVIC_InitStruct?????¨???????????????èNVIC?????÷
TIM_Cmd(TIM2, ENABLE);  //????TIMx???è
}

void TIM2_IRQHandler(void)

if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) //?ì?é???¨??TIM????·??ú??·?:TIM ?????? 
{
TIM_ClearITPendingBit(TIM2, TIM_IT_Update  );  //????TIMx???????????í??:TIM ?????? 
m_counter0++;
}
}
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
发表于 2014-11-27 17:18:25 | 显示全部楼层
下面怎么3个大括号呢?
其他的跟我的一样。其他地方问题吧?
怎么调用的呢?
小小蜗牛
回复

使用道具 举报

12

主题

45

帖子

0

精华

初级会员

Rank: 2

积分
113
金钱
113
注册时间
2014-9-1
在线时间
0 小时
 楼主| 发表于 2014-11-28 09:00:43 | 显示全部楼层
回复【2楼】jiutianshenjian:
---------------------------------
void TIM2_IRQHandler(void)

if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) //?ì?é???¨??TIM????·??ú??·?:TIM ?????? 
{
TIM_ClearITPendingBit(TIM2, TIM_IT_Update  );  //????TIMx???????????í??:TIM ?????? 
m_counter0++;
switch(m_state)
{
case ROMPT_STATE_NOE:
break;
case ROMPT_STATE_INSTALL_SUCC:
if(m_counter0>0&&m_counter0<ROMPT_TIM2_TICKS_PER_TIME/20)
{
BEEP = ROMPT_BEEP_OPEN;
LED=LEDOPEN;
TIM_Cmd(TIM3,ENABLE);
}
else if(m_counter0 >< ROMPT_TIM2_TICKS_PER_TIME/10)
{
LED=LEDCLOSE;
TIM_Cmd(TIM3,DISABLE);
BEEP = ROMPT_BEEP_CLOSE;
}
else if(m_counter0 < ROMPT_TIM2_TICKS_PER_TIME/5)
{
LED=LEDOPEN;
TIM_Cmd(TIM3,ENABLE);
BEEP = ROMPT_BEEP_OPEN;
}
else
{
LED=LEDCLOSE;
TIM_Cmd(TIM3,DISABLE);
BEEP = ROMPT_BEEP_CLOSE;
}
break;
 case ROMPT_STATE_READ_SUCC:
if(m_counter0 > 0 && m_counter0 < PROMPT_TIM2_TICKS_PER_TIME/2)
{    
BEEP = PROMPT_BEEP_OPEN;
LED=LEDOPEN;
TIM_Cmd(TIM3,ENABLE);
}
else
{  
LED=LEDCLOSE;
TIM_Cmd(TIM3,DISABLE);
BEEP = PROMPT_BEEP_CLOSE;
}
break;
case PROMPT_STATE_WRITERWORD_SUCC:
break;
default:
break;
}
}
}
void PROMPT_SuccInstall(void)
{
m_state=PROMPT_STATE_INSTALL_SUCC;
LED = PROMPT_LED_CLOSE;
BEEP = PROMPT_BEEP_CLOSE;
}
我是通过这样来调用PROMPT_SuccInstall()这个函数 赋值给m_state=PROMPT_STATE_INSTALL_SUCC; 让中断里面去执行相应的响应。可是好像中断就进入一次
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
发表于 2014-11-28 15:23:16 | 显示全部楼层
回复【3楼】zhanghao:
---------------------------------
void TIM2_IRQHandler(void)这一行设断点,能到达几次呢?

程序还在正常跑吗?点红叉停在哪里?

你如何调用TIM2_Int_Init的?
小小蜗牛
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-28 13:57

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表