STM32关于Systick定时器

大多操作系统需要一个硬件定时器来产生操作系统需要的滴答中断,作为整个系统的时基。故而需要一个定时器来产生周期性的中断,以维持操作系统“心跳”的节律。
CM3 内核的处理器,它的内部包含了一个 SysTick 定时器,SysTick 是一个 24 位的倒计数定时器,当计数到 0 时,将从RELOAD 寄存器中自动重装载定时初值,开始新一轮计数。
Systick定时器(系统滴答定时器)常用来作延时,节省MCU资源。
有这一下4个寄存器控制这System寄存器
1.SysTick控制及状态寄存器(地址:0xE000_E010) (SysTick->CTRL)
在这里插入图片描述
2.SysTick重装载数值寄存器(地址:0xE000_E014)(SysTick-> LOAD)
在这里插入图片描述
3.SysTick当前数值寄存器(地址:0xE000_E018)(SysTick-> VAL)在这里插入图片描述
4.SysTick校准数值寄存器(地址:0xE000_E01C) (SysTick-> CALIB)(不常用)
在这里插入图片描述
delay_init函数:
两个重要参数:fac_us 以及 fac_ms;同时把 SysTick 的时钟源选择为外部时钟,如果需要支持操作系统(OS),只需要在 sys.h 里面,设置 SYSTEM_SUPPORT_OS 宏的值为 1 即可,然后,该函数会根据 delay_ostickspersec 宏的设置,来配置 SysTick 的中断时间,并开启 SysTick 中断。具体代码如下:
在这里插入图片描述

delay_ms和delay_us支持 OS 需要用到的三个宏定义:在这里插入图片描述delay_osrunning,用于标记 OS 是否正在运行,当 OS 已经开始运行时,该宏定义
值为 1,当 OS 还未运行时,该宏定义值为 0。
delay_ ostickspersec,用于表示 OS 的时钟节拍,即 OS 每秒钟任务调度次数。
delay_ osintnesting,用于表示 OS 中断嵌套级别,即中断嵌套次数,每进入一个
中断,该值加 1,每退出一个中断,该值减 1。
delay_ms和delay_us支持OS需要用到的4个函数:
delay_osschedlock,用于 delay_us 延时,作用是禁止 OS 进行调度,以防打断 us 级
延时,导致延时时间不准。
delay_osschedunlock,同样用于 delay_us 延时,作用是在延时结束后恢复 OS 的调度,继续正常的 OS 任务调度。
delay_ostimedly,则是调用 OS 自带的延时函数,实现延时。该函数的参数为时钟节
拍数。
SysTick_Handler,则是 systick 的中断服务函数,该函数为 OS 提供时钟节拍,同时
可以引起任务调度。

更为详细的信息,自行翻阅
《STM32F1开发指南-寄存器版本》
《Cortex-M3权威指南》

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值