目录

0. 博主理解:

1. 实验内容及步骤:

2. 硬件说明

3. 寄存器说明

3.1 SysTick的时钟和使能:

3.2 SysTick重装载数值寄存器:

3.3 SysTick的中断优先级:

3.4 SysTick的中断函数:

4. 程序设计(寄存器)

5. 程序设计(标准库)

6. 程序设计(HAL库)

7. 实验结果

8. 源码下载


7.SYSTICK 滴答定时器

0. 博主理解:

SysTick就是一个定时器,只不过这个定时器是属于Cortex-M3内核中的(就是说所有的M3内核的芯片都有这个定时器),起到兼容的作用。这个定时器通常用于操作系统的“心跳”;在裸机中通常用其充当延时作用。

1. 实验内容及步骤:

实验内容:

通过SysTick滴答定时器实现每隔1S钟,串口输出“1S SysTick”

步骤:

       1.配置SysTick控制及状态寄存器(选择时钟源、使能SysTick、使能中断);

2.配置SysTick重装载数值寄存器(装入倒计时的值);

3.配置SysTick的中断优先级;

4.配置SysTick的中断函数。

2. 硬件说明

无。

3. 寄存器说明

参考“STM32F10xxx Cortex-M3编程手册-英文版”,“Cortex-M3权威指南(中文)”

3.1 SysTick的时钟和使能:

       配置SysTick控制及状态寄存器(地址:0xE000_E010)(STK_CTRL)

主要说明寄存器的第二位CLKSOURCE,0=AHB/8;1=AHB

在本实验中设置Systick定时器,选择时钟源为内核时钟(1=AHB=72M),使能Systick和SysTick异常请求(即中断)。

STK_CTRL = 0x0007;

3.2 SysTick重装载数值寄存器:

SysTick每次都会从重装载值开始减,减到0是就会产生异常,并且重新将重装载寄存器的值装到计数器里面,以此循环。建议产生中断的值不要太短,太短会导致系统频繁进入中断,增加CPU的负担。这里我们设置重装载的值为10ms。

SysTick重装载寄存器(地址:0xE000_E014,STK_LOAD)

在本实验中设置SysTick为10ms定时器,因为上一步中选择的时钟源为内核时钟(1=AHB=72M),以此当重装载值为720000时,倒计时到0的时间就为10ms。

STK_LOAD = 720000;

3.3 SysTick的中断优先级:

配置SysTick的中断优先级与外部中断优先级的寄存器不一样,严格来说SysTick的优先级为异常优先级。其寄存器如下所示

系统异常优先级寄存器阵列(地址:0xE000_ED18 - 0xE000_ED23,SHPRx)

本实验中配置SysTick的中断优先级为15,即优先级最低。

SHPR12 = 15<<4; (因为高四位才是配置优先级的有效位,所以要左移四位)

3.4 SysTick的中断函数:

在startup_stm32f10x_hd.s中可以找到SysTick的中断函数为SysTick_Handler

实验中需要定时1S,而SysTick的定时器为10ms,因此进入100次中断时,则代表以及定时了1S。定义一个变量初始值为100,进入一次中断就减1,最后减到0时,则代表以及定时了1S,再进行相应的操作。

4. 程序设计(寄存器)

源码: 这里是帅选了关键部分,详细看源码。

#define SysTick_FCLK_10ms    720000
#define SET_SYS_IP(IRQx,pp)                SCB->SHP[((uint32_t)(IRQx) & 0xF)-4]= pp<<4       //设置异常优先级u16 systick_1s=100;
//SYSTICK初始化
void Systick_Config(void)
{//重装载值SysTick->LOAD   =   SysTick_FCLK_10ms;SysTick->CTRL =  SysTick_CTRL_CLKSOURCE_Msk | //使用内部时钟72M SysTick_CTRL_TICKINT_Msk | //开启中断SysTick_CTRL_ENABLE_Msk;   //使能Systick SET_SYS_IP(SysTick_IRQn,15);
}void SysTick_Handler()
{if(systick_1s!=0)systick_1s--;
}/**********************main***************************/
//主函数
int main(void)
{SET_NVIC_GROUP(NVIC_PriorityGroup_4); //中断组4Systick_Config();  //初始化SysTick定时器
………(省略)USART1_Config(115200);      //串口1配置115200while (1){
………(省略)if(systick_1s == 0)    //判断是否到1S{systick_1s = 100;   //重新赋值1SUSART1_Sends((u8*)"1S SysTick\r\n");}}
}

5. 程序设计(标准库)

在core_cm3.h文件中已经有SysTick的配置函数了,如下所示

其配置方式与我们寄存器配置的方式一样,就不详细讲解了。

输入参数为重装载的值,即720000(10ms Systick中断)

中断函数和主函数部分与寄存器的一致。

源码:这里是帅选了关键部分,详细看源码。

#define SysTick_FCLK_10ms    720000//主函数
int main(void)
{NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);   //设置中断优先组4
………(省略)SysTick_Config(SysTick_FCLK_10ms);USART1_Config();      //串口1配置115200while (1){
………(省略)if(systick_1s == 0){systick_1s = 100;   //重新赋值1SUSART1_Sends((u8*)"1S SysTick\r\n");}}
}void SysTick_Handler()
{if(systick_1s!=0)systick_1s--;
}

6. 程序设计(HAL库)

在HAL中,SysTick的配置函数与标准库的一致,在core_cm3.h文件中。

源码:这里是帅选了关键部分,详细看源码。

