OpenEdv-开源电子网

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

有关定时器寄存器溢出的问题

[复制链接]

16

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2015-5-22
在线时间
0 小时
发表于 2015-8-16 17:47:40 | 显示全部楼层 |阅读模式
5金钱
我使用定时器外部计数模式,直接输出寄存器的值TIM3->CNT的值没问题,但是发现无法进入溢出中断,也就是flag一直为0
void TIM2_IRQHandler(void)  
 {
if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)
 {
TIM_ClearITPendingBit(TIM2, TIM_IT_Update  ); 
flag++;
 }
 }
求解怎么回事啊,很苦恼


初始化如下
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
    
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
TIM_DeInit(TIM2);
TIM_TimeBaseStructure.TIM_Period = arr;  
TIM_TimeBaseStructure.TIM_Prescaler =psc; 
TIM_TimeBaseStructure.TIM_ClockDivision = 0; 
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; 
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
TIM_ETRClockMode2Config(TIM2, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0);
TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);
TIM_SetCounter(TIM2, 0); 
TIM_Cmd(TIM2, ENABLE);  

最佳答案

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

使用道具 举报

4

主题

44

帖子

0

精华

初级会员

Rank: 2

积分
185
金钱
185
注册时间
2013-8-11
在线时间
25 小时
发表于 2015-8-16 17:47:41 | 显示全部楼层
回复

使用道具 举报

13

主题

303

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2275
金钱
2275
注册时间
2015-2-3
在线时间
562 小时
发表于 2015-8-16 17:49:52 | 显示全部楼层
你没有清除 中断标志位
STM32/LPC1788/51
回复

使用道具 举报

3

主题

2170

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5781
金钱
5781
注册时间
2013-11-22
在线时间
1212 小时
发表于 2015-8-16 20:33:08 | 显示全部楼层
中断函数里  你要清除的是TIM2的标志位  不是TIM5
回复

使用道具 举报

154

主题

289

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1067
金钱
1067
注册时间
2015-4-13
在线时间
189 小时
发表于 2015-8-16 20:47:32 | 显示全部楼层
TIM_ClearITPendingBit(TIM5, TIM_IT_Update  );这句改成TIM2,定时器有好多个的
回复

使用道具 举报

16

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2015-5-22
在线时间
0 小时
 楼主| 发表于 2015-8-16 21:17:14 | 显示全部楼层
回复【4楼】jeraw:
---------------------------------
刚才打错了,是TIM2的,
回复

使用道具 举报

154

主题

289

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1067
金钱
1067
注册时间
2015-4-13
在线时间
189 小时
发表于 2015-8-16 21:30:13 | 显示全部楼层
回复【5楼】wangpaofeng:
---------------------------------
哦, TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //使能指定的TIM3中断,允许更新中断
  //中断优先级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寄存器
这个中断设置没见到
回复

使用道具 举报

16

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2015-5-22
在线时间
0 小时
 楼主| 发表于 2015-8-16 21:34:03 | 显示全部楼层
回复【7楼】jeraw:
---------------------------------多谢多谢哈
回复

使用道具 举报

16

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2015-5-22
在线时间
0 小时
 楼主| 发表于 2015-8-16 23:03:51 | 显示全部楼层
回复【7楼】jeraw:
---------------------------------
请问我用到了TIM2和TIM3做外部计数,两个初始化完全一样,中断函数也完全一样,(除了TIM后面的数字),为什么在TIM5终端中处理两个数的结果不一样
void TIM5_IRQHandler(void)   //TIM3????

u16 speed;
if (TIM_GetITStatus(TIM5, TIM_IT_Update) != RESET)
{
TIM_ClearITPendingBit(TIM5, TIM_IT_Update );  
//   GPIO_WriteBit(GPIOA,GPIO_Pin_15,Bit_RESET); 
count0=TIM2->CNT;
count1=TIM3->CNT; 
// count0=65535*test_1+count0;
// count1=65535*test_2+count1;
LCD_ShowNum(50,160,count0,16,16); 
LCD_ShowNum(50,180,test_1,16,16); 
LCD_ShowNum(50,200,count1,16,16);
LCD_ShowNum(50,220,test_2,16,16); 

}
下面是TIM23的初始化
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-18 08:12

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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