嵌入式开发学习之--系统定时器

简介: 嵌入式开发学习之--系统定时器

嵌入式开发学习之--系统定时器


本章主要学习系统定时器,并用系统定时器来做一个延时函数。

文章目录

前言

一、SysTick 简介

二、使用步骤

2.1寄存器相关配置

2.2代码解读

总结

前言

 之前我们做延时函数,就是一个for循环,然后不停的计数,然后根据频率去计算具体时间,定时器的原理和这个大致类似,不过他是一个独立的外设,不需要占用总资源。

提示:以下是本篇文章正文内容,下面案例可供参考

一、SysTick 简介

 SysTick—系统定时器是属于 CM4 内核中的一个外设,内嵌在 NVIC 中。系统定时器是一个 24bit 的向下递减的计数器,计数器每计数一次的时间为 1/SYSCLK,一般设置系统时钟 SYSCLK 等于180M。当重装载数值寄存器的值递减到 0 的时候,系统定时器就产生一次中断,以此循环往复。

 因为 SysTick 是属于 CM4 内核的外设,所以所有基于 CM4 内核的单片机都具有这个系统定时器,使得软件在 CM4 单片机中可以很容易的移植。系统定时器一般用于操作系统,用于产生时基,维持操作系统的心跳。

二、使用步骤

2.1寄存器相关配置

感兴趣的可以查一下芯片手册,这里不赘述了。

2.2代码解读

#include "./systick/bsp_SysTick.h"
static __IO u32 TimingDelay;
/**
  * @brief  Æô¶¯ÏµÍ³µÎ´ð¶¨Ê±Æ÷ SysTick
  * @param  ÎÞ
  * @retval ÎÞ
  */
void SysTick_Init(void)
{
  /* SystemFrequency / 1000    1msÖжÏÒ»´Î
   * SystemFrequency / 100000  10usÖжÏÒ»´Î
   * SystemFrequency / 1000000 1usÖжÏÒ»´Î
   */
  if (SysTick_Config(SystemCoreClock / 100000))
  { 
    /* Capture error */ 
    while (1);
  }
}
/**
  * @brief   usÑÓʱ³ÌÐò,10usΪһ¸öµ¥Î»
  * @param  
  *   @arg nTime: Delay_us( 1 ) ÔòʵÏÖµÄÑÓʱΪ 1 * 10us = 10us
  * @retval  ÎÞ
  */
void Delay_us(__IO u32 nTime)
{ 
  TimingDelay = nTime;  
  while(TimingDelay != 0);
}
/**
  * @brief  »ñÈ¡½ÚÅijÌÐò
  * @param  ÎÞ
  * @retval ÎÞ
  * @attention  ÔÚ SysTick ÖжϺ¯Êý SysTick_Handler()µ÷ÓÃ
  */
void TimingDelay_Decrement(void)
{
  if (TimingDelay != 0x00)
  { 
    TimingDelay--;
  }
}

这是野火的定时器代码,简单解读一下:SysTick_Init()通过SysTick_Config()这个函数确定中断频率,然后在此基础上定义一个参数TimingDelay,通过delay_us()是对外获取的值给到TimingDelay,然后在定时器中断中触发一次减一次直到减到0为止,从而实现延时。

总结

 了解一下什么是系统定时器以及用法就好,关于底层的东西了解一下机制然后知道如何配置就行,如想十分透彻的了解再去查就好了。

相关文章
|
存储 监控 C语言
西门子S7-1200编程实例,关断延迟定时器指令如何使用?
在西门子S7-1200中有四种类型的定时器:TON接通延迟定时器、TONR保持型接通延迟定时器、TOF关断延迟定时器、TP脉冲定时器。
西门子S7-1200编程实例,关断延迟定时器指令如何使用?
|
6天前
|
存储
【51单片机】初学者必读的一文【探究定时计数器与中断系统是如何配合起来的?】(9)
【51单片机】初学者必读的一文【探究定时计数器与中断系统是如何配合起来的?】(9)
|
6天前
|
数据采集 API 数据处理
FreeRTOS入门教程(软件定时器)
FreeRTOS入门教程(软件定时器)
56 0
|
6天前
嵌入式中利用软件实现定时器的两种方法分析
嵌入式中利用软件实现定时器的两种方法分析
42 0
|
芯片 开发者
嵌入式开发学习之--串口通讯(上)
嵌入式开发学习之--串口通讯(上)
嵌入式开发学习之--串口通讯(上)
|
存储 Java 数据安全/隐私保护
嵌入式开发学习之--串口通讯(下)
嵌入式开发学习之--串口通讯(下)
嵌入式开发学习之--串口通讯(下)
嵌入式开发学习之--中断应用概览
嵌入式开发学习之--中断应用概览
嵌入式开发学习之--中断应用概览
|
Linux
扩展知识点--利用Linux应用代码如何控制LED
扩展知识点--利用Linux应用代码如何控制LED
105 0
|
C语言
【嵌入式实训】STM32中断处理机制及外部中断使用方法
理论知识 STM32系列处理器外部中断/事件控制器的原理 共19个外部中断线,其中GPIO端口以下图的方式连接到16个外部中断/事件线上: 另外三种其他的外部中断/事件控制器的连接如下:EXTI 线 
544 0