if(SysTick_Config(SystemCoreClock/1000)) while(1);

2019-08-14 19:01发布

if(SysTick_Config(SystemCoreClock/1000))                   
while(1);
是什么意思,while(1)不是进入死循环了吗
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
mashuntao
1楼-- · 2019-08-15 19:48
SysTick_Config(SystemCoreClock/1000),系统时钟(SystemCoreClock)是72M的,除以1000以后变成7200,怎样算也不是1ms呀,还请原子可解惑!
mashuntao
2楼-- · 2019-08-15 19:49
static __INLINE uint32_t SysTick_Config(uint32_t ticks) {    if (ticks > SysTick_LOAD_RELOAD_Msk)  return (1);            /* Reload value impossible */                                                                   SysTick->LOAD  = (ticks & SysTick_LOAD_RELOAD_Msk) - 1;      /* set reload register */   NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);  /* set Priority for Cortex-M0 System Interrupts */   SysTick->VAL   = 0;                                          /* Load the SysTick Counter Value */   SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |                     SysTick_CTRL_TICKINT_Msk   |                     SysTick_CTRL_ENABLE_Msk;                    /* Enable SysTick IRQ and SysTick Timer */   return (0);                                                  /* Function successful */ },设置成功后返回0,接着执行下面的操作,如果不成功返回非0,就等在这里不再执行!
mashuntao
3楼-- · 2019-08-16 00:34
 精彩回答 2  元偷偷看……
我是WC
4楼-- · 2019-08-16 03:30
本帖最后由 我是WC 于 2016-9-30 18:20 编辑
mashuntao 发表于 2016-9-15 22:31
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);系统时钟的8分频,systick就是9M,24位的倒数计 ...

不是啊,72000000/(1000*72000)=1ms,你要分清楚时间和频率撒。
youlikesoilove
5楼-- · 2019-08-16 07:16
本帖最后由 youlikesoilove 于 2017-8-4 16:32 编辑

这个原子哥应该解释过了:

因为SysTick_Config();函数中
执行位操作的两个变量STK_LOAD和STK_VAL都是二十四位的。所以你要调用该函数所使用的参数不能超过2的24次方、
所以为了防止出现莫名其妙的错误,传入SysTick_Cofig();函数的值应当小于2的24次方。
SysTick_Config();函数内部集成了对输入参数检查的函数,

if (ticks>SysTick_LOAD_RELOAD_Msk)
return (1);

就是说,如果你输入SysTick_Config();的参数超出2的24次方会立即返回1

if(SysTick_Config(SystemCoreClock / 1000))
while(1);

SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk;//关闭系统滴答定时器;

so、原子哥利用SysTick_Config();的返回值判断你是否配置对了,
如果配置错了,你的程序会立即进入死循环。
如果判断对了、
执行下一步。就是关闭滴答定时器。

我是初学者。如果哪点有问题。希望多多包涵。

一周热门 更多>