本文介绍如何使用STM32 SysTick系统定时器实现延时功能。
本文适合对单片机及C语言有一定基础的开发人员阅读,MCU使用STM32F103VE系列。
1.1. 介绍
SysTick—系统定时器是CM3内核中的一个24bit 的向下递减的计数器,计数器每计数一次的时间为 1/SYSCLK,当计数器值递减到0的时候,将自动重装载计数初值,开始新一轮计数系统,可以用SysTick实现简单的延时函数。
1.2. 说明
SysTick_Config()函数设置计数器重装载值,将当前值设置为0,并使能定时器。
1.3. 操作
直接调用delay_us()和delay_ms()函数即可。
1 voiddelay_us(__IO uint32_t us)2 {3 uint32_t i;4
5 //将一次计数器时间设置为1us
6 SysTick_Config(SystemCoreClock / 1000000);7
8 for(i = 0; i < us; i++)9 {10 //当计数器的值减小到0的时候,CTRL寄存器COUNTFLAG会置1
11 while( !((SysTick->CTRL) &SysTick_CTRL_COUNTFLAG_Msk) );12 }13 //CTRL寄存器ENABLE寄存器置零,关闭SysTick定时器
14 SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;15
16 }17
18 voiddelay_ms(__IO uint32_t ms)19 {20 uint32_t i;21
22 //将一次计数器时间设置为