【致敬未来的攻城狮计划】— 连续打卡第十六天:FSP固件库系统定时器(滴答定时器SysTick)每2秒LED闪烁一次

这篇具有很好参考价值的文章主要介绍了【致敬未来的攻城狮计划】— 连续打卡第十六天:FSP固件库系统定时器(滴答定时器SysTick)每2秒LED闪烁一次。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

系列文章目录

1.连续打卡第一天:提前对CPK_RA2E1是瑞萨RA系列开发板的初体验,了解一下

2.开发环境的选择和调试(从零开始,加油)

3.欲速则不达,今天是对RA2E1 基础知识的补充学习。

4.e2 studio 使用教程

5.Keil配置使用(使用 RASC 生成 Keil 工程)

6.Keil配置使用(使用 RASC 生成 Keil 工程)

7.(电脑重装系统)学习RA产品家族选型手册

8.问题解决、学习RA寄存器、用寄存器的方式点亮第一个LED灯。

9.继续学习RA寄存器

10.FSP固件库开发及FSP配置详解。

11.FSP固件库开发点亮第一个灯。

12.FSP固件库开发按键输入检测控制LED灯闪烁

13.FSP固件库开发启动文件详解

14.FSP固件库开发延时函数(时钟详解)

15.FSP固件库外部中断处理编程(外部中断检测按键控制LED闪烁)


文章目录

系列文章目录

前言

一、SysTick系统定时器是什么?

二、RA2E1系统定时器寄存器

1.寄存器解释

2.定时计算解释

三、实操:SysTick系统定时器定时2s  LED闪烁

1.新建工程    RA_SysTick

2.程序编写

总结

朦胧月色


前言

        继外部中断之后,我们可以根据外部中断来控制检测按键输入的高低电平,然后进入回调函数从而控制LED闪烁,接上次我们继续讲解最基础的定时器,滴答定时器(SysTick系统定时器)。


一、SysTick系统定时器是什么?

       SysTick系统定时器是一种硬件组件,它产生对处理器的周期性中断。SysTick定时器是存在于ARM Cortex-M处理器(包括RA2E1)上的系统定时器。

        SysTick定时器是一个24位下行计数器,可用于产生周期性中断。可以将其配置为以固定间隔生成中断,这可以用于诸如调度、计时和生成延迟之类的任务。

        SysTick是属于CM33内核的外设,所以所有基于CM33内核的单片机都具有这个系统定时器, 使得软件在CM33单片机中可以很容易的移植。系统定时器一般用于操作系统,用于产生时基,维持操作系统的心跳。

        SysTick是一个24bit的向下递减的计数器,计数器每计数一次的时间为1/SYSCLK,一般我们设置系统时钟SYSCLK等于200MHz。 当重装载数值寄存器的值递减到0的时候,系统定时器就产生一次中断,以此循环。


二、RA2E1系统定时器寄存器

1.寄存器解释

寄存器名称

寄存器描述

CTRL

SysTick控制及状态寄存器

LOAD

SysTick重装载数值寄存器

VAL

SysTick当前数值寄存器

CALIB

SysTick校准数值寄存器

位段

名称

类型

复位值

描述

16

COUNTFLAG

R/W

0

如果在上次读取本寄存器后,

SysTick 已经计到了 0,则该位为 1。

2

CLKSOURCE

R/W

0

时钟源选择位为0时:时钟源为LOCO=32768Hz;

时钟源选择位为1时:时钟源为处理器时钟ICLK=200MHz

1

TICKINT

R/W

0

1:SysTick递减计数到 0时产生 SysTick异常请求; 0:计数到 0 时无动作。 也可以通过读取COUNTFLAG标志位来确定计数器是否递减到0。

0

ENABLE

R/W

0

SysTick 定时器的使能位

重载寄存器:

位段

名称

类型

复位值

描述

23:0

RELOAD

R/W

0

当倒数计数至零时,将被重加载的值

当前值寄存器:

位段

名称

类型

复位值

描述

23:0

CURRENT

R/W

0

读取时返回当前倒计数的值,写它则使之清零,

同时还会清除在SysTick控制及状态寄存器中的

COUNTFLAG 标志

校准时间寄存器:

位段

名称

类型

复位值

描述

31

NOREF

R

0

NOREF 标志. 读取时值为0。用于指示已经提

供了一个独立的参考时钟,本时钟频率为HCLK/8

30

SKEW

R

1

读取时值为1.因为TENMS是未知的,1ms的校准值

未知。这会影响SysTick作为一个软件实时时钟的稳定性


2.定时计算解释

        SysTick定时器的计数器是向下递减计数的,计数一次的时间TDEC=1/CLKICLK, 当重装载寄存器中的值VALUELOAD减到0的时候,产生中断,可知中断一次的时间T INT=VALUELOAD * TDEC= VALUE LOAD/CLKICLK,其中CLKICLK =200MHZ。如果设置VALUELOAD为200,那中断一次的时间 TINT=200/200M=1us。 

