打印

我刚学stm32,有些问题

[复制链接]
3309|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Along001|  楼主 | 2013-12-20 10:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用的是Alientek的开发板,系统代码里面dela.c文件里面有些不懂,如fac_us=SYSCLK/8到底是什么意思
    (1)fac_us是指的什么,如果是指的时钟,那为什么fac_ms=(u16)fac_us*1000而不是fac_ms=(u16)fac_us/1000
    (2)fac_us如果指的是1us,那为什么nus的最大值得计算式是2^24/fac_us,而不2^24*fac_us
nms的最大值计算式为0xffffff*8*1000/SYSCLK(好像这里又把fac_us当成时钟了,这里为什么不用fac_ms的表达式带入)



我新手,求大神指点指点

相关帖子

沙发
Along001|  楼主 | 2013-12-20 10:27 | 只看该作者
上面的c文件应该是delay.c

使用特权

评论回复
板凳
神的礼物| | 2013-12-20 20:29 | 只看该作者
在不完全手册里有详细的解释

使用特权

评论回复
地板
rocdove| | 2013-12-20 23:33 | 只看该作者
手册死哥好东西

使用特权

评论回复
5
Along001|  楼主 | 2013-12-21 10:18 | 只看该作者
神的礼物 发表于 2013-12-20 20:29
在不完全手册里有详细的解释

我就是看的不完全手册,所以有点不明白,你能跟我解释解释吗

使用特权

评论回复
6
神的礼物| | 2013-12-21 12:06 | 只看该作者
SysTick 的时钟源自 HCLK 的 8 分频,假设我们外部
晶振为 8M,然后倍频到 72M,那么 SysTick 的时钟即为 9Mhz,也就是 SysTick 的计数器
VAL 每减 1,就代表时间过了 1/9us。所以 fac_us=SystemCoreClock/8000000;这句话就是计
算在 SystemCoreClock 时钟频率下延时 1us 需要多少个 SysTick 时钟周期。同理,
fac_ms=(u16)fac_us*1000;就是计算延时 1ms 需要多少个 SysTick 时钟周期,它自然是 1us
的 1000 倍。初始化将计算出 fac_us 和 fac_ms 的值。

使用特权

评论回复
7
神的礼物| | 2013-12-21 12:10 | 只看该作者
还不明白的话,就看库开发指南比手册要详细

使用特权

评论回复
8
luofeng2g| | 2013-12-21 12:53 | 只看该作者
看楼上,fac_us其实就是9个SysTick 的时钟周期(SysTick 的时钟即为 9Mhz),即每记1us的时间SysTick需要产生9个脉冲,可以理解单位为 个/us  ,那么nms=1000*(2^24/fac_us),也即是0xffffff*8*1000/SYSCLK
个人理解,希望对你有用

使用特权

评论回复
9
zezy371| | 2013-12-29 15:08 | 只看该作者
凑热闹来着

使用特权

评论回复
10
hopeasy| | 2017-1-25 18:14 | 只看该作者
不明白

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

23

帖子

0

粉丝