美文网首页
STM32一文通(7) 系统定时器

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

作者: 熊爸天下_56c7 | 来源:发表于2020-08-05 23:14 被阅读0次

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

    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<ms ; 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<us ; i++)
        {
            while(!((SysTick->CTRL) & (1<<16)));
        }
        SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk;
    }
    
    

    相关文章

      网友评论

          本文标题:STM32一文通(7) 系统定时器

          本文链接:https://www.haomeiwen.com/subject/jbndrktx.html