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

2020-08-05  本文已影响0人  熊爸天下_56c7

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

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

一. 什么是系统定时器 SysTick

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

二. 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;
}

上一篇 下一篇

猜你喜欢

热点阅读