七、滴答定时器
1. 滴答定时器介绍
SysTick定时器可用作标准的下行计数器,是一个24位向下计数器,有自动重新装载能力,可屏蔽系统中断发生器。Cortex-M4处理器内部包含了一个简单的定时器,所有基于M4内核的控制器都带有SysTick定时器,这样就方便了程序在不同的器件之间的移植。SysTick定时器可用于操作系统,提供系统必要的时钟节拍,为操作系统的任务调度提供一个有节奏的“心跳”。正因为所有的M4内核的芯片都有Systick定时器,这在移植的时候不像普通定时器那样难以移植。
使用外部晶振(XTAL)作为PLL的输入源,并且设置了分频系数,其中PLLN为120,PLLP为4。然后设定PLL为时钟源。
2. 滴答定时器寄存器
相关定时器:
在core_cm4.h中可查看其定义,如图2-1-2所示。
关于寄存器的配置在下的SysTick_Config函数中已经写好了,如图2-1-3所示,感兴趣的可以去研究一下。
3. 滴答定时器函数
SysTick定时器的使用主要有:
- SysTick_Config()函数
- SysTick_Config()函数主要用来设置定时时间
- void CLK_SetSysClockSrc(uint8_t u8Src)函数
- CLK_SetSysClockSrc()函数用来选择SysTick时钟源
- 滴答定时器配置 在board.c中找到board_init()这个函数,如图4-1-1所示。 这个函数是为大家配置好的,直接用寄存器配置的。
4. 滴答定时器使用
我们写好了延时ms的函数,在board.c文件中,void delay_ms(uint32_t _ms),有一个参数_ms,这个就是我们要延时的时间的ms数,延时1ms就是delay_ms(1),延时1s就是delay_ms(1000)。还有延时us的函数void delay_us(uint32_t _us),也是一样的用法。 需要注意的是这个延时是阻塞延时,在延时的时间里一直在等待,比较浪费系统资源,慎用。
5. LED灯闪烁实验
前面我们学习了如何去使用滴答定时器,下面我们就用滴答定时器的延时去实现LED闪烁0.5s间隔。其实很简单就是先让LED引脚输出高电平,然后调用delay_ms(500),再让LED引脚输出低电平,再调用delay_ms(500),最后在while(1)函数里调用即可。
烧写我们的代码之后,可以看到开发板LED2将会0.5s亮0.5s灭。