IT_Period = SystemCoreClock / IT_frequency; //IT_frequency为中断的频率(单位为Hz)
SysTick_Config(IT_Period) //IT_Period为中断一次的时间(单位为时钟节拍数)

SysTick_Config()的形参我们配置为IT_Period。例如,当IT_frequency为1000,IT_Period = SystemCoreClock / IT_frequency= 200M/1000=200K, 从刚刚分析我们知道这个形参的值最终是写到重装载寄存器LOAD中的, 从而可知我们现在把SysTick定时器中断一次的时间TINT=200k/200M=1ms。


三、实操:SysTick系统定时器定时2s  LED闪烁

1.新建工程    RA_SysTick

【致敬未来的攻城狮计划】— 连续打卡第十六天:FSP固件库系统定时器(滴答定时器SysTick)每2秒LED闪烁一次


2.程序编写

#include "hal_data.h"

FSP_CPP_HEADER
void R_BSP_WarmStart(bsp_warm_start_event_t event);
FSP_CPP_FOOTER


typedef enum
{
    SYS_DELAY_UNITS_SECONDS      = 200000000, ///< Requested delay amount is in seconds
    SYS_DELAY_UNITS_MILLISECONDS = 200000,    ///< Requested delay amount is in milliseconds
    SYS_DELAY_UNITS_MICROSECONDS = 200        ///< Requested delay amount is in microseconds
} sys_delay_units_t;


/* 定义变量 */
uint32_t IT_Period;
uint32_t IT_nums;

/**
* @brief  延时程序
* @param  delay: 延时的单位时间
* @param  unit: 延时的单位
* @retval 无
*/

void SysTick_Delay(uint32_t delay, sys_delay_units_t unit)
{
    uint32_t SumTime = delay * unit; //计算总延时时间(单位为时钟节拍数)
    IT_nums = SumTime/IT_Period;
    while (IT_nums != 0);
}


/**
* @brief  SysTick的中断服务函数
* @param  无
* @retval 无
*/
extern void SysTick_Handler(void); //需要先extern声明一下避免编译器警告
void SysTick_Handler(void)
{
	IT_nums++;
    if (IT_nums == 2000)
    {
		 IT_nums = 0;
	     R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_05_PIN_01, BSP_IO_LEVEL_HIGH); //LED1亮
    }
	else
	{
		 R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_05_PIN_01, BSP_IO_LEVEL_LOW); //LED1亮
		
	}
}

 /**
  * @brief  启动系统滴答计时器 SysTick
  * @param  IT_frequency: 滴答计时器每秒的中断次数
  * @retval 无
  */
 void SysTick_Init(uint32_t IT_frequency)
 {
     /* SystemCoreClock在这里默认为200M
      * SystemCoreClock / 1000    1ms中断一次
      * SystemCoreClock / 100000  10us中断一次
      * SystemCoreClock / 1000000 1us中断一次
      */
     IT_Period = SystemCoreClock / IT_frequency;
     uint32_t err = SysTick_Config (IT_Period);
     assert(err==0); //capture error
 }


/*******************************************************************************************************************//**
 * main() is generated by the RA Configuration editor and is used to generate threads if an RTOS is used.  This function
 * is called by main() when no RTOS is used.
 **********************************************************************************************************************/
void hal_entry(void)   //相当于主函数  函数最终执行的地方
{
	
	R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_05_PIN_02, BSP_IO_LEVEL_LOW); //LED1亮
	R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_05_PIN_01, BSP_IO_LEVEL_LOW); //LED1亮
	
    R_BSP_PinAccessEnable ();  //启用对PFS寄存器的访问,因为后面写IO口都用BSP内联函数
	SysTick_Init(1000);//初始化系统时钟
	while(1){
	

	}
	
	
	
	
    /* TODO: add your own code here */

#if BSP_TZ_SECURE_BUILD
    /* Enter non-secure code */
    R_BSP_NonSecureEnter();
#endif
}

 视频效果:

RA2E1 SysTick定时器 定时2s led闪一次


总结

        

        RA2E1是一款由瑞萨电子推出的微控制器系列,其内部集成了多个定时器模块,包括SysTick定时器、GPT定时器、WDT定时器等。这些定时器模块可以用来实现各种定时器功能,例如周期性中断、延时等。

        其中,SysTick定时器是一个24位计数器,可以用来实现基于时间的定时器。SysTick定时器可以通过设置重载值和使能定时器来实现定时器功能。每当SysTick计数器减到0时,就会触发SysTick中断,可以在中断处理函数中实现定时器功能。SysTick定时器的时钟源可以是系统时钟或者处理器时钟。

        除了SysTick定时器,RA2E1还集成了多个通用定时器(GPT),每个通用定时器包含多个定时器通道,可以用来实现多路定时器。通用定时器可以用于计时、延时、PWM等应用场景。此外,RA2E1还集成了看门狗定时器(WDT),可以用来实现系统监控和复位功能。

