OpenEdv-开源电子网

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

STM32F103,TIM1定时器定时对怎么回事啊?

[复制链接]

2

主题

5

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2014-10-4
在线时间
1 小时
发表于 2015-7-23 19:25:59 | 显示全部楼层 |阅读模式
5金钱
用的原子个的mini板,本来定时的50us,出来确实250us。头都大了。

这是我的定时器程序:
void TIM1_Int_Init(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);

TIM_DeInit(TIM1); 

TIM_TimeBaseStructure.TIM_Period = 49;
TIM_TimeBaseStructure.TIM_Prescaler = 71;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);


    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); //设置NVIC中断分组1: 1位抢占优先级,3位响应优先级

NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

TIM_ClearFlag(TIM1, TIM_FLAG_Update); 
TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE);

TIM_Cmd(TIM1,ENABLE);

}

void TIM1_UP_IRQHandler(void)
{
if(TIM_GetITStatus(TIM1,TIM_IT_Update) !=RESET )
{
LED1 = !LED1; 
TIM_ClearITPendingBit(TIM1,TIM_IT_Update);
}
}
附上我的程序,希望各位朋友能解决,我们共同学习!谢谢!

5定时器中断_TIM1.rar

270.23 KB, 下载次数: 377

最佳答案

查看完整内容[请看2#楼]

应该是定时器重复计数功能影响了   在 TIM_DeInit(TIM1)  后面加上这句   TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

2170

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5779
金钱
5779
注册时间
2013-11-22
在线时间
1211 小时
发表于 2015-7-23 19:26:00 | 显示全部楼层
应该是定时器重复计数功能影响了   在 TIM_DeInit(TIM1)  后面加上这句   TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
回复

使用道具 举报

2

主题

5

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2014-10-4
在线时间
1 小时
 楼主| 发表于 2015-7-23 19:31:47 | 显示全部楼层
这是我用示波器监测I/O 口测试出来的值

回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2015-7-23 19:55:39 | 显示全部楼层
楼主的分频值和重装值不对吧,根据TIM1所在总线的频率来算分频值,在计算重装值,具体原子哥的例程已经给出计算公式了,不解释,呵呵
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

1

主题

72

帖子

0

精华

初级会员

Rank: 2

积分
115
金钱
115
注册时间
2015-7-16
在线时间
3 小时
发表于 2015-7-24 12:48:39 | 显示全部楼层
回复【4楼】lycreturn:
---------------------------------
虽然从现象上看应该是定时器重复计数功能影响了,但系统复位后该值为0的;
个人认为TIM_DeInit(TIM1)后加上这个TIM_TimeBaseStructInit(&TIM_TimeBaseStructure)与初始化结构体后调用这个函数没有什么区别,欢迎讨论...
回复

使用道具 举报

0

主题

14

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2015-7-25
在线时间
2 小时
发表于 2015-7-25 15:06:20 | 显示全部楼层

不知道楼主的主频时钟频率设定是多少,我用103的芯片测试,在主频72M的条件下,定时器是50us,这部分代码没看出什么问题。

回复

使用道具 举报

2

主题

5

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2014-10-4
在线时间
1 小时
 楼主| 发表于 2015-7-29 21:01:17 | 显示全部楼层
我设置了TIM_TimeBaseStructure.TIM_RepetitionCounter = 0,就行了!高级定时器的重复计数功能!不知道是不是这个原因!
回复

使用道具 举报

1

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
160
金钱
160
注册时间
2016-8-5
在线时间
23 小时
发表于 2016-11-30 11:49:45 | 显示全部楼层
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0; //这个配置的是只有高级定时器才有的寄存器,即要重复溢出多少次才会触发中断,如果不进行配置的话,寄存器的值是随机的
回复

使用道具 举报

21

主题

58

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
219
金钱
219
注册时间
2016-2-19
在线时间
46 小时
发表于 2017-1-5 11:23:43 | 显示全部楼层
实际测试发现,若普通的定时器,当设置的预分频出来的时钟上MHz级别的话,似乎要配置这个TIM_TimeBaseStructure.TIM_RepetitionCounter = 0; 才会定时准确;
低频定时时,配置这个与否,都无影响。
而且当这个值配置一次后,似乎后面去掉与否,定时器定时都恢复了正常;
回复

使用道具 举报

18

主题

96

帖子

0

精华

初级会员

Rank: 2

积分
136
金钱
136
注册时间
2016-10-26
在线时间
40 小时
发表于 2017-1-5 11:25:14 | 显示全部楼层
w7590767820 发表于 2015-7-29 21:01
我设置了TIM_TimeBaseStructure.TIM_RepetitionCounter = 0,就行了!高级定时器的重复计数功能 ...

同意  我刚刚也是这个问题    解决了已经
回复

使用道具 举报

18

主题

96

帖子

0

精华

初级会员

Rank: 2

积分
136
金钱
136
注册时间
2016-10-26
在线时间
40 小时
发表于 2017-1-5 11:50:58 | 显示全部楼层
uint8_t TIM_RepetitionCounter;           @note This parameter is valid only for TIM1 and TIM8.
                                                            @note此参数仅对TIM1和TIM8有效。*/



这个是库函数版本的库函数tinm里面注释的


但是我亲测寄存器版本的定时器1  不加这句可以正常运行   搞不懂了
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-29 04:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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