OpenEdv-开源电子网

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

TIM1定时器进不了中断???咋回事

[复制链接]

3

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
74
金钱
74
注册时间
2011-7-26
在线时间
8 小时
发表于 2012-8-7 22:47:14 | 显示全部楼层 |阅读模式

void TIM1_IRQHandler(void)
{      
 if(BIT(TIM1->DIER,6) && BIT(TIM1->SR,0))//溢出中断
 {
//  LED0=!LED0; 
  BIT(TIM1->SR,0) = 0;                            
 }
 LED0 = 0;    
}

 

//psc16位预分频器的值
//arr自动装载的值
void Tim1_Init(u16 psc,u16 arr)
{
 //首先要打开对应的时钟---必须的
 BIT(RCC->APB2ENR,11) = 1; //使能TIM1定时器
 TIM1->SC = psc;  //预分频器
 TIM1->ARR = arr;  //装载的值
 
 BIT(TIM1->DIER,0) = 1; //允许更新中断
 BIT(TIM1->DIER,6) = 1; //允许触发中断
 
 BIT(TIM1->CR1,7) = 1;
 BIT(TIM1->CR1,0) = 1; //开始计数
// TIM1->BDTR |= 0x8000;
 MY_NVIC_Init(10,0,TIM1_UP_IRQChannel,4);//最低优先级
}

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-8-7 23:31:11 | 显示全部楼层
看配置无问题哦.
就不知道你的那些BIT函数,有无问题了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

3

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
74
金钱
74
注册时间
2011-7-26
在线时间
8 小时
 楼主| 发表于 2012-8-8 09:07:24 | 显示全部楼层
BIT函数是验证过的,我再传一个TIM2的同样的配置的,TIM2可以进入中断...反复看了PDF确实没有发现问题,奇怪啊
void TIM2_IRQHandler(void)   //用TIM2来做时基
{      
    static u8 tick_1ms_count,tick_10ms_count;
if(BIT(TIM2->SR,0))//溢出中断
{
    tick_1ms_count++;
        if(tick_1ms_count == 10)
            {
            tick_1ms_count = 0;
            tick_10ms = 1;
            tick_10ms_count ++;
            if(tick_10ms_count == 100)
                {
                tick_10ms_count = 0;
                tick_1s = 1;
            }
        }
        
// LED1=!LED1;                    
}    
BITCLR(TIM2->SR,0);//清除中断标志位      
}



//psc16位预分频器的值
//arr自动装载的值
void Tim2_Init(u16 psc,u16 arr)
{
//首先要打开对应的时钟---必须的
BIT(RCC->APB1ENR,0) = 1; //使能TIM2定时器,也就是time2时钟打开
TIM2->SC = psc; //预分频器
TIM2->ARR = arr; //装载的值
BIT(TIM2->DIER,0) = 1; //允许更新中断
BIT(TIM2->DIER,6) = 1; //允许触发中断
BIT(TIM2->CR1,0) = 1; //开始计数
MY_NVIC_Init(15,0,TIM2_IRQChannel,4);//最低优先级
}
回复 支持 反对

使用道具 举报

3

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
74
金钱
74
注册时间
2011-7-26
在线时间
8 小时
 楼主| 发表于 2012-8-8 09:07:38 | 显示全部楼层
配置都一样,TIM2中断可以进去
回复 支持 反对

使用道具 举报

18

主题

158

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
400
金钱
400
注册时间
2011-11-23
在线时间
0 小时
发表于 2012-8-8 09:46:14 | 显示全部楼层
回复【4楼】xiongb89127:
---------------------------------
 if(BIT(TIM1->DIER,6) && BIT(TIM1->SR,0))//溢出中断
