OpenEdv-开源电子网

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

系统时钟和滴答定时器问题,求帮忙

[复制链接]

2

主题

12

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2017-3-14
在线时间
9 小时
发表于 2017-3-14 14:41:15 | 显示全部楼层 |阅读模式
1金钱
QQ截图20170314143850.png

原子哥,这里明明已经定义了LOAD的值,也就是定义了SysTick的时钟是72MHz/8,那为什么用RCC自定义系统时钟,还是能改变延时呢?
始终想不通,求解答!谢谢!

最佳答案

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

SYSTICK的时钟是主频的1/8,你如果是72M才是9000,如果是其他频率,对应的修改。所以你改RCC,只要改变了主频,那就会引起这里变化。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-3-14 14:41:16 | 显示全部楼层
SYSTICK的时钟是主频的1/8,你如果是72M才是9000,如果是其他频率,对应的修改。所以你改RCC,只要改变了主频,那就会引起这里变化。
回复

使用道具 举报

2

主题

12

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2017-3-14
在线时间
9 小时
 楼主| 发表于 2017-3-14 15:34:19 | 显示全部楼层
没人吗
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2017-3-14 17:04:13 | 显示全部楼层
额,你定义的滴答定时器时钟是系统时钟的1/8!不是72M的1/8!!!你用RCC改变了系统时钟那么滴答定时器的时钟肯定就变了
回复

使用道具 举报

2

主题

12

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2017-3-14
在线时间
9 小时
 楼主| 发表于 2017-3-14 17:46:03 | 显示全部楼层
zuozhongkai 发表于 2017-3-14 17:04
额,你定义的滴答定时器时钟是系统时钟的1/8!不是72M的1/8!!!你用RCC改变了系统时钟那么滴答定时器的时 ...

我不是直接设置的9000吗 不是SYSTLK啊
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2017-3-14 17:51:32 | 显示全部楼层
gmnail 发表于 2017-3-14 17:46
我不是直接设置的9000吗 不是SYSTLK啊

看清楚了,你设置的是加载值!滴答定时器的时钟会随着你系统时钟的变化而变化的。谁说的LOAD就是滴答定时器的时钟值!
开往春天的手扶拖拉机
回复

使用道具 举报

2

主题

12

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2017-3-14
在线时间
9 小时
 楼主| 发表于 2017-3-14 18:01:53 | 显示全部楼层
zuozhongkai 发表于 2017-3-14 17:51
看清楚了,你设置的是加载值!滴答定时器的时钟会随着你系统时钟的变化而变化的。谁说的LOAD就是滴答定时 ...

不是吗。。。
我再去看看 可能理解错了
谢谢!
回复

使用道具 举报

2

主题

12

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2017-3-14
在线时间
9 小时
 楼主| 发表于 2017-3-15 08:52:41 | 显示全部楼层
zuozhongkai 发表于 2017-3-14 17:51
看清楚了,你设置的是加载值!滴答定时器的时钟会随着你系统时钟的变化而变化的。谁说的LOAD就是滴答定时 ...

gm.jpg
按这里说的,LOAD值里装的就是时钟的八分频‘和一个定义数的乘积啊。。
我晕了
回复

使用道具 举报

5

主题

277

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1522
金钱
1522
注册时间
2014-5-16
在线时间
217 小时
发表于 2017-3-15 09:48:04 | 显示全部楼层
可以试试用FCLK时钟源
SysTick->LOAD = ((uint32_t)(((double)HCLK * (double)(TICK) ) / 1000000) - 1);
SysTick->CTRL = 7;
其中HCLK可以通过RCC接口函数获取,TICK为要定时的时间,单位微秒.
回复

使用道具 举报

2

主题

12

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2017-3-14
在线时间
9 小时
 楼主| 发表于 2017-3-15 11:02:37 | 显示全部楼层
zmingwang 发表于 2017-3-15 09:48
可以试试用FCLK时钟源
SysTick->LOAD = ((uint32_t)(((double)HCLK * (double)(TICK) ) / 1000000) - 1);
...

SYSTICK的时钟源只能是HCLK或者它的八分频啊
回复

使用道具 举报

5

主题

277

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1522
金钱
1522
注册时间
2014-5-16
在线时间
217 小时
发表于 2017-3-15 14:32:17 | 显示全部楼层
gmnail 发表于 2017-3-15 11:02
SYSTICK的时钟源只能是HCLK或者它的八分频啊

首先你试试我给你的配置,原理请参考<CortexM3权威指南>
回复

使用道具 举报

2

主题

12

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2017-3-14
在线时间
9 小时
 楼主| 发表于 2017-3-16 11:25:58 | 显示全部楼层
正点原子 发表于 2017-3-14 14:41
SYSTICK的时钟是主频的1/8,你如果是72M才是9000,如果是其他频率,对应的修改。所以你改RCC,只要改变了主 ...

那我这个9000设置的是不是不稳妥,该改成SYSCLK/8?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-19 07:53

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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