从头开始写STM32F103C8T6驱动库(四)——编写延时函数,详解Systick

系列文章目录

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参考手册

  1. 对输入参数做单边限幅

    4.编写毫秒延时程序(delay_ms)

    ms延时要注意计数器数值范围问题,我们可以算一下最大计时时间
    2^24 = 16,777,216 / 9,000,000Hz = 1.864135s
    也就是说毫秒延时最大为1864ms
    具体方法和微妙延时大同小异,代码如下:

    5.编写测试程序

    我们来简单写一个闪灯程序,发现小灯是可以已10Hz频率在闪烁,说明我们的延时数运行正确。

    声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年1月20日
下一篇 2022年1月20日

相关推荐