改成if(BIT(TIM1->SR,0))试试
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-8-8 09:50:42 | 显示全部楼层
//定时器3中断服务程序  
void TIM1_UP_IRQHandler(void)
{              
if(TIM1->SR&0X0001)//溢出中断
{
LED1=!LED1;                    
}    
TIM1->SR&=~(1<<0);//清除中断标志位      
}
//通用定时器中断初始化
//这里时钟选择为APB1的2倍,而APB1为36M
//arr:自动重装值。
//psc:时钟预分频数
//这里使用的是定时器3!
void Timer1_Init(u16 arr,u16 psc)
{
RCC->APB2ENR|=1<<11;//TIM1时钟使能    
  TIM1->ARR=arr;  //设定计数器自动重装值//刚好1ms    
TIM1->SC=psc;  //预分频器7200,得到10Khz的计数时钟
//这两个东东要同时设置才可以使用中断
TIM1->DIER|=1<<0;   //允许更新中断
TIM1->DIER|=1<<6;   //允许触发中断    
TIM1->CR1|=0x01;    //使能定时器3
   MY_NVIC_Init(1,3,TIM1_UP_IRQChannel,2);//抢占1,子优先级3,组2  
}
以上代码,仿真通过.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

3

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
74
金钱
74
注册时间
2011-7-26
在线时间
8 小时
 楼主| 发表于 2012-8-8 10:25:56 | 显示全部楼层
问题找到了,中断的入口有问题...应该是TIM1_UP_IRQHandler,我写的是TIM1_IRQHandler,谢谢大家!!!
回复 支持 反对

使用道具 举报

18

主题

158

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
400
金钱
400
注册时间
2011-11-23
在线时间
0 小时
发表于 2012-8-8 10:54:02 | 显示全部楼层
回复【7楼】xiongb89127:
---------------------------------
中断服务函数不要自己定义,这些原子大哥都给我们定义好了,我以前也犯过这个错误~
回复 支持 反对

使用道具 举报

3

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
74
金钱
74
注册时间
2011-7-26
在线时间
8 小时
 楼主| 发表于 2012-8-8 11:04:40 | 显示全部楼层
中断的函数名的定义是在哪里找的
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-8-8 11:55:34 | 显示全部楼层
回复【8楼】shuilian007:
---------------------------------
不是我定义的呢,呵呵.在.s文件里面定义的.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2012-2-11
在线时间
0 小时
发表于 2014-12-19 11:05:47 | 显示全部楼层
void TIM1_IRQHandler(void)
{
//to do
}

void TIM1_IRQnHandler(void)
{
//to do
}

很坑爹,库的原因。我纠结过,void TIM1_IRQnHandler(void)
{
//to do
}不能进中断。改为void TIM1_IRQHandler(void)
{
//to do
}就可以了。输入捕捉
回复 支持 反对

使用道具 举报

6

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
69
金钱
69
注册时间
2015-3-11
在线时间
0 小时
发表于 2015-9-14 12:38:59 | 显示全部楼层
 回复【7楼】 xiongb89127 :
---------------------------------
谢谢,我也碰到了同样的问题,确实TIM1和TIM8比较特殊,在stm32f10x.h中可以看到TIM1和TIM8中断入口分为几种:
[mw_shl_code=c,true] TIM1_BRK_TIM15_IRQn = 24, /*!< TIM1 Break and TIM15 Interrupts */ TIM1_UP_TIM16_IRQn = 25, /*!< TIM1 Update and TIM16 Interrupts */ TIM1_TRG_COM_TIM17_IRQn = 26, /*!< TIM1 Trigger and Commutation and TIM17 Interrupt */ TIM1_CC_IRQn = 27, /*!< TIM1 Capture Compare Interrupt */ TIM8_BRK_IRQn = 43, /*!< TIM8 Break Interrupt */ TIM8_UP_IRQn = 44, /*!< TIM8 Update Interrupt */ TIM8_TRG_COM_IRQn = 45, /*!< TIM8 Trigger and Commutation Interrupt */ TIM8_CC_IRQn = 46, /*!< TIM8 Capture Compare Interrupt */[/mw_shl_code]
引以为鉴,MARK

回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-17 19:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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