神舟IV学习笔记(四)系统滴答SysTick两种实现方式

发布者:cxx7848653最新更新时间:2017-02-17 来源: eefocus关键字:神舟IV  系统滴答  SysTick  实现方式 手机看文章 扫描二维码
随时随地手机看文章

其实系统滴答就是一个24位的倒计时定时器,而且能够自动装置。仪器8位单片机如AVR/51要跑操作系统,需要专门占用一个定时器,但是由于优先级的原因很容易被其他程序打乱。而STM32以Cortex M3为内核,它专门开辟了一个硬件定时器,具有很高的优先级,即使在系统处于睡眠状态也能工作。我们使用系统滴答点亮LED灯的方法有两种:

第一种方法:就是将系统滴答作为普通的定时器,采用查询的方法。首先使用ysTick->LOAD装置初值,即要倒计的值。然后时钟SysTick->CTRL控制寄存器使能计数器工作在连拍模式,也就是计数减到0的时候,会出现一个标志位:COUNTFLAG,然后在使用while不断地查询这一位。按照这种编程方法封装的文件代码为:

SYSTICK.C

#include "systick.h"

 

//延时Nms

//注意Nms的范围

//Nms<=0xffffff*8/SYSCLK

//对72M条件下,Nms<=1864

void delay_ms(u16 Nms)

{   

 SysTick->LOAD=(u32)Nms*9000; //给重装载寄存器赋值,9000时,将产生1ms的时基

 SysTick->CTRL|=0x01;               //开始倒数   

 while(!(SysTick->CTRL&(1<<16)));   //等待时间到达

 SysTick->CTRL=0X00000000;         //关闭计数器

 SysTick->VAL=0X00000000;           //清空计数器    

}  

//延时us          

void delay_us(u32 Nus)

{

 SysTick->LOAD=Nus*9;       //时间加载     

 SysTick->CTRL|=0x01;            //开始倒数   

 while(!(SysTick->CTRL&(1<<16)));//等待时间到达

 SysTick->CTRL=0X00000000;       //关闭计数器

 SysTick->VAL=0X00000000;        //清空计数器    

}

SYSTICK.H

#ifndef __SYSTICK_H

#define __SYSTICK_H      

#include "stm32f10x_conf.h"

void delay_ms(u16 Nms);

void delay_us(u32 Nus);

 

 

#endif 

第二种方法:中断的方法。程序调用core_cm3.c里的SysTick_Config的函数,方便不同cortex M3处理之间的移植。里面设置装置寄存器,内核时钟,向下计数到0导致systick 中断,和使能寄存器。

 

SysTick_Config的函数定义为

static __INLINE uint32_t SysTick_Config(uint32_t ticks)

{

  if (ticks > SysTick_LOAD_RELOAD_Msk)  return (1);            /* Reload value impossible */

                                                               

  SysTick->LOAD  = (ticks & SysTick_LOAD_RELOAD_Msk) - 1;      /* set reload register */

  NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);  /* set Priority for Cortex-M0 System Interrupts */

  SysTick->VAL   = 0;                                          /* Load the SysTick Counter Value */

  SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |

                   SysTick_CTRL_TICKINT_Msk   |

                   SysTick_CTRL_ENABLE_Msk;                    /* Enable SysTick IRQ and SysTick Timer */

  return (0);                                                  /* Function successful */

}

 

#endif

 

 

这里要注意的是系统滴答是24位寄存器,不能超过2的24次方,大约16M左右,所以我这里设置的是:系统时钟的五分之一,14.4M。

SysTick_Config(SystemCoreClock/5);//这样每隔0.2s中断发生一次

主要程序代码为:

unsigned char num=0;//第几盏灯亮

void LED_Spark(void)

