STM32一文通(7) 系统定时器

发布者:VelvetSoul最新更新时间:2025-01-06 来源: jianshu关键字:STM32  系统定时器  固件库 手机看文章 扫描二维码
随时随地手机看文章

直接看第五节就是定时函数. 下面的内容都是在介绍原理

3.0 版以后的 STM32 固件库在标准外设库中移除了 SysTick 的驱动,因此用户必须调用
CMSIS 定义的函数。
CMSIS 只提供了一个 SysTick 设置的函数,替代了 STM32 原有 SysTick 驱动的全部函数。
SysTick_Config(uint32_t ticks);
-SysTick 计时器是 24 位的,所以设置参数的时候不要超过 24 位的范围。



一. 什么是系统定时器 SysTick

SysTick:系统定时器,24位,只能递减,存在于内核,嵌套在NVIC中,所有的Cortex-M内核的单片机都具有这个定时器。

  • 系统嘀嗒校准值固定为9000,当系统嘀嗒时钟设定为9MHz(HCLK/8的最大值),产生1ms时间
    基准。

  • 默认systick中断优先级是最低的

二. systick的相关寄存器(了解)

三. 定时时间计算

一个计数循环的事件t =  重装载值RELOAD *(1 / 时钟Systick_CLK)

以9M 时钟, 9000计数值为例:

t= 9000*(1/9000000) = 0.001s = 1ms

四. SysTick_Type结构体和SysTick_Config()

都在 core_m3.h中定义

SysTick_Config()函数

参数: ticks

SysTick 计时器是 24 位的,所以设置参数的时候不要超过 24 位的范围。

返回值:   1: 设置错误  0:设置成功


五. 实现1ms 1us定时函数

不用中断, 用1个方法实现计时

psb_systick.h


#ifndef PSB_SYSTICK_H

#define PSB_SYSTICK_H

#include 'stm32f10x.h'

#include 'core_cm3.h'


void SysTick_delay_ms(uint32_t ms);

void SysTick_delay_us(uint32_t us);


#endif /*PSB_SYSTICK_H*/


psb_systick.c


#include 'psb_systick.h'


void SysTick_delay_ms(uint32_t ms)

{

    uint32_t i;

    SysTick_Config(72000);

    

    for(i=0; i    {

        while(!((SysTick->CTRL) & (1<<16)));

    }

    SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk;

}


void SysTick_delay_us(uint32_t us)

{

    uint32_t i;

    SysTick_Config(72);

    

    for(i=0; i    {

        while(!((SysTick->CTRL) & (1<<16)));

    }

    SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk;

}


关键字:STM32  系统定时器  固件库 引用地址:STM32一文通(7) 系统定时器

上一篇:《嵌入式-STM32开发指南》第二部分 基础篇 - 第8章 模拟输入输出-ADC(HAL库)
下一篇:STM32连接ESP8266向oneNET上传数据

小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved