KE06的参考手册对systick的说明很少。
通过对STM32的systick进行参考,我配置了如下的代码,延时ms:
uint32_t temp;
SysTick->CTRL |= SysTick_CTRL_CLKSOURCE_Msk;
SysTick->LOAD = nms * 5000-1;
SysTick->VAL = 0x00;
SysTick->CTRL = SysTick_CTRL_ENABLE_Msk;
do
{
temp = SysTick->CTRL;
}
while((temp & SysTick_CTRL_ENABLE_Msk) && !(temp & SysTick_CTRL_COUNTFLAG_Msk));
但是我一直没搞懂这个“SysTick->LOAD = nms * 5000-1”中5000的含义。在参考手册中我看到如图的内容。是不是systick的时钟源是50MHz?但是2图中又说CLKSOURCE=1时是内核时钟,不应该是48MHz吗?
后面我本来想照搬STM32的systick中断配置:
void SysTick_Init(void)
{
if (SysTick_Config(50000000 / 1000000)) // ST3.5.0库版本
{
/* Capture error */
while (1);
}
NVIC_EnableIRQ(SysTick_IRQn);
NVIC_SetPriority(SysTick_IRQn, 0);
SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk;
}
void Delay_us(__IO uint32_t nTime)
{
TimingDelay = nTime;
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
while(TimingDelay != 0);
}
void TimingDelay_Decrement(void)
{
if (TimingDelay != 0x00)
{
TimingDelay--;
}
}
void SysTick_Isr(void)
{
TimingDelay_Decrement();
}
但是进不了中断函数。很头疼。
最佳答案
本帖最后由 stm1024 于 2018-11-26 14:58 编辑
这个你需要看ARM M0/M3权威指南,注意这个Systick是可以选择两个不同的时钟源,一个是系统频率,另一个是外设厂商设计的频率。例如对于STM32F103,可以是9Mhz,也可 ...
|