STM32F4xx开发学习_SysTick

SysTick系统定时器

SysTick属于CM4内核外设,有关寄存器的定义和部分库函数都在core_cm4.h这个头文件中实现,可用于操作系统,提供必要的时钟节拍

SysTick简介

SysTick是一个 24 位向下定时器,属于CM4内核中的一个外设,内嵌在NVIC中。当重装载数值寄存器的值递减到0时,SysTick产生一次中断

SysTick寄存器

SysTick有四个寄存器,在使用SysTick产生定时的时候,只需要配置前三个寄存器,最后一个校准寄存器不需要使用。
SysTick_寄存器
core_cm4.h中给出了四个寄存器定义

/** \brief  Structure type to access the System Timer (SysTick).
 */
typedef struct
{
  __IO uint32_t CTRL;                    /*!< Offset: 0x000 (R/W)  SysTick Control and Status Register */
  __IO uint32_t LOAD;                    /*!< Offset: 0x004 (R/W)  SysTick Reload Value Register       */
  __IO uint32_t VAL;                     /*!< Offset: 0x008 (R/W)  SysTick Current Value Register      */
  __I  uint32_t CALIB;                   /*!< Offset: 0x00C (R/ )  SysTick Calibration Register        */
} SysTick_Type;
  • 控制及状态寄存器(STK_CTRL)
    STK_CTRL
    • Bit 16: SysTick计到0时,该位为1 根据此位判断是否计数到0
    • Bit 2: 时钟源选择位,0-》AHB/8,1-》AHB
    • Bit 1: SysTick异常中断请求使能,0-》计数到0没有产生异常请求,1-》计数到0产生异常请求
    • Bit 0: SysTick使能位,1-》使能,0-》失能
  • 重装载数值寄存器(STK_LOAD)
    STK_LOAD
    • Bit [23:0]: 重加载值,计数到0时加载到STK_VAL寄存器中作起始值,可以是 0x00000001-0x00FFFFFF 范围内的任何值
  • 当前数值寄存器(STK_VAL)
    STK_VAL
    • Bit [23:0]: 当前计数值,写操作会使当前值清0,同时清除COUNTFLAG标志
  • 校准数值寄存器(STK_CALIB)
    STK_CALIB
    该寄存器只读,较少用到。

SysTick中断时间计算

这里将AHB时钟(168MHz)配置为时钟源,计数一次的时间 T D E C = 1 C L K A H B T_{DEC} = \frac{1}{CLK_{AHB}} TDEC=CLKAHB1,当重装载寄存器中的值 V A L L O A D VAL_{LOAD} VALLOAD减到0时产生中断,那么中断一次的时间 T I N T = V A L L O A D × T D E C = V A L L O A D C L K A H B T_{INT} = VAL_{LOAD} \times T_{DEC}=\frac{VAL_{LOAD}}{CLK_{AHB}} TINT=VALLOAD×TDEC=CLKAHBVALLOAD

SysTick定时器函数

SysTick四个寄存器的配置,core_cm4.h下的SysTick_Config函数中已经写好了,如下

/** \brief  System Tick Configuration

    The function initializes the System Timer and its interrupt, and starts the System Tick Timer.
    Counter is in free running mode to generate periodic interrupts.
    \param [in]  ticks  Number of ticks between two interrupts.
    \return          0  Function succeeded.
    \return          1  Function failed.
    \note     When the variable <b>__Vendor_SysTickConfig</b> is set to 1, then the
    function <b>SysTick_Config</b> is not included. In this case, the file <b><i>device</i>.h</b>
    must contain a vendor-specific implementation of this function.
 */
__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)
{
  if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) { return (1UL); }    /* 重装载值超出范围,返回配置失败标志位 */
  SysTick->LOAD  = (uint32_t)(ticks - 1UL);                         /* 设置重装载寄存器 */
  NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* 设置中断优先级 */
  SysTick->VAL   = 0UL;                                             /* 清除当前计数值 */
  SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |						/* 设置时钟源AHB */
                   SysTick_CTRL_TICKINT_Msk   |						/* 使能中断 */
                   SysTick_CTRL_ENABLE_Msk;                         /* 使能定时器 */
  return (0UL);                                                     /* 返回成功配置标志位 */
}

SysTick定时器函数主要用到两个函数

  • SysTick_Config(uint32_t ticks)
    配置SysTick
  • SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource)
    配置时钟源

代码如下

