STM32中 Systick问题 while(SysTick_Config(SystemFrequency / 1000)); 是啥意思,实现啥功能,求大神

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32中 Systick问题 while(SysTick_Config(SystemFrequency / 1000)); 是啥意思,实现啥功能,求大神相关的知识,希望对你有一定的参考价值。

SysTick_Config()貌似没有返回值啊?

static __INLINE uint32_t SysTick_Config(uint32_t ticks)

if (ticks > SYSTICK_MAXCOUNT) return (1); /* Reload value impossible */

SysTick->LOAD = (ticks & SYSTICK_MAXCOUNT) - 1; /* set reload register */
NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Cortex-M0 System Interrupts */
SysTick->VAL = (0x00); /* Load the SysTick Counter Value */
SysTick->CTRL = (1 << SYSTICK_CLKSOURCE) | (1<<SYSTICK_ENABLE) | (1<<SYSTICK_TICKINT); /* Enable SysTick IRQ and SysTick Timer */
return (0); /* Function successful */

这是这个函数的定义,在core_cm3.h里面,是有返回值的,如果你设置的SystemFrequency / 1000不符合该函数要求就会返回1,这样这个while循环是跳不出的,一直在循环,只有你设置的值符合要求,程序才能跳出循环继续执行,这句话一般在SysTick_Config(SystemCoreClock / 1000);这句之后,上面这句已经配置好Systick的定时时间为1ms,紧接着 while(SysTick_Config(SystemFrequency / 1000)); 是判断你配置的定时频率是否可以实现,如果可以就继续往下执行,如果不可以就一直停在这里。(大哥,悬赏分都不给,我已经说得很详细了)
参考技术A xydsy ,说得太好了,我最近也在做这方面!

stm32 如何产生秒脉冲中断

void SysTick_Handler(void)

if(Timer1)
Timer1--;


if (SysTick_Config(SystemFrequency / 1000))

/* Capture error */
while (1);

volatile u16 Timer1;
void SysTickDelay(u16 dly_ms)

Timer1=dly_ms;
while(Timer1);

这是systick产生毫秒级的中断,非常准
参考技术A RTC秒中断或者定时器中断 参考技术B 用定时器计时就行啦

以上是关于STM32中 Systick问题 while(SysTick_Config(SystemFrequency / 1000)); 是啥意思,实现啥功能,求大神的主要内容,如果未能解决你的问题,请参考以下文章

STM32 滴答定时器

stm32 如何产生秒脉冲中断

STM32F4SysTick记录

在stm32中利用systick来延时,这阻塞了CPU吗? 执行到延时程序的时候,CPU就一直停在那里等待时间到达么?

STM32--SYSTICK定时器

STM32 SysTick 计数速度是应有的两倍