#define SysTick_FCLK_10ms    720000u16 systick_1s=100;                                           void SysTick_Handler()
{if(systick_1s!=0)systick_1s--;
}/*********************main函数*****************************/
int main(void)
{HAL_Init();SystemClock_Config();SysTick_Config(SysTick_FCLK_10ms);    //设置SysTick定时器10msLED_GPIOX_Config();   //LED初始化KEY_EXTI_Config();    //按键中断初始化USART1_Config();      //串口1配置115200printf("SysTick_Test\r\n");while (1){if(systick_1s == 0)   //判断1S{systick_1s = 100;   //重新赋值1SUSART1_Sends((u8*)"1S SysTick\r\n");}}
}}

7. 实验结果

串口助手每隔1S就会输出“1S SysTick”。

8. 源码下载

源码下载

[学习笔记]STM32F1 SYSTICK 滴答定时器(寄存器、标准库、HAL库)相关推荐

  1. 滴答定时器的计数模式_【高手私藏】STM32学习笔记:SysTick滴答时钟

    今天我们来说说SysTick定时器.SysTick定时器在从参考手册中根本没有介绍.我费了九牛二虎之力才在一个犄角格拉里找到SysTick定时器的英文版的说明.在Cotex-M3有介绍,为什么要找ST ...

  2. Systick滴答定时器寄存器、delay()延时函数、SysTick_Config函数

    SysTick定时器 SysTick定时器,是一个简单的定时器,对于CM3.CM4内核的芯片都有SysTick定时器.SysTick 是一个 24 位的倒计数定时器,当计数到 0 时,将从RELOAD ...

  3. STM32 SysTick 滴答定时器原理及应用

    SysTick滴答定时器 一.功能 SysTick定时器是一个简单的定时器,CM3\CM4内核芯片都具备此定时器.SysTick定时器常用来做延时,采用实时系统时则用来做系统时钟. 无论用作延时还是用 ...

  4. Systick滴答定时器解析

    Systick滴答定时器 Systick定时器是什么 Systick定时器,是一个简单的定时器,对于CM3,CM4内核芯片,都有Systick定时器. Systick定时器常用来做延时,或者时系统的心 ...

  5. STM32F4无人机Systick滴答定时器

    更多交流欢迎关注作者抖音号:81849645041 目标 了解 ARM Cortex-M 系列芯片的内部时钟及定时器使用,通过配置 STM32F407 芯片的内部定时器,实现流水灯效果. 原理 Sys ...

  6. 滴答定时器的计数模式_Cortex-M4 Systick滴答定时器

    Tickclock可以实现精确延时,在K60的datasheet中没有详细将,现在我把我找到资料分享一下,关于systick在Cortex-M4中有讲到我们大家平常在单片机开发中经常会使用到延时函数, ...

  7. Systick滴答定时器讲解

    Systick定时器基础知识讲解: Systick定时器,是一个简单的定时器,对于CM3,CM4内核芯片,都有- Systick定时器. Systick定时器常用来做延时,或者实时系统的心跳时钟.这样 ...

  8. [STM32F1]STM32F103滴答定时器定时不准?)

    STM32F103滴答定时器定时不准?       前几天调了1块F103ZET6的开发板,用了个系统定时器,感觉不准,最终找到原因是因为选错了时钟源. 今天来分享一下也算是给大家以后出现问题做个参考 ...

  9. hal库选择滴答时钟函数_stm32h7“理解hal库框架”

    1.按照初始化流程调用的hal库文件 完成初始化工作需要调用到的hal库文件,如下表 序号功能调用hal库文件 1Module Selection(模块选择) Oscillator Values ad ...

最新文章

  1. 谈谈近况,谈谈自由职业,谈谈金饭碗
  2. 来客推开源商城与你浅析:B2B2C多商户商城系统
  3. 解决 android 高低版本 webView 里内容 自适应屏幕的终极方法
  4. net use 命令集合详解
  5. JavaScript技巧
  6. shiro执行多个过滤器_Shiro 实战(四) - 过滤器机制
  7. js高级学习笔记(b站尚硅谷)-13-作用域链
  8. XPS Viewer 无法设置权限账户 - 无法激活此计算机上的任何权限管理账户
  9. java——编程案例
  10. 【烈日炎炎战后端】JAVA多线程(11.2万字)
  11. SDS 2.0:能否让高端存储服“软”?
  12. 修改this指向的方法
  13. 12V转3.3V稳压芯片
  14. 什么是API接口?给大家举例说明
  15. 通俗易懂理解几何光学(四)光学系统中的光阑与光束限制
  16. 2021.05.15智能风控峰会之流量反作弊论坛-论坛笔记
  17. scala 环境搭建 变量 值 数据类型 元组 表达式块 语句 函数 柯里化 集合 面向对象 隐式转换
  18. make[2]: *** [/home/nnnn/calibration/devel/lib/libcalibrationtoolkit.so] Error 1
  19. Leapfrog Triejoin:最坏情况下的最优连接算法
  20. C++中int a和int a的区别

热门文章

  1. 情感分析论文阅读之《Aspect Level Sentiment Classification with Deep Memory Network》
  2. 如何查找自己的微信公众号主页并复制链接
  3. 拉卡拉智能POS的应用前景及技术方案盘点
  4. 扁平化图标!让total commander跟上时代潮流!
  5. nodejs项目实例拼车租车平台
  6. 上线11年公众号广告大变天!最新政策解读|西瓜数据
  7. 三网融合音视频新的机遇
  8. 关于编程与数学的名言金句——字字珠玑
  9. Redis 数据类型与使用命令大全以及Java使用
  10. caffe 训练手写字体HWDB1.1trn_gnt.zip HWDB1.1tst_gnt.zip并测试完整超详尽攻略