STM32使用systick實現精確延時
阿新 • • 發佈:2019-01-04
SYSTICK暫存器初始化
void SysTick_Configuration(void)
{
if (SysTick_Config(SystemCoreClock / 100))
{
while (1);
}
NVIC_SetPriority(SysTick_IRQn, 0x0);
}
SysTick_Config預設時鐘為SysTick_CLKSource_HCLK,所以在這之前使用SysTick_CLKSourceConfig()選擇系統時鐘不會改變systick的時鐘
static __INLINE uint32_t SysTick_Config(uint32_t ticks)
{
if (ticks > SysTick_LOAD_RELOAD_Msk) return (1);
SysTick->LOAD = (ticks & SysTick_LOAD_RELOAD_Msk) - 1;
NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);
SysTick->VAL = 0;
SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk |
SysTick_CTRL_TICKINT_Msk |
SysTick_CTRL_ENABLE_Msk;
return (0);
void SysTick_Configuration(void)
{
if (SysTick_Config(SystemCoreClock / 100))
{
while (1);
}
NVIC_SetPriority(SysTick_IRQn, 0x0);
}
SysTick_Config預設時鐘為SysTick_CLKSource_HCLK,所以在這之前使用SysTick_CLKSourceConfig()選擇系統時鐘不會改變systick的時鐘
static __INLINE uint32_t SysTick_Config(uint32_t ticks)
{
if (ticks > SysTick_LOAD_RELOAD_Msk) return (1);
SysTick->LOAD = (ticks & SysTick_LOAD_RELOAD_Msk) - 1;
NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);
SysTick->VAL = 0;
SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk |
SysTick_CTRL_TICKINT_Msk |
SysTick_CTRL_ENABLE_Msk;
return (0);