OpenEdv-开源电子网

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

求教 :定时器的问题

[复制链接]

4

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2015-7-31
在线时间
1 小时
发表于 2015-8-5 21:19:12 | 显示全部楼层 |阅读模式
5金钱
为什么在中断服务函数缺失的的情况下,函数不能执行主函数中while(1)的语句呢??
[mw_shl_code=c,true]#include "timer.h" #include "led.h" void timer_init(u16 arr,u16 psc) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //?±?????? TIM_TimeBaseStructure.TIM_Period = arr; //?è???????????ü??????×°????????×?????×°???????÷???????? TIM_TimeBaseStructure.TIM_Prescaler =psc; //?è??????×÷??TIMx?±?????????????¤·????? // TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //?è???±??·???:TDTS = Tck_tim TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM?ò?????????? TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //?ù?????¨????????????TIMx???±???ù????? TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); //??????????NVIC?è?? NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; //TIM3???? NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //??????????0?? NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //????????3?? NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ?¨??±????? NVIC_Init(&NVIC_InitStructure); //??????NVIC?????÷ TIM_Cmd(TIM3,ENABLE); } //void TIM3_IRQHandler(void) //{ // if(TIM_GetITStatus(TIM3, TIM_IT_Update) == SET) // { // TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); // LED0=!LED0; // // } //} // 下面为主函数 #include "led.h" #include "delay.h" #include "sys.h" #include "timer.h" //ALIENTEK????STM32??·?°????é1 //???í?????é //?????§????www.openedv.com //?????????í??×????????????? int main(void) { delay_init(); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//????·?×é LED_Init(); timer_init(4999,7199); LED1=0; LED0=0; while(1) { LED1=!LED1; delay_ms(1000); } } [/mw_shl_code]

最佳答案

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-8-5 21:19:13 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

10

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1836
金钱
1836
注册时间
2014-6-27
在线时间
981 小时
发表于 2015-8-5 22:13:33 | 显示全部楼层
你要看到它的本质,开了中断没有中断函数,就会死掉,和没进去一个效果。
回复

使用道具 举报

25

主题

81

帖子

0

精华

初级会员

Rank: 2

积分
194
金钱
194
注册时间
2015-3-14
在线时间
5 小时
发表于 2015-8-5 22:45:39 | 显示全部楼层
看你程序执行while(1)里面的程序和有没有中断服务函数有什么关系呢?
回复

使用道具 举报

1

主题

108

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
352
金钱
352
注册时间
2012-11-8
在线时间
44 小时
发表于 2015-8-6 14:03:19 | 显示全部楼层
我的理解是这样:如果开了中断,要不然中断标志怎么清除?不清除中断标志不就一直进中断了吗?当然无法进入while(1)
几点建议:如果一定要开中断,但是还不知道中断里面要做什么操作,那么就在中断函数里面加入中断标志的清除,也就是:TIM_ClearITPendingBit(TIM3, TIM_IT_Update);  //清除TIMx更新中断标志 
               如果中断函数真的没啥要干的,那么直接干脆不要开这个中断,就是去掉TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);这句。
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2015-8-2
在线时间
0 小时
发表于 2015-8-6 14:46:55 | 显示全部楼层
中断函数就是让单片机知道中断来了干什么,既然没有中断函数,肯定就不会进while(1)
回复

使用道具 举报

4

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2015-7-31
在线时间
1 小时
 楼主| 发表于 2015-8-6 22:39:40 | 显示全部楼层
回复【4楼】shimengdacs:
---------------------------------
谢谢大神!!
回复

使用道具 举报

4

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2015-7-31
在线时间
1 小时
 楼主| 发表于 2015-8-6 22:42:10 | 显示全部楼层
回复【3楼】斌封天下:
---------------------------------
没有关系的
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-18 18:53

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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