STM32(从库函数到寄存器)——SysTick

本文详细介绍了STM32中的SysTick定时器,它作为NVIC的一部分,提供周期性中断服务。内容包括SysTick的特性、四个相关寄存器、CMSIS-Core库函数的使用,特别是SysTick_Config()的配置过程。通过实例展示了如何配置SysTick实现延时和时间测量,并解析了中断优先级设置和系统控制块SCB的相关操作。
摘要由CSDN通过智能技术生成

本章知识的总结大部分来自于《M3--权威指南》

SysTick属于NVIC的一部分(即属于内核的一部分),可以产生SysTick异常,为简单的24位向下计数器,可以使用外部参考时钟或内部时钟。SysTick有两个重要的特征:一,它是为OS服务的,作为一个周期性的中断来定期触发OS(这需要后续的探索);二是处理器设计要确保运行在非特权等级的应用无法禁止该定时器,否则任务会禁止SysTick定时器并锁定整个系统。

SysTick定时器存在四个寄存器。CMSIS-Core头文件中定义了一个名为SysTick的结构体。

若系统中不需要OS,SysTick定时器可用作定时器的简单外设,用以产生周期性的中断,延时和时间测量。(这三个方面是本篇的重点)若想产生周期性的SysTIck中断,最简单的方法是使用CMSIS-Core的函数SysTick_Config(),下面的例程就使用了该函数。

下面来看程序。

#include "stm32f10x.h"
#include "bsp_led.h"
#include "bsp_SysTick.h"

int main(void)
{
	LED_GPIO_Config ();
	SysTick_Init();
	while(1)
	{
							
	  LED1 (ON);
	  Delay_us (10000);           //10000*10us=100ms
	  LED1 (OFF);
							
}

依旧是在一个简单的led灯点亮的实验基础上,增添了定时器的内容。在主函数中,出现了SysTick的配置函数,消失了以往的用while(i--)的简单方式进行的延时函数。进入SysTick_Init(),观察配置的细节。

void SysTick_Init(void)
{
	

	if (SysTick_Config(SystemCoreClock / 100000))	
	{ 
		/* Capture error */ 
		while (1);
	}

调用库函数SysTick_Config(),如果为真,就出现错误,进入无限循环。为了搞清楚这个,我们进入这个库函数。

static __INLINE uint32_t SysTick_Config(uint32_t ticks)
{ 
  if (ticks > SysTick_LOAD_RELOAD_Msk)  return (1);            /* Reload value impossible 
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值