[技术问答] 关于SystemCoreClockUpdate的理解

[复制链接]
11331|5
 楼主| cbx_xx 发表于 2014-5-12 16:17 | 显示全部楼层 |阅读模式
void SystemCoreClockUpdate (void)            
{
    uint32_t u32CoreFreq, u32ClkSrc;

    u32ClkSrc = CLK->CLKSEL0 & CLK_CLKSEL0_HCLK_S_Msk;

    if (u32ClkSrc == 0)
        u32CoreFreq = __XTAL;       /* External crystal clock */
    else if (u32ClkSrc == 3)
        u32CoreFreq = __IRC10K;            /* Interanl 10K crystyl clock */
    else if (u32ClkSrc ==  7)
        u32CoreFreq = __IRC22M;            /* Internal 22M */
    else
        u32CoreFreq = __IRC22M;            /* unknown value, use default Internal 22M */

    SystemCoreClock = (u32CoreFreq/((CLK->CLKDIV & CLK_CLKDIV_HCLK_N_Msk) + 1));
    CyclesPerUs = (SystemCoreClock + 500000) / 1000000;  
}


蓝色这句如何理解?  一般用来干什么用的? 谢谢


niuyaliang 发表于 2014-5-12 16:58 | 显示全部楼层
extern uint32_t CyclesPerUs;                       /* Cycles per micro second */
 楼主| cbx_xx 发表于 2014-5-12 17:12 | 显示全部楼层
为什么(SystemCoreClock + 500000) / 1000000;   那里为什么加500000
aozima 发表于 2014-5-12 18:32 | 显示全部楼层
不用浮点时常用的3种方法
四舍五入   a = (b+5)/10
全舍弃 a = b / 10
全进位 a = (b+9) / 10

评分

参与人数 2威望 +3 收起 理由
遗失的枫叶 + 1 赞一个!
木叶小镇 + 2

查看全部评分

 楼主| cbx_xx 发表于 2014-5-13 10:03 | 显示全部楼层
谢谢.一点就明
木叶小镇 发表于 2014-7-20 21:28 | 显示全部楼层
aozima 发表于 2014-5-12 18:32
不用浮点时常用的3种方法
四舍五入   a = (b+5)/10
全舍弃 a = b / 10

学习了,刚看到这一点,终于明白了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

41

帖子

0

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