OpenEdv-开源电子网

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

为什么中断配置完之后它就立马进入中断呀

[复制链接]

22

主题

105

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
213
金钱
213
注册时间
2012-8-24
在线时间
0 小时
发表于 2013-4-9 00:23:21 | 显示全部楼层 |阅读模式

为什么中断配置完之后它就立马进入中断呀?TIM1和TIM3都是如此。按道理是要等我的计数器计满数更新时候才进入中断的呀!不是说好的更新中断嘛。。我在中断处理函数里面设置了断点,发现中断函数一配置完就立马中断,这是怎么回事?我的TIM配置有问题吗?
void TIM3_Config(void)
{
 GPIO_InitTypeDef GPIO_InitStructure; //GPIO结构体
 TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure; //定时器基本设置结构体
 NVIC_InitTypeDef NVIC_InitStructure; //中断优先级设置结构体
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);//使能PD端口时钟【总线访问IO口可以不开启端口的时钟,所以这里不使能PD也可以】
 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//使能TIM3时钟
 
 //Config PD2 为浮空输入
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  //最高50MHz的频率
 GPIO_Init(GPIOD, &GPIO_InitStructure); //TIM3的ETR输入脚为PD2 

 TIM_TimeBaseStructure.TIM_Prescaler = 0x00; //设置预分频值,此处不分频
 TIM_TimeBaseStructure.TIM_Period = 0xFFFF; //自动重装载值TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;//时钟分割
 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数模式
 TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);  // Time base configuration 


 TIM_ETRClockMode2Config(TIM3, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted,0x0);
 //TIM3的时钟源选择外部时钟模式2(即外部触发输入ETR)
 //无预分频器,捕获入口上检测到的每一个边沿都触发一次捕获。
 //TIM_ExtTRGPolarity_NonInverted上升沿极性
 //第四个参数必须是0x00-0x0F之间的数,表示输入捕获滤波器 
  
 TIM_SetCounter(TIM3,0x0); //TIM3初值设为0
 
 TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); //使能定时器3更新中断(允许更新中断)
 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
 NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;//TIM3中断
 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;//先占优先1级
 NVIC_InitStructure.NVIC_IRQChannelSubPriority=2;//从优先2级 
 NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;  //IRQ通道被使能
 NVIC_Init(&NVIC_InitStructure);//中断优先级初始化

 TIM_Cmd(TIM3, ENABLE);//TIM3使能 
}

有进步就好!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-4-9 00:58:29 | 显示全部楼层
在stm32来说是普遍现象了...
没找到好的解决办法.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

1447

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2258
金钱
2258
注册时间
2010-12-16
在线时间
206 小时
发表于 2013-4-9 01:01:12 | 显示全部楼层
开启中断前进行清中断操作.
技术讨论请发帖 , 需要我回复请点左下的 < 回复 > 让系统通知我 . 本人不通过其他方式返回任何参数.
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-4-9 01:18:58 | 显示全部楼层
回复【3楼】shihantu:
---------------------------------
清SR?
不管用哦,我测试硬件仿真的时候,照进中断不误....
//定时器3中断服务程序  
void TIM3_IRQHandler(void)
{              
if(TIM3->SR&0X0001)//溢出中断
{
LED1=!LED1;                    
}    
TIM3->SR&=~(1<<0);//清除中断标志位      
}
//通用定时器中断初始化
//这里时钟选择为APB1的2倍,而APB1为36M
//arr:自动重装值。
//psc:时钟预分频数
//这里使用的是定时器3!
void Timerx_Init(u16 arr,u16 psc)
{
RCC->APB1ENR|=1<<1;//TIM3时钟使能    
  TIM3->ARR=arr;  //设定计数器自动重装值//刚好1ms    
TIM3->SC=psc;  //预分频器7200,得到10Khz的计数时钟
//这两个东东要同时设置才可以使用中断
TIM3->DIER|=1<<0;   //允许更新中断
// TIM3->DIER|=1<<6;   //允许触发中断    
TIM3->CR1|=0x01;    //使能定时器3
  TIM3->SR=0;//清除中断标志位      
  MY_NVIC_Init(1,3,TIM3_IRQChannel,2);//抢占1,子优先级3,组2  
}
这是测试代码,在中断配置之前,清SR了,但是还是会进入.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

36

主题

1263

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1612
金钱
1612
注册时间
2012-6-15
在线时间
39 小时
发表于 2013-4-9 13:06:56 | 显示全部楼层
TIM3->CR1|=0x01;

这句之前清除中断标志
回复 支持 反对

使用道具 举报

22

主题

105

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
213
金钱
213
注册时间
2012-8-24
在线时间
0 小时
 楼主| 发表于 2013-4-9 14:02:11 | 显示全部楼层
回复【5楼】aleda303:
TIM3->CR1|=0x01; 
 这句之前清除中断标志
---------------------------------
  
我按这个做了还是中断配置完就直接进入了中断。
有进步就好!
回复 支持 反对

使用道具 举报

96

主题

762

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1228
金钱
1228
注册时间
2012-10-19
在线时间
15 小时
发表于 2013-4-9 14:25:59 | 显示全部楼层
回复【6楼】caoyicheng626:
---------------------------------
自动重装载值设置为0 试试
回复 支持 反对

使用道具 举报

22

主题

105

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
213
金钱
213
注册时间
2012-8-24
在线时间
0 小时
 楼主| 发表于 2013-4-9 14:48:37 | 显示全部楼层
回复【7楼】tian123chi:
 自动重装载值设置为0 试试
---------------------------------

  设为0的话,我试了一下。一方面它还是直接进中断,另一方面进了中断出不来了 一直在中断里面

我好像在哪个地方看到一句话:“自动重装载值为空时定时器不工作”。应该就是说不配置自动重装载值、自动重装载值设置为0 定时器均不会工作。。。
有进步就好!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-4-9 15:01:29 | 显示全部楼层
回复【5楼】aleda303:
---------------------------------
一样效果的
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

96

主题

762

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1228
金钱
1228
注册时间
2012-10-19
在线时间
15 小时
发表于 2013-4-9 16:09:14 | 显示全部楼层
回复【8楼】caoyicheng626:
---------------------------------
怎么看进不进中断?我放了两个灯在里边没亮就是了。。。仿真器一步步跑,中断配置完成后也没进入中断,我调试能力比较差,估计是我错了。。。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-21 16:17

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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