SysTick定时器被捆绑在NVIC中,是一个简单的定时器,对于CM3、CM4内核芯片,都有Systick定时器。Systick定时器常用来做延时,或者实时系统的心跳时钟。这样可以节省MCU资源,不用浪费一个定时器。
Systick定时器就是系统滴答定时器,一个24 位的倒计数定时器,计到0 时,将从RELOAD 寄存器中自动重装载定时初值。
系统滴答定时器有4个寄存器
时钟源
该定时器的时钟源可以是
内部时钟(FCLK,CM3上的自由运行时钟)
外部时钟( CM3处理器上的STCLK信号)
通过SysTick控制及状态寄存器的第2位来确定
STM32的时钟树
RCC通过AHB时钟(HCLK)8分频或者不分频作为Cortex系统定时器(SysTick)的外部时钟。CLKSOURCE = 0
FCLK是Cortex™-M3的自由运行时钟。详情见ARM的Cortex™-M3技术参考手册。CLKSOURCE = 1
SysTick控制及状态寄存器
SysTick重装载数值寄存器
24位的倒计数器
SysTick当前数值寄存器
SysTick校准数值寄存器
系统滴答定时器中断优先级设置
通过系统异常优先级寄存器来设置系统滴答定时器的优先级
在设置优先级之前得确定优先级分组,几位是抢占式优先级,几位是子优先级。
系统异常优先级寄存器在C文件中的代码
core_cm3.h
直接操作寄存器配置系统滴答定时器demo
采用STM32F103C8T6单片机,KeilMDK5.32版本
时钟配置如下图
选用外部时钟源(STCLK)即Cortex System timer 频率为9MHz作为系统滴答定时器的时钟源
系统滴答定时器定时时间为1ms,也就是1KHz,根据时钟源频率 9MHz/1KHz = 9000;
即系统滴答定时器重载值为9000-1=8999。
SysTick->LOAD = 8999; /* 设置重载值 */
NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* 设置中断优先级 15(最低优先级) */
SysTick->VAL = 0UL; /* 当前计数值 */
SysTick->CTRL |= 0 << 2; /* 选择外部时钟源 */
SCB->SHP[11] = 0xF0; /* 设置抢占式优先级为15 */
SysTick->CTRL |= 1 << 1; /* SysTick倒数计数到0时产生SysTick异常(中断)请求 */
SysTick->CTRL |= 1 << 0; /* 使能SysTick */
HAL库配置系统滴答定时器demo
采用STM32F103C8T6单片机,KeilMDK5.32版本
HAL库默认采用FCLK作为系统滴答定时器的时钟源72MHz
定时的时间为1ms,也就是1KHz,重载值为72000-1=71999
优先级为15
PC13控制LED灯,LED的亮灭指示程序运行状态
STM32CubeMX配置
主要代码
先看序号1
函数HAL_Init()调用HAL_InitTick()来配置系统滴答定时器,
HAL_Init()
HAL_InitTick()调用HAL_SYSTICK_Config()配置系统滴答定时器,和设置系统滴答定时器的优先级(优先级为15)。
HAL_InitTick()
HAL_SYSTICK_Config()调用SysTick_Config()来进行配送系统滴答定时器
SysTick_Config()
SysTick_Config()根据参数ticks来设置重载值,清除当前计数值,选择FCLK(72MHz)作为时钟源,设置中断优先级为15,并使能系统滴答定时器。
注意以下:此时FCLK还不是72MHz,因为STM32的时钟树相关的寄存器还未被设置。
序号2
SystemClock_Config()调用了HAL_RCC_ClockConfig()。
HAL_RCC_ClockConfig()配置STM32的时钟树,将FCLK的频率设置为72MHz,再次调用HAL_InitTick()配置系统滴答定时器
此时才是真正的配置好了系统滴答定时器
HAL_RCC_ClockConfig()
上一篇:【STM32】HAL库-嵌套向量中断控制器NVIC
下一篇:【STM32】HAL库-电源控制(低功耗模式)
推荐阅读最新更新时间:2024-11-10 11:17
设计资源 培训 开发板 精华推荐
- DC500A-B,使用 LTC3406ES5-1.5 的演示板,2.7V 至 5.5Vin,1.5Vout @ 600mA max 同步降压稳压器
- Protues仿真实例(8050)-I2C协议.rar
- ADR130 0.5 Vout 基本配置参考电压的典型应用
- 使用 Microchip Technology 的 TCL1117-5.00 的参考设计
- DC219A,LT1505CG 演示板,4A CC-CV 锂离子电池充电器,Vin max < 24V,Vin min = Vbat +0.5V(通孔帽)
- 使用 STMicroelectronics 的 TDA7850LVH 的参考设计
- LTC1705 的典型应用 - 具有 5 位 VID 和 150mA LDO 的双通道 550kHz 同步开关稳压器控制器
- 模块共用测试板
- DC1010A-B,演示电路采用 LTC2489、2/4 通道、16 位 Delta Sigma 模数转换器
- 具有电缆压降补偿功能的 LTC3623IUDD 12V 至 2.5V、1MHz 降压稳压器的典型应用电路