STM32学习笔记——使用SysTick定时器做延时
1.SysTick寄存器:
寄存器 | 说明 | 地址 |
CTRL | SysTick控制和状态寄存器 | 0xE000E010 |
LOAD | Systick重装值寄存器 | 0xE000E014 |
VAL | Systick当前值寄存器 | 0xE000E018 |
CALIB | SysTick校准值寄存器 | 0xE000E01C |
l
CLKSOURCE位:CM3允许为SysTick提供两个时钟源以供选择。第一个是内核的“自由运行时钟”FCLK。“自由”表现在它不来自系统时钟HCLK,因此在系统时钟停止时FCLK也继续运行。第二个是一个外部的参考时钟。但是使用外部时钟时,因为它在内部是通过FCLK来采样的,因此其周期必须至少是FCLK的两倍(采样定理)。很多情况下芯片厂商都会忽略此外部参考时钟,因此通常不可用。
COUNTFLAG位:当SysTick定时器从1计到0时,它将把COUNTFLAG位置位;而下述方法可以清零之:
读取SysTick控制及状态寄存器(STCSR);
往SysTick当前值寄存器(STCVR)中写任何数据。
l
l
l
各寄存器示意图:
2.SysTick函数
3.0版以后的STM32固件库在标准外设库中移除了SysTick的驱动,因此用户必须调用CMSIS定义的函数。
CMSIS只提供了一个SysTick设置的函数,替代了STM32原有SysTick驱动的全部函数。
[cpp]view plaincopy
- SysTick_Config(uint32_tticks);
该函数设置了自动重载入计数器(LOAD)的值,SysTick IRQ的优先级,复位了计数器(VAL)的值,开始计数并打开SysTick IRQ中断。SysTick时钟默认使用系统时钟。
此外,还可以使用SysTick_CLKSourceConfig函数来改变时钟源,使用NVIC_SetPriority设置中断优先级(往后再深入)。
SysTick_CLKSourceConfig函数
函数名 | SysTick_CLKSourceConfig |
函数原型 | SysTick_CLKSourceConfig(u32 SysTick_CLKSource) |
行为描述 | 配置SysTick的时钟源 |
输入参数 | SysTick_CLKSource:SysTick的时钟源 |
输出参数 | 无 |
返回值 | 无 |
前提条件 | 无 |
调用函数 | 无 |
SysTick_CLKSource允许值
SysTick_CLKSource | 描述 |
SysTick_CLKSource_HCLK_Div8 | SysTick时钟源为AHB时钟的1/8 |
SysTick_CLKSource_HCLK | SysTick时钟源为AHB时钟 |
例:
选择1/8的AHB时钟作为SysTick时钟源
[cpp]view plaincopy
- SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
3.例程
3.1程序代码
本例程代码在点亮LED灯例程代码上做修改,使用SysTick定时延时,除延时外其他代码不变,与SysTick相关语句给予注释。
[cpp]view plaincopy
- #include"stm32f10x.h"
- voidDelay(u32nTime);//声明延迟函数
- voidGPIO_Configuration(void);
- intmain(void)
- {
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
- GPIO_Configuration();
- while(SysTick_Config(SystemCoreClock/1000)!=0);//配置SysTick,装入初始值,装载值根据时钟源频率而定,72MHz时钟源则产生1ms中断需要装载值为(72000000/1000)
- while(1)
- {
- GPIO_ResetBits(GPIOC,GPIO_Pin_7|GPIO_Pin_9);
- GPIO_SetBits(GPIOC,GPIO_Pin_6|GPIO_Pin_8);
- Delay(1000);
- GPIO_ResetBits(GPIOC,GPIO_Pin_6|GPIO_Pin_8);
STM32SysTick定时 相关文章:
- STM32--SYSTICK超简易定时器(12-03)
- STM32学习之路(四)——Sys Tick定时器(12-02)
- stm32 系统嘀嗒(SysTick) 定时器 (2)-解决时钟分频问题(11-17)
- stm32 学习笔记 systick定时器(11-13)
- stm32 系统嘀嗒(SysTick) 定时器(11-13)
- Windows CE 进程、线程和内存管理(11-09)