关于SysTick和几个时钟的疑问(已解决)
各位大神好:由于我是硬件爱好者,完全靠自学,身边没有可以咨询的人,特来发贴请求解答疑问。
其实就是关于SysTick的疑问:
第一,先看我的RCC的Config设置, 用图来说明:
就是就是用外部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分频? 希望大家能帮我解惑。 感谢感谢。 不知道我把我的问题说明白了没有?
有现成的库直接用起来
你在main循环里写个LED闪烁,加个延时函数
然后修改这个延时函数的参数值就可以了
非要把底层东西搞透的话你就无法迈出第一步了 奏奏奏 发表于 2019-8-23 17:49
有现成的库直接用起来
你在main循环里写个LED闪烁,加个延时函数
然后修改这个延时函数的参数值就可以了
这和底层没有关系吧? 只是把概念搞清楚。 只是要搞清楚到底应该是依据那个值而已? 楼主,首先要看时钟树,systick用主频时钟,从图上看用72Mhz,外部时钟指的时晶振。如果要明白具体systick的频率算法,这个要在用户手册中查找使用方法。 你的外部时钟源为8M,PLL9倍频,外部时钟就是72M,AHB 时钟 8 分频作为SysTick时钟源 这个涉及很多基础概念,要对着手册一点一点地看和理解。 之所以楼主有这样的误解,是因为SysTick它跟一般计时器不一样, 它不是ST加上去的外设, 它是ARM核内的计时器, 所以它说的外部时钟是指核外的时钟, 就是指CPU的系统时钟。 感谢各位的答疑。 已经完全明白了。 其实是我的粗心。 在时钟树里有。 只是我没有看到。太粗心了。
页:
[1]