#include "stm32f4xx.h" 
static u32 fac_us;
static u32 fac_ms;
/*配置SysTick时钟源*/
void Delay_Init()
{
	SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);//AHB时钟作时钟源
	fac_us = SystemCoreClock / 1000000;				//将fac_us设置为168,在168MHz时钟下即为1us
	fac_ms = fac_us * 1000;							//将fac_ms设置为168000,在168MHz时钟下即为1ms
}
/*延迟微秒计数*/
void Delay_us(u32 xus)
{
	SysTick->LOAD = xus * fac_us;					//计数xus微秒
	SysTick->VAL |= 0x00;							//清除当前计数值
	SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;		//开启定时器
	while(!(SysTick->CTRL & 0x00010000));			//判断标志位
	SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;		//关闭定时器
	SysTick->VAL |= 0x00;							//清除当前计数值
}
/*延迟豪秒计数*/
void Delay_ms(u32 xms)
{
	while(xms--) Delay_us(1000);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/599616.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OpenCV 入门(四)—— 车牌号识别

OpenCV 入门系列&#xff1a; OpenCV 入门&#xff08;一&#xff09;—— OpenCV 基础 OpenCV 入门&#xff08;二&#xff09;—— 车牌定位 OpenCV 入门&#xff08;三&#xff09;—— 车牌筛选 OpenCV 入门&#xff08;四&#xff09;—— 车牌号识别 OpenCV 入门&#xf…

并发控制互斥笔记

整理总结自蒋炎岩老师的b站课程&#xff0c;https://jyywiki.cn/OS/2022/index.html 多处理器系统中数据的一致性和互斥访问 所有的CPU的一级缓存都是连着的&#xff0c;如果是多个CPU的话&#xff0c;用在内存中放置标志位&#xff0c;来保证对当前内容的原子性读取&#xff0…

跟TED演讲学英文:4 pillars of college success in science by Freeman Hrabowski

4 pillars of college success in science Link: https://www.ted.com/talks/freeman_hrabowski_4_pillars_of_college_success_in_science Speaker: Freeman Hrabowski Date: February 2013 文章目录 4 pillars of college success in scienceIntroductionVocabularyTranscr…

嵌入式学习——C语言基础——day15

1. 段错误调试 1.1 打印法 在可能出现错误的位置加入打印,前一句能够打印出来,后一句打印不出来,问题就可以定位到两次打印中间的代码 1.2 gbd调试法 1. 编译代码时加入-g选项 gcc filename.c -g 2. 使用gdb调试生成的代码 gdb a.out 3. gdb调试命令 l 查看…

mysql优化面试总结

mysql优化 和 mysql优化之索引 两篇文章有大量的实验性的内容&#xff0c;我暂时没时间理解&#xff0c;把八股部分总结到这篇文章中&#xff0c;方便记忆 我们为什么要对sql进行优化 我们开发项目上线初期&#xff0c;由于业务数据量相对较少&#xff0c;一些SQL的执行效率对…

实现同一份数据的各种镜像

一个数据集通过某个轴&#xff08;通常是垂直或水平轴&#xff09;的镜像对称。这可以通过简单的数学运算来实现。 如果想要通过一块数据生成四份&#xff0c;可以通过以下步骤&#xff1a; 下面是一个简单的示例&#xff0c;展示了如何通过垂直轴&#xff08;左右对称&#…

HCIP的学习(13)

第五章&#xff0c;重发布和路由策略 重发布 ​ 在路由协议的边界设备上&#xff0c;将某一种路由协议的路由信息引入到另一种路由协议中&#xff0c;这个操作被称为路由引入或者路由重分发。----技术本质为重发布。 条件 必须存在ASBR设备&#xff08;路由边界设备&#x…

VMware虚拟机提示内存不足

VMware虚拟机&#xff0c;k8s集群搭建内存不足的问题 疑问&#xff1a;我的电脑是8G8G双通道的内存&#xff0c;当我在搭建k8s集群时给master-2G内存&#xff0c;node1-3G内存&#xff0c;node2-3G内存&#xff1b; 当依次打开虚拟机到node2时VM提示“物理内存不足&#xff0c;…

Python-100-Days: Day11 Files and Exception

1.读取csv文件 读取文本文件时&#xff0c;需要在使用open函数时指定好带路径的文件名&#xff08;可以使用相对路径或绝对路径&#xff09;并将文件模式设置为r&#xff08;如果不指定&#xff0c;默认值也是r&#xff09;&#xff0c;然后通过encoding参数指定编码&#xf…

PTA|小字辈

题目 本题给定一个庞大家族的家谱&#xff0c;要请你给出最小一辈的名单。 输入格式&#xff1a; 输入在第一行给出家族人口总数 N&#xff08;不超过 100 000 的正整数&#xff09; —— 简单起见&#xff0c;我们把家族成员从 1 到 N 编号。随后第二行给出 N 个编号&#x…

JAVA语言VUE2+Spring boot+MySQL开发的智慧校园系统源码(电子班牌可人脸识别)Saas 模式

技术栈 1. 开发语言&#xff1a;JAVA 2. 数据库&#xff1a;MySQL 3. 后端框架&#xff1a;Spring boot 4. 前端框架&#xff1a;VUE2 5. 电子班牌&#xff1a; Android 7.1 6. 小程序&#xff1a;原生开发 7. 多学校Saas 模式 电子班牌是一款智慧校园管理工具&#xf…

Java实现手机短信验证码(互亿无线)

互亿无线 互亿无线是一家提供电信类增值服务插件以及其他相关插件的公司&#xff0c;是中国移动、中国联通、中国电信三大运营商的战略合作伙伴与工信部认定的电信增值业务服务商。公司旗下运营三大业务平台&#xff1a;数字奖励营销活动平台、应用短信平台、营销短信平台。 官…

上网行为审计软件分享|三款热门上网行为监控软件推荐

“小王&#xff0c;去找一款软件给我们公司安上&#xff0c;你去搜上网行为审计软件&#xff0c;看看买哪家合适” 这是某公司老板交给助理的一项工作&#xff0c;原话是这样的。 可见其实这类软件大多是人还是比较陌生的。 上网行为审计软件顾名思义就是对上网行为也就是电…

04-22 周日 阿里云-瑶光上部署FastBuild过程(配置TLS、自定义辅助命令)

04-22 周日 阿里云-瑶光上部署FastBuild过程 时间版本修改人描述2024年4月22日14:18:59V0.1宋全恒新建文档2024年4月23日20:41:26V1.0宋全恒完成了基本流程的添加 简介 前提 准备两台服务&#xff0c;一台部署Docker&#xff0c;一台部署FastBuild的镜像容器服务所述的Docke…

落地企业业财一体化的关键能力和路径

在财务数字化的改革过程中&#xff0c;财务部门已经通过会计电算化、ERP、财务共享&#xff0c;基本实现业务财务流程拉通和财务运营效率的提升&#xff0c;接下来面临问题是如何通过构建业财一体化体系&#xff0c;进一步挖掘数字利用价值&#xff0c;为管理决策赋能。 但在业…

LLM应用-prompt提示:让大模型总结生成Mermaid流程图;充当角色输出

1、prompt提示让大模型总结生成Mermaid流程图 生成内容、总结文章让大模型Mermaid流程图展示&#xff1a; mermaid 美人鱼, 是一个类似 markdown&#xff0c;用文本语法来描述文档图形(流程图、 时序图、甘特图)的工具&#xff0c;您可以在文档中嵌入一段 mermaid 文本来生成 …

国内如何下载TikTOK,手机刷机教程

最近很多玩家都来问怎么刷机&#xff1f;手机环境怎么搭建&#xff1f;这里给大家整理了苹果IOS刷机教程 1.iOS下载教程 &#xff1a; 步骤一&#xff1a;手机调试 苹果手机系统配置推荐&#xff1a;iPhone6S以上&#xff0c;16G。 注意&#xff1a;如果是选择购入二手手机…

Devin AI程序员是如何设计出来的

背景 Devin是一个能够执行复杂工程任务并与用户在软件开发项目上积极合作的自主人工智能软件工程师&#xff0c;它擅长planning、tool use、reflecting&#xff0c;碾压大部分初级开发。 设计思路 一、界面设计 先来看 Devin 的界面&#xff0c;左边是对话框&#xff0c;记…

C++笔记之调用PCL库显示PCD文件的点云

C++笔记之调用PCL库显示PCD文件的点云 —— 2024-05-05 杭州 code review! 文章目录 C++笔记之调用PCL库显示PCD文件的点云1.运行2.点云pcd文件github下载地址2.main.cpp3.CMakeLists.txt1.运行 2.点云pcd文件github下载地址 https://github.com/luolaihua/point-cloud-data-…