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)); 是啥意思,实现啥功能,求大神的主要内容,如果未能解决你的问题,请参考以下文章