我刚学stm32,有些问题

[复制链接]
3890|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 | 显示全部楼层
手册死哥好东西
 楼主| Along001 发表于 2013-12-21 10:18 | 显示全部楼层
神的礼物 发表于 2013-12-20 20:29
在不完全手册里有详细的解释

我就是看的不完全手册,所以有点不明白,你能跟我解释解释吗
神的礼物 发表于 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 的值。
神的礼物 发表于 2013-12-21 12:10 | 显示全部楼层
还不明白的话,就看库开发指南比手册要详细
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
个人理解,希望对你有用
zezy371 发表于 2013-12-29 15:08 | 显示全部楼层
凑热闹来着
hopeasy 发表于 2017-1-25 18:14 | 显示全部楼层
不明白
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

23

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部