如何使用STM32实现systick的精确延时

控制/MCU

1876人已加入

描述

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);

}

systick中断服务程序

void SysTick_Handler(void)

{

systime ++;

}

延时程序

void delay_ms(unsigned int ms)

{

unsigned int temp;

temp = systime;

while((systime - temp) 《 ms);

}

void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource)在misc.c文件中定义

static __INLINE uint32_t SysTick_Config(uint32_t ticks)在core_cm3.h中定义

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分