{

 

  switch(num++)

  {

    case 0://灯1亮

      LED1_ON();LED2_OFF();LED3_OFF();LED4_OFF();

      break;

    case 1://灯2亮

      LED1_OFF();LED2_ON();LED3_OFF();LED4_OFF();

      break;

    case 2://灯3亮

      LED1_OFF();LED2_OFF();LED3_ON();LED4_OFF();

      break;

    case 3://灯4亮

      LED1_OFF();LED2_OFF();LED3_OFF();LED4_ON();

      break;

    default://全灭

      num=0;LED1_OFF();LED2_OFF();LED3_OFF();LED4_OFF();

      break;

  }

 

}

int main(void)

{

  /* Setup STM32 system (clock, PLL and Flash configuration) */

  SystemInit();

 

  /* Add your application code here

     */

  LED_Configuration();

  SysTick_Config(SystemCoreClock/5);//每隔0.2s中断调用一次

  NVIC_SetPriority(SysTick_IRQn, 0x0);//设置优先级

  /* Infinite loop */

  while (1)

  {

  }

}


关键字:神舟IV  系统滴答  SysTick  实现方式 引用地址:神舟IV学习笔记(四)系统滴答SysTick两种实现方式

上一篇:神舟IV学习笔记(六)I2C接口EEPROM-软硬件实现
下一篇:神舟IV学习笔记(二)按键检测

推荐阅读最新更新时间:2024-03-16 15:33

