系列文章目录
Github开源地址
从头开始写STM32F103C8T6驱动库(一)——STM32CubeMX创建并调整工程结构
从头开始写STM32F103C8T6驱动库(二)——编写系统初始化程序,配置时钟树
从头开始写STM32F103C8T6驱动库(三)——编写GPIO驱动
从头开始写STM32F103C8T6驱动库(四)——编写延时函数,详解Systick
文章目录
- 系列文章目录
- 前言
-
- 1.Systick定时器介绍
- 2.Systick定时器使用方法
- 3.编写微秒延时程序(delay_us)
- 4.编写毫秒延时程序(delay_ms)
- 5.编写测试程序
前言
上一章我们编写了GPIO驱动函数,但是如果我们想使用GPIO来实现一个流水灯的话还需要一个延时函数,今天我们就来写一下使用Systick实现的系统延时函数
1.Systick定时器介绍
Cortex‐M3处理器内部包含了一个简单的定时器。因为所有的Cortex‐M3芯片都带有这个定时
器,软件在不同 CM3器件间的移植工作得以化简。该定时器的时钟源可以是内部时钟(FCLK,
CM3上的自由运行时钟),或者是外部时钟( CM3处理器上的STCLK信 )。 Systick定时器常用来做延时,或者实时系统的心跳时钟。这样可以节省MCU资源,不用浪费一个定时器。Systick定时器就是系统滴答定时器,一个24 位的倒计数定时器,计到0 时,将从RELOAD 寄存器中自动重装载定时初值。只要不把它在SysTick 控制及状态寄存器中的使能位清除,就永不停息,即使在睡眠模式下也能工作。
2.Systick定时器使用方法
而STM32上所指的STCLK是
RCC通过AHB时钟(HCLK)8分频后作为Cortex系统定时器(SysTick)的外部时钟。通过对SysTick
控制与状态寄存器的设置,可选择上述时钟或Cortex(HCLK)时钟作为SysTick时钟。
——————————————————————————————节选自STM32F10xxx参考手册
- 对输入参数做单边限幅
4.编写毫秒延时程序(delay_ms)
ms延时要注意计数器数值范围问题,我们可以算一下最大计时时间
2^24 = 16,777,216 / 9,000,000Hz = 1.864135s
也就是说毫秒延时最大为1864ms
具体方法和微妙延时大同小异,代码如下:5.编写测试程序
我们来简单写一个闪灯程序,发现小灯是可以已10Hz频率在闪烁,说明我们的延时数运行正确。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!