你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 4910|回复: 12

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

[复制链接]

13

主题

23

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2011-3-3 08:47:24 | 显示全部楼层 |阅读模式
其实系统滴答就是一个24位的倒计时定时器,而且能够自动装置。仪器8位单片机如AVR/51要跑操作系统,需要专门占用一个定时器,但是由于优先级的原因很容易被其他程序打乱。而STM32Cortex M3为内核,它专门开辟了一个硬件定时器,具有很高的优先级,即使在系统处于睡眠状态也能工作。我们使用系统滴答点亮LED灯的方法有两种:
第一种方法:就是将系统滴答作为普通的定时器,采用查询的方法。首先使用ysTick->LOAD装置初值,即要倒计的值。然后时钟SysTick->CTRL控制寄存器使能计数器工作在连拍模式,也就是计数减到0的时候,会出现一个标志位:COUNTFLAG,然后在使用while不断地查询这一位。按照这种编程方法封装的文件代码为:
SYSTICK.C
#include "systick.h"
 
//延时Nms
//注意Nms的范围
//NmsCTRL|=0x01;               //开始倒数   
 while(!(SysTick->CTRL&(1VAL=0X00000000;           //清空计数器    
}  
//延时us          
void delay_us(u32 Nus)
{
 SysTick->LOAD=Nus*9;       //时间加载     
 SysTick->CTRL|=0x01;            //开始倒数   
 while(!(SysTick->CTRL&(1VAL=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, (1CTRL  = SysTick_CTRL_CLKSOURCE_Msk |
                   SysTick_CTRL_TICKINT_Msk   |
                   SysTick_CTRL_ENABLE_Msk;                    /* Enable SysTick IRQ and SysTick Timer */
  return (0);                                                  /* Function successful */
}
 
#endif
 
 
这里要注意的是系统滴答是24位寄存器,不能超过224次方,大约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;
  }
 
}

<span lang="EN-US"><font size="3" face="Times New Roman">

3.4-系统滴答查询方式.rar

下载

74.44 KB, 下载次数: 17, 下载积分: ST金币 -1

3.4-系统滴答中断方法.zip

下载

85.46 KB, 下载次数: 20, 下载积分: ST金币 -1

<
回复

使用道具 举报

0

主题

8

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2011-3-3 15:49:46 | 显示全部楼层

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

我是前一种…………
回复 支持 反对

使用道具 举报

89

主题

485

回帖

0

蝴蝶豆

初级会员

最后登录
1970-1-1
发表于 2011-3-3 19:20:53 | 显示全部楼层

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

不错!
回复 支持 反对

使用道具 举报

0

主题

8

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2011-4-9 11:27:49 | 显示全部楼层

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

辛苦了。谢谢。
回复 支持 反对

使用道具 举报

0

主题

4

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2011-6-1 20:58:55 | 显示全部楼层

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

我要看一下,谢谢
回复 支持 反对

使用道具 举报

0

主题

18

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2011-7-20 00:05:04 | 显示全部楼层

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

不可见吗
回复 支持 反对

使用道具 举报

1

主题

11

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2011-8-1 14:39:14 | 显示全部楼层

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

kankanxian
回复 支持 反对

使用道具 举报

1

主题

24

回帖

0

蝴蝶豆

新手上路

最后登录
2018-6-3
发表于 2011-8-1 15:14:30 | 显示全部楼层

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

学习了
回复 支持 反对

使用道具 举报

2

主题

47

回帖

0

蝴蝶豆

初级会员

最后登录
2018-12-10
发表于 2011-8-25 14:32:09 | 显示全部楼层

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

好好学习学习
回复 支持 反对

使用道具 举报

0

主题

6

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2012-4-11 09:27:11 | 显示全部楼层

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

好东西
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版