OpenEdv-开源电子网

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

SysTick时钟设置SysTick_CLKSource_HCLK_Div8的意思

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
25
金钱
25
注册时间
2013-12-30
在线时间
0 小时
发表于 2013-12-30 20:49:14 | 显示全部楼层 |阅读模式
SysTick_CLKSource_HCLK_Div8的作用是SysTick时钟源为AHB时钟除以8,还是选择外部时钟?
M3权威指南中有:


我们可以再STM32库函数手册238页找到:


我都不知道相信谁了




下面是我们熟悉的一段话:
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-12-30 22:36:57 | 显示全部楼层
回复【楼主位】yykx:
---------------------------------
权威指南是针对所有CM3内核而言的。
STM32参考手册,则是针对STM32而言的。
当然应该相信STM32参考手册。
其实他们不冲突,只是ST多加了个8分频进去而已。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

23

主题

292

帖子

0

精华

高级会员

Rank: 4

积分
501
金钱
501
注册时间
2013-9-17
在线时间
17 小时
发表于 2014-3-5 19:13:09 | 显示全部楼层
spi2 往串口3 发数据0xf0  串口收到的都是 ff 这个正常么 

spi2初始化的分频为 128 另外没有再次设置

请原子哥指点 

闷鱼闷闷不乐吃焖鱼
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-3-5 22:57:10 | 显示全部楼层
回复【3楼】闷鱼:
---------------------------------
spi2 往串口3 发数据0xf0  
这是怎么发的? 
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2015-10-2
在线时间
9 小时
发表于 2016-4-18 11:13:54 | 显示全部楼层
为什么HCLK时钟是外部时钟啊?他不是AHB分频给的吗?
回复 支持 反对

使用道具 举报

6

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
179
金钱
179
注册时间
2018-9-7
在线时间
28 小时
发表于 2020-6-2 17:30:02 | 显示全部楼层
同样问题求解
回复 支持 反对

使用道具 举报

21

主题

131

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
425
金钱
425
注册时间
2019-5-12
在线时间
168 小时
发表于 2020-8-6 10:41:19 | 显示全部楼层
正点原子 发表于 2013-12-30 22:36
回复【楼主位】yykx:
---------------------------------
权威指南是针对所有CM3内核而言的。
STM32参考手 ...

//初始化延迟函数
//当使用OS的时候,此函数会初始化OS的时钟节拍
//SYSTICK的时钟固定为HCLK时钟的1/8
//SYSCLK:系统时钟
void delay_init()
{
#if SYSTEM_SUPPORT_OS                                                          //如果需要支持OS.
        u32 reload;
#endif
        SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);        //选择外部时钟  HCLK/8
        fac_us=SystemCoreClock/8000000;                                //为系统时钟的1/8  
#if SYSTEM_SUPPORT_OS                                                          //如果需要支持OS.
        reload=SystemCoreClock/8000000;                                //每秒钟的计数次数 单位为K          
        reload*=1000000/delay_ostickspersec;                //根据delay_ostickspersec设定溢出时间
                                                                                                //reload为24位寄存器,最大值:16777216,在72M下,约合1.86s左右       
        fac_ms=1000/delay_ostickspersec;                        //代表OS可以延时的最少单位          

        SysTick->CTRL|=SysTick_CTRL_TICKINT_Msk;           //开启SYSTICK中断
        SysTick->LOAD=reload;                                                 //每1/delay_ostickspersec秒中断一次       
        SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk;           //开启SYSTICK   

#else
        fac_ms=(u16)fac_us*1000;                                        //非OS下,代表每个ms需要的systick时钟数   
#endif
}                               

原子哥,这个24位递减我知道,但是约合1.86s是怎么算出来的?没整明白       
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

初级会员

Rank: 2

积分
96
金钱
96
注册时间
2019-7-18
在线时间
27 小时
发表于 2020-8-22 15:02:52 | 显示全部楼层
hejun96 发表于 2020-8-6 10:41
//初始化延迟函数
//当使用OS的时候,此函数会初始化OS的时钟节拍
//SYSTICK的时钟固定为HCLK时钟的1/8
...

由于SysTick_CLKSource_HCLK_Div8,所以SysTick时钟频率是72M/8=9M,一个周期就是1/9M.所以最长时间就是2^24X(1/9M)=1.864s
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-9 20:00

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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