文档章节

stm32笔记:Systick系统滴答定时器

 卤煮小鱼
发布于 2016/04/11 21:21
字数 521
阅读 229
收藏 2

Systick :系统心跳定时器,提供系统节拍

             裸机程序中可作为独立的延时定时器

一:用途
1.产生操作系统的时钟节拍
2.便于不同处理器之间程序移植
SysTick定时器被捆绑在NVIC中,异常号15
3.作为一个闹铃测量时间用于测量时间,

 但当处理器在调试期间被喊停(halt)时,则SysTick定时器亦将暂停运作



二:时钟树

以AHB时钟或者AHB/8作为运行时钟。


三:寄存器

它有四个寄存器

STK_CSR, 0xE000E010 -- 控制寄存器
STK_LOAD, 0xE000E014 -- 重载寄存器
STK_VAL, 0xE000E018 -- 当前值寄存器
STK_CALRB, 0xE000E01C -- 校准值寄存器

stm32的时钟源
选择外部时钟源时,则Systick时钟为HCLK /8
选择内核时钟源时,则Systick时钟为HCLK

延时原理

systick定时器是24位的递减计数器,设定初值并使能它后,脉冲计数值被保存到当前值寄存器(STK_VAL)

它会每个系统时钟周期计数器减1,计数到0 时,触发中断,将从RELOAD 寄存器中自动重装载定时初值到STK_VAL。

只要不把它在SysTick控制及状态寄存器中的使能位清除,就永不停息.

四:代码

AHB时钟1/72 000 000  ,

初始化:初始化已经把嘀嗒定时器打开了,为了可控,代码中关闭了定时器。

SysTick->CTRL &=  SysTick_CTRL_ENABLE_Msk;主程序调用打开嘀嗒。


void SysTick_Init(void)
{
	/* SystemFrequency / 1000    1ms中断一次
	 * SystemFrequency / 100000	 10us中断一次
	 * SystemFrequency / 1000000 1us中断一次
	 */
//	if (SysTick_Config(SystemFrequency / 100000))	// ST3.0.0库版本
	if (SysTick_Config(SystemCoreClock / 100000))	// ST3.5.0库版本
	{ 
		/* Capture error */ 
		while (1);
	}
		// 关闭滴答定时器  
	SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk;
	     // 打开闭滴答定时器  
	//SysTick->CTRL &=   SysTick_CTRL_ENABLE_Msk;

}

中断:

stm32f10x_it.c中的接口代码

void SysTick_Handler(void)
{
	TimingDelay_Decrement();	
}
void TimingDelay_Decrement(void)
{
	if (TimingDelay != 0x00)
	{ 
	TimingDelay--;
	}
}
裸机中嘀嗒并不是一直开启的,延时可以这样做。
void Delay_us(__IO u32 nTime)
{ 
	TimingDelay = nTime;	

	// 使能滴答定时器  
	SysTick->CTRL |=  SysTick_CTRL_ENABLE_Msk;

	while(TimingDelay != 0);
}




© 著作权归作者所有

粉丝 0
博文 15
码字总数 7973
作品 0
松江
私信 提问
STM32之SysTick定时器

SysTick-------操作系统的心跳 SysTick是系统滴答定时器,可以说是操作系统的的“心跳”,它被绑在NVIC中,用于产生SysTick异常(异常号:15)。一旦产生SysTick异常,就会产生滴答中断,这个...

panrenqiu
2018/04/14
0
0
STM32系统滴答_及不可不知的延时技巧 - (上)

我想每个单片机爱好者及工程开发设计人员都有过点灯的经历。流水灯是个好东西,尤其是在调试资源有限的环境中,有时会帮上大忙。 然在最初入门时,如何让这些小灯们按照我们的想法欢快地跑起...

小汉憨憨
2014/04/29
9.1K
0
SysTick的优先级是高还是低

SysTick系统嘀嗒定时器并非STM32独有的,它是Cortex内核的部分,CM3为它专门开出一个异常类型,并且在中断向量表中占有一席之地(异常号15)。这样它可以很方便的移植到不同厂商出CM3内核...

OceanStack
2015/01/24
5.8K
0
【转】浅析STM32中SysTick在3.5固件库中的应用

最近一直在忙STM32的学习,在学习中遇到了不少问题,也经过各种尝试解决问题,在这里我通过博文的形式写出来,也希望能够帮到遇见同样问题的人们。对于STM32系列的芯片,有一个好处就是官方给...

jerry2012cn
2013/06/23
2.1K
0
STM32 HAL库定时器TIM---编码器接口模式配置

cube基本配置,外设开启编码器,串口2 -------------------------------------------------------------------------------------------------------------------------- 错误:error: #20:......

super828
2018/03/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

数据库表与表之间的一对一、一对多、多对多关系

表1 foreign key 表2 多对一:表 1 的多条记录对应表 2 的一条记录 利用foreign key的原理我们可以制作两张表的多对多,一对一关系 多对多: 表1的多条记录可以对应表2的一条记录 表2的多条记...

Garphy
37分钟前
6
0
MySQL 表崩溃修复

MySQL日志报错 2019-10-19 13:41:51 19916 [ERROR] /usr/local/mysql/bin/mysqld: Table './initread_hss/user_info' is marked as crashed and should be repaired2019-10-19 13:41:51 1......

雁南飞丶
47分钟前
6
0
Error和Exception

1.Error类和Exception类都是继承Throwable类 2.Error(错误)是系统中的错误,程序员是不能改变的和处理的,是在程序编译时出现的错误,只能通过修改程序才能修正。一般是指与虚拟机相关的问...

大瑞清_liurq
今天
4
0
8086汇编基础 start 程序入口标签的示例

    IDE : Masm for Windows 集成实验环境 2015     OS : Windows 10 x64 typesetting : Markdown    blog : my.oschina.net/zhichengjiu    gitee : gitee.com/zhichengjiu   ......

志成就
今天
4
0
uni app 零基础小白到项目实战2

<template> <scroll-view v-for="(card, index) in list" :key="index"> <view v-for =(item, itemIndex) in card"> {{item.value}}</view> </scroll-view></template> GraceUi va......

达达前端小酒馆
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部