OpenEdv-开源电子网

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

求助各位坛友,关于定时器定时的问题!!!

[复制链接]

24

主题

72

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2018-3-13
在线时间
45 小时
发表于 2018-8-22 08:55:58 | 显示全部楼层 |阅读模式
10金钱
新手村村民求助各位坛友,我想问一下,定时器的定时时间,下面的代码为什么是将定时器4定时1S。用的是8M的晶振,芯片是STM32l4RGT,我想的是用8M除以Prescaler再乘以Period应该是等于10 000 000Hz应该就是10MHz不应该是10S秒吗?
void tim4_init(void)
{
__HAL_RCC_TIM4_CLK_ENABLE();
Tim4Handle.Instance=TIM4;                          
Tim4Handle.Init.Prescaler=(uint32_t) (8000 - 1);                  
Tim4Handle.Init.CounterMode=TIM_COUNTERMODE_UP;   
Tim4Handle.Init.Period=10000-1;                        
Tim4Handle.Init.ClockDivision = 0;
HAL_TIM_Base_Init(&Tim4Handle);   
HAL_TIM_Base_Start_IT(&Tim4Handle);
HAL_NVIC_SetPriority(TIM4_IRQn,9,0);   
HAL_NVIC_EnableIRQ(TIM4_IRQn);
}

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

使用道具 举报

7

主题

188

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
385
金钱
385
注册时间
2018-7-19
在线时间
126 小时
发表于 2018-8-22 10:01:34 | 显示全部楼层
理论是正确的,如果有问题考虑定时器4最终时钟频率是不是8M
回复

使用道具 举报

24

主题

72

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2018-3-13
在线时间
45 小时
 楼主| 发表于 2018-8-22 10:12:55 | 显示全部楼层
坐看风 发表于 2018-8-22 10:01
理论是正确的,如果有问题考虑定时器4最终时钟频率是不是8M

看原理图是8M,但是如果是1S,那原理图的应该是80M,80M和8M差太多了吧
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2018-8-22 10:19:51 | 显示全部楼层
不能看晶振的频率, 因为stm32内部有PLL, 可以倍频的
回复

使用道具 举报

5

主题

11

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2018-8-15
在线时间
5 小时
发表于 2018-8-22 10:21:04 | 显示全部楼层
10MHz是10S没看懂(按照你的意思,10mS?),晶振频率不等于时钟频率吧?
回复

使用道具 举报

57

主题

1680

帖子

3

精华

资深版主

Rank: 8Rank: 8

积分
4306
金钱
4306
注册时间
2018-6-30
在线时间
808 小时
发表于 2018-8-22 10:21:13 | 显示全部楼层
理论计算出来是10s,看看设置时钟分割:TDTS = Tck_tim之类的
业精于勤荒于嬉;行成于思毁于随!
回复

使用道具 举报

7

主题

188

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
385
金钱
385
注册时间
2018-7-19
在线时间
126 小时
发表于 2018-8-22 10:31:24 | 显示全部楼层
易方亮 发表于 2018-8-22 10:12
看原理图是8M,但是如果是1S,那原理图的应该是80M,80M和8M差太多了吧

定时器频率不仅仅是硬件决定,软件中有倍频,需要设置的
回复

使用道具 举报

24

主题

72

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2018-3-13
在线时间
45 小时
 楼主| 发表于 2018-8-22 11:05:08 | 显示全部楼层
顶顶,求助
回复

使用道具 举报

1

主题

882

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3071
金钱
3071
注册时间
2018-2-7
在线时间
285 小时
发表于 2018-8-22 11:24:37 | 显示全部楼层
外部晶振还要经过倍频和分频才会得到定时器的时钟频率

时钟配置

时钟配置
回复

使用道具 举报

24

主题

72

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2018-3-13
在线时间
45 小时
 楼主| 发表于 2018-8-22 12:03:20 | 显示全部楼层
坐看风 发表于 2018-8-22 10:31
定时器频率不仅仅是硬件决定,软件中有倍频,需要设置的

麻烦再回答我以下这个问题:
        uwPrescalerValue = (uint32_t) ((SystemCoreClock / 1000000) - 1);//1mhz 1us
这句代码也是其中一个定时器的,它的注释写着1us是为什么的?
其中SystemCoreClock的值是80 000 000 ,也就是预分频Prescaler是80 ,为什么预分频80,就是1us,晶振和上面一样的定时器是一样的
回复

使用道具 举报

24

主题

72

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2018-3-13
在线时间
45 小时
 楼主| 发表于 2018-8-22 14:10:13 | 显示全部楼层
HXYDJ 发表于 2018-8-22 11:24
外部晶振还要经过倍频和分频才会得到定时器的时钟频率

麻烦再回答下我这个问题,谢谢   :   
uwPrescalerValue = (uint32_t) ((SystemCoreClock / 1000000) - 1);//1mhz 1us
这句代码也是其中一个定时器的,它的注释写着1us是为什么的?
其中SystemCoreClock的值是80 000 000 ,也就是预分频Prescaler是80 ,为什么预分频80,就是1us,晶振和上面一样的定时器是一样的
回复

使用道具 举报

7

主题

188

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
385
金钱
385
注册时间
2018-7-19
在线时间
126 小时
发表于 2018-8-22 14:19:59 | 显示全部楼层
易方亮 发表于 2018-8-22 12:03
麻烦再回答我以下这个问题:
        uwPrescalerValue = (uint32_t) ((SystemCoreClock / 1000000) - 1);//1mh ...

不是很懂楼主的意思
首先SystemCoreClock的值如果是8MHZ,那应该是8 000 000
其次在定时器时间计算中  t=(预分频+1)/clk*(重载值+1)
你这里用滴答定时器来举例和正常定时器配置是有区别的,楼主先去看看滴答定时器配置吧
回复

使用道具 举报

1

主题

882

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3071
金钱
3071
注册时间
2018-2-7
在线时间
285 小时
发表于 2018-8-22 14:59:12 | 显示全部楼层
易方亮 发表于 2018-8-22 14:10
麻烦再回答下我这个问题,谢谢   :   
uwPrescalerValue = (uint32_t) ((SystemCoreClock / 1000000) ...

原子的视频里面关于时钟这块讲的很详细,看看视频去吧。
回复

使用道具 举报

39

主题

535

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1065
金钱
1065
注册时间
2018-3-27
在线时间
378 小时
发表于 2018-8-22 16:35:00 | 显示全部楼层
HXYDJ 发表于 2018-8-22 14:59
原子的视频里面关于时钟这块讲的很详细,看看视频去吧。

我就觉得他头像很熟悉呢
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-7 14:55

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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