【STM32】HAL库-系统滴答定时器SysTick
SysTick定时器被捆绑在NVIC中,是一个简单的定时器,对于CM3、CM4内核芯片,都有Systick定时器。Systick定时器常用来做延时,或者实时系统的心跳时钟。这样可以节省MCU资源,不用浪费一个定时器。 Systick定时器就是系统滴答定时器,一个24 位的倒计数定时器,计到0 时,将从RELOAD 寄存器中自动重装载定时初值。 系统滴答定时器有4个寄存器 时钟源 该定时器的时钟源可以是 内部时钟(FCLK,CM3上的自由运行时钟) 外部时钟( CM3处理器上的STCLK信号) 通过SysTick控制及状态寄存器的第2位来确定 STM32的时钟树 RCC通过AHB时钟(HCLK)8分频或者不分
[单片机]
【STM32】HAL库-<font color='red'>系统</font><font color='red'>滴答</font>定时器<font color='red'>SysTick</font>
初学stm32-Systick滴答时钟定时
滴答定时器概述 Systick定时器,是一个简单的定时器,对于CM3,CM4内核芯片,都有Systick定时器。常用来做延时,或者实时系统的心跳时钟。这样可以节省MCU资源,不用浪费一个定时器。比如uCOS中,分时复用,需要一个最小的时间戳,一般在STM32+UCOS系统中,都采用Systick做uCOS心跳时钟。 Systick定时器就是系统滴答定时器,一个24 位的倒计数定时器,计到0 时,将从RELOAD 寄存器中自动重装载定时初值。只要不把它在SysTick 控制及状态寄存器中的使能位清除,就永不停息,即使在睡眠模式下也能工作。 SysTick定时器被捆绑在NVIC中,用于产生SYSTICK异常(异常号:15)。
[单片机]
初学stm32-<font color='red'>Systick</font><font color='red'>滴答</font>时钟定时
STM32 Systick分析
前言:目前我觉得自己还没有能够深入用到这个SysTick的时候,只是要用到了delay_us()和delay_ms(),因为碰到了这个问题,所以想着提前了解一下,免得后来造成一脸懵逼的情况;毕竟没有社会经验的高手指点迷津,这里学习还是系统一点好; systick是个啥? 是一个24位倒记数定时器; systick的功能是什么 为操作系统提供硬件上的定时中断(滴答中断); 保证系统运行的时候不会让一个任务而占用整个系统; 可以制作精准的定时功能; …… systick定时器的特点 可以工作在芯片睡眠状态下 此定时器被捆绑在NVIC(中断向量控制器)中,可以用于产生异常和中断; …… 编程涉及到的寄存器 SysTick_C
[单片机]
STM32 <font color='red'>Systick</font>分析
STM32学习笔记一一SysTick
1.简介 SysTick 定时器被捆绑在 NVIC 中,用于产生 SysTick 异常(异常号:15)。在以前,操作系统和有所有使用了时基的系统,都必须要一个硬件定时器来产生需要的“滴答”中断,作为整个系统的时基。滴答中断对操作系统尤其重要。例如,操作系统可以为多个任务许以不同数目的时间片,确保没有一个任务能霸占系统;或者把每个定时器周期的某个时间范围赐予特定的任务等,还有操作系统提供的各种定时功能,都与这个滴答定时器有关。因此,需要一个定时器来产生周期性的中断,而且最好还让用户程序不能随意访问它的寄存器,以维持操作系统“心跳”的节律。 Cortex-M3 在内核部分 包含了一个简单的定时器——SysTick timer。
[单片机]
STM32学习笔记一一<font color='red'>SysTick</font>
STM32之SysTick时钟
今天学完STM32的SysTick时钟,(24位递减计数器)现在总结如下: 首先SysTick时钟包含一下四个寄存器 (1),STK_CSR 地址为0xE000E010 ----控制寄存器 STK_CSR中有以下四位具有意义,使用的时候需要配置 (1),第0位:SysTick使能位(0-关闭功能,1-开启功能) (2),第1位:SysTick中断使能位(0-关闭中断,1-开启中断) (3),第2位:SysTick时钟源选择(0-使用HCLK/8作为时钟(8分频),1-使用HCLK作为时钟) (4),第16位:SysTick技术比较标志(如果计数到达0,则该位为1,否则为零)
[单片机]
STM32之用SysTick做准确定时
SysTick,ST的数据手册上稍微提了一下但是没有详细介绍,这里我们仔细研究下。如有错误之处敬请更正。 SysTick位于NVIC中,它主要应用在操作系统中,所以平常我们用的很少,但是我们可以用它来做简单的延时,还是比较准确的。 那我们先看一下跟他相关的寄存器吧: 主要有四个寄存器:CTRL,RELOAD,VAL,CALIB CALIB我们一般不用,所以就不做介绍了。 对CTRL的操作实际就是设置SysTick的时钟,以及使能等。 对LOAD的操作就是填充新的计数值 对VAL的操作时设置计数满后的操作 学习最快最感性的莫过于实例了,那我们就通过一个例子来学习SysTick 那我们先说下思路,延
[单片机]
STM32之用<font color='red'>SysTick</font>做准确定时
实现方式有所区分 智能分析初级发展解放人力
    如今,简单的视频保存和播放已经不能满足当前人们对安防产品的要求。如何用智能化的技术来替代人工视频处理正在成为诸多DSS(数字安全监控)解决方案提供商探讨解决的问题。智能化的实现不仅可以通过减少人工大大降低安防运行的成本,同时还将大大提升数据的筛选及处理能力,为未来安防技术的多样化应用提供了可能。智能分析在近两年被视频监控领域作为一个重要的发展方向提出来。本文就智能分析行业发展现状及其未来发展趋势做简单介绍。       智能视频分析实现方式有所区分      目前智能分析技术已经广泛应用于各种安防领域,根据其实现的方式进行区分,有业内人士将其概括为以下几种类型的智能分析。      诊断类智能分析:诊断类智能分析主要是针对视
[安防电子]
浅谈CNC动态卡在总线方式下的实现
   引言   随着微处理器的快速发展和广泛的应用,数字通信网络延伸到工业过程现场成为可能,产生了以微处理器为核心,使用集成电路代替常规电子线路,实施信息采集、显示、处理、传输以及优化控制等功能的智能设备。设备之间彼此通信、控制,在精度、可操作性以及可靠性、可维护性等都有更高的要求。由此,导致了现场总线的产生。1984年,现场总线的概念得到正式提出。IEC(International Electrotechnical Commission,国际电工委员会)对现场总线(Fieldbus)的定义为:现场总线是一种应用于生产现场,在现场设备之间、现场设备和控制装置之间实行双向、串形、多结点的数字通信技术。   现有的放开式数控系统
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved