你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

关于SysTick和几个时钟的疑问(已解决)

[复制链接]
gookio 提问时间:2019-8-23 17:36 /
各位大神好:
     由于我是硬件爱好者,完全靠自学,身边没有可以咨询的人,特来发贴请求解答疑问。

     其实就是关于SysTick的疑问:

    第一,先看我的RCC的Config设置, 用图来说明:

    rcc.jpg
     就是就是用外部HSE. 用的是8MHz, 通过PLL的9倍频,让SYSCLK和HCLK达到了72MHz.

    第二,我来看大部分例程的 dalay_init的代码。(一般调用都是delay_init(72)

     void delay_init(u8 SYSCLK)
    {
        SysTick->CTRL&=0xfffffffb;      
        fac_us=SYSCLK/8;                    
        fac_ms=(u16)fac_us*1000;
     }

    关于这一句:  SysTick->CTRL&=0xfffffffb;    这里就是设置使用外部时钟。 按照我的理解 SysTick使用外部时钟 应该是8MHz(HSE)啊。
    但在库里也有这样定义:
    #define SysTick_CLKSource_HCLK_Div8    ((uint32_t)0xFFFFFFFB)//将控制状态寄存器的第二位置0,即用外部时钟源

    #define SysTick_CLKSource_HCLK         ((uint32_t)0x00000004)//将控制状态寄存器的第二位置1,即用内核时钟

    我也查了网上的,大部分也是 72MHz/8. 为9MHz.

     这里一直没有搞明白,外部时钟源到底是指的什么? 还是说不用管外部时钟为多少MHz, 都是HCLK的8分频?

     希望大家能帮我解惑。 感谢感谢。

     不知道我把我的问题说明白了没有?


收藏 评论7 发布时间:2019-8-23 17:36

举报

7个回答
奏奏奏 回答时间:2019-8-23 17:49:31
有现成的库直接用起来
你在main循环里写个LED闪烁,加个延时函数
然后修改这个延时函数的参数值就可以了

非要把底层东西搞透的话你就无法迈出第一步了
gookio 回答时间:2019-8-23 17:57:22
奏奏奏 发表于 2019-8-23 17:49
有现成的库直接用起来
你在main循环里写个LED闪烁,加个延时函数
然后修改这个延时函数的参数值就可以了

这和底层没有关系吧? 只是把概念搞清楚。 只是要搞清楚到底应该是依据那个值而已?
回答时间:2019-8-24 09:18:15
楼主,首先要看时钟树,systick用主频时钟,从图上看用72Mhz,外部时钟指的时晶振。如果要明白具体systick的频率算法,这个要在用户手册中查找使用方法。

评分

参与人数 1ST金币 +1 收起 理由
gookio + 1

查看全部评分

现在已经过去 回答时间:2019-8-24 17:03:52
你的外部时钟源为8M,PLL9倍频,外部时钟就是72M,AHB 时钟 8 分频作为SysTick时钟源

评分

参与人数 1ST金币 +1 收起 理由
gookio + 1

查看全部评分

五哥1 回答时间:2019-8-25 02:07:44
这个涉及很多基础概念,要对着手册一点一点地看和理解。
edmundlee 回答时间:2019-8-25 07:25:50
之所以楼主有这样的误解,是因为SysTick它跟一般计时器不一样, 它不是ST加上去的外设, 它是ARM核内的计时器, 所以它说的外部时钟是指核外的时钟, 就是指CPU的系统时钟。

评分

参与人数 1ST金币 +1 收起 理由
gookio + 1

查看全部评分

gookio 回答时间:2019-8-28 10:52:03
感谢各位的答疑。 已经完全明白了。 其实是我的粗心。 在时钟树里有。 只是我没有看到。太粗心了。

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版