赞
踩
目录
SysTick——系统定时器(System Tick)
系统定时器是属于CM3内核中的一个外设,内嵌在NVIC(NVIC也是内核中的一个外设,控制着整个芯片中断相关功能)中,这是一个24bit的向下递减的计数器计数器每计数一次的时间为 ,在所学stm32 F10x系列通常预设为72M。
系统定时器由四个寄存器组成。
寄存器名称 | 寄存器描述 |
CTRL | SysTick 控制及状态寄存器 |
LOAD | SysTick 重装载数值寄存器 |
VAL | SysTick 当前数值寄存器 |
CALIB | SysTick 校准数值寄存器 |
需要说明的是,以下翻译版本使用了 刘火良老师写的《零死角玩转stm32》
CTRL,控制及状态寄存器
LOAD,重装载数值寄存器
VAL, 当前数值寄存器
- 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);
- }

if (ticks > SysTick_LOAD_RELOAD_Msk) return (1);
由于LOAD寄存器中的reload占用24bit,所能表示的最大数值为 1<<25 - 1,可以看到“SysTick_LOAD_RELOAD_Msk”在固件库中定义为 0xFFFFFFul。
SysTick->LOAD = (ticks & SysTick_LOAD_RELOAD_Msk) - 1;
将得到的tick值写进LOAD寄存器
NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);
设置定时器的优先级为15,可以看到在core_cm3.h中将“__NVIC_PRIO_BITS” 定义为4。
SysTick->VAL = 0;
VAL寄存器重置
- SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk |
- SysTick_CTRL_TICKINT_Msk |
- SysTick_CTRL_ENABLE_Msk;
“SysTick_CTRL_CLKSOURCE_Msk” 在固件库宏定义为1<<2,可以在上面的寄存器介绍中知道这里的作用是选择的是AHB预分频器1分频;
“SysTick_CTRL_TICKINT_Msk” 在固件库宏定义为1<<1, SysTick 倒数计数到 0 时产生 SysTick 异常请求;
“SysTick_CTRL_ENABLE_Msk” 在固件库宏定义为1<<0, 打开定时器。
分别编写毫秒、微秒级别的定时单位的函数,实现LED灯以1s的频率闪烁
1、编写SysTick板级支持包,在其中实现控制毫秒、微秒级别的延时函数。
2、将原有利用 软件延时 实现LED灯闪烁的代码,更换成本次编写的硬件级别的延时函数。
- 微秒级延时
- void SysTick_Delay_us ( uint32_t us )
- {
- SysTick_Config(72);
-
- int i;
- for ( i = 0; i < us; i++ ) {
- while( !( (SysTick->CTRL) & ( 1<<16 ) ) ) ;
- }
-
- SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
- }
- 毫秒级延时
- void SysTick_Delay_ms ( uint32_t ms )
- {
- SysTick_Config(72000);
-
- int i;
- for ( i = 0; i < ms; i++ ) {
- while( !( (SysTick->CTRL) & ( 1<<16 ) ) ) ;
- }
-
- SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
- }
可以看到微秒和毫秒级别的延时函数,代码上只是reload值(tick值)设置的不一样
之后就在主函数中替换到软件延时。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。