总的来说,RA2E1提供了多个定时器模块,可以满足各种应用场景下的定时器需求。开发者可以根据具体的应用需求选择合适的定时器模块,并使用相应的定时器API进行开发。文章来源地址https://www.toymoban.com/news/detail-429632.html


朦胧月色

到了这里,关于【致敬未来的攻城狮计划】— 连续打卡第十六天:FSP固件库系统定时器(滴答定时器SysTick)每2秒LED闪烁一次的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [攻城狮计划]RT-Thread—详解UART设备(基于RA2E1)

    🚀🚀开启攻城狮的成长之旅!这是我参与的由 CSDN博客专家 架构师李肯和 瑞萨MCU 联合发起的「 致敬未来的攻城狮计划 」的第4天,点击查看活动计划详情 🚀🚀首先非常感谢李老师能给我参加这个计划的机会,让我有机会接触到许多的开发板,同时也感谢瑞萨官方 为我们

    2024年02月13日
    浏览(80)
  • Android攻城狮学鸿蒙-配置

    鸿蒙中的config.json应该类似于Android开发中Manifest.xml,可以进行页面的配置。根据顺序,会识别启动应用的时候,要打开哪个界面。 他人的学习文章连接,请点击 一个 HarmonyOS 应用可以包含多个 Ability,Ability 可以分为: Feature Ability(简称 FA),有界面,也被称为元程序 Parti

    2024年02月07日
    浏览(33)
  • Android攻城狮学鸿蒙 -- 点击事件

     具体参考:华为官网学习地址 对于一个按钮设置点击事件,跳转页面。但是onclick中,如果pages前边加上“/”,就没法跳转。但是开发工具加上“/”才会给出提示。不知道是不是开发工具的bug。(也是因为自己对于路径这些的使用规则不太清楚。)代码如下: 上述是方式一

    2024年02月07日
    浏览(42)
  • 开发攻城狮必备的Linux虚拟机搭建指南|

    hi,我是阿笠! 这篇文章主要面对的是不常搭建Linux操作系统环境的开发同学,文中介绍了基本操作步骤并且提供了相关云盘资源,都是为了节约时间! 因为从我自身来讲,作为一名后端开发,经常需要练习一些实操技术,比如Redis集群、LVS、Zookeeper等集群环境的搭建,虽然

    2024年02月02日
    浏览(37)
  • CV攻城狮入门VIT(vision transformer)之旅——VIT原理详解篇

    🍊作者简介:秃头小苏,致力于用最通俗的语言描述问题 🍊往期回顾:CV攻城狮入门VIT(vision transformer)之旅——近年超火的Transformer你再不了解就晚了! 🍊近期目标:写好专栏的每一篇文章 🍊支持小苏:点赞👍🏼、收藏⭐、留言📩   ​  在上一篇,我已经详细为大家

    2024年02月02日
    浏览(55)
  • 第3章 业务连续性计划

    业务连续性计划(Business Continuity Plan, BCP): 用于在紧急情况下维持业务的连续运营。目标是通过策略、程序、流程将潜在的破坏性事件对业务的影响降至最低。 组织中的每个人, 都应接收业务连续性计划的基本意识培训。 具有特定角色的人员 ,例如急救人员和高级管理人员

    2024年02月08日
    浏览(37)
  • 新星计划打卡学习:VUE3引入element-plus

    目录 1、安装element-plus 2、安装按需导入插件 3、修改配置文件 4、添加页面内容 5、保存并重启项目 官网说要想使用element-plus需要先进行安装,并给出了三种安装方式,我选择了第三种。  报错了:  解决的办法: 原因是没有安装pnpm,看此博主文章进行解决 https://blog.csdn.n

    2024年02月16日
    浏览(66)
  • 十五天MySQL学习计划(运维篇-完结)读写分离-第十五天

    1.读写分离 ​ 读写分离,简单的说是把对数据库的读和写操作分开,以对应不同的数据库服务器。主服务器提供写操作,从数据库提供读操作,这样能有效的减轻单台数据库的压力。 ​ 通过mycat即可轻易实现上述功能,不仅可以支持mysql,也可以支持oracle和sql server。 2.一主

    2024年02月05日
    浏览(38)
  • 软考A计划-真题-分类精讲汇总-第十四章(数据流图)

    点击跳转专栏=Unity3D特效百例 点击跳转专栏=案例项目实战源码 点击跳转专栏=游戏脚本-辅助自动化 点击跳转专栏=Android控件全解手册 点击跳转专栏=Scratch编程案例 专注于 Android/Unity 和各种游戏开发技巧,以及 各种资源分享 (网站、工具、素材、源码、游戏等) 有什么需要

    2024年02月05日
    浏览(87)
  • 遇见数据经济的未来,「BSV区块链高校人才培养计划」启动!

    很早以前,人工智能(AI)、自动驾驶、物联家居等创新应用的讨论就已经开始,数据的爆发性增长势不可挡。数据经济渗透到了我们生活的方方面面,但是,传统的基础设施却难以承载数据的指数性增长——解决这种“极端量级数据增长”的方法之一,就是利用区块链技术

    2024年02月02日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包