STM32菜鸟成长记录---系统滴答定时器(systick)应用

2023-10-31

1.systick介绍

     Systick就是一个定时器而已,只是它放在了NVIC中,主要的目的是为了给操作系统提供一个硬件上的中断(号称滴答中断)。滴答中断?这里来简单地解释一下。操作系统进行运转的时候,也会有“心跳”。它会根据“心跳”的节拍来工作,把整个时间段分成很多小小的时间片,每个任务每次只能运行一个“时间片”的时间长度就得退出给别的任务运行,这样可以确保任何一个任务都不会霸占整个系统不放。或者把每个定时器周期的某个时间范围赐予特定的任务等,还有操作系统提供的各种定时功能,都与这个滴答定时器有关。因此,需要一个定时器来产生周期性的中断,而且最好还让用户程序不能随意访问它的寄存器,以维持操作系统“心跳”的节律。 只要不把它在SysTick控制及状态寄存器中的使能位清除,就永不停息。

     知道systick在系统中的地位后,我们来了解systick的实现。这里只是举例说明systick的使用。它有四个寄存器,笔者把它列出来:

    SysTick->CTRL,        --控制和状态寄存器

    SysTick->LOAD,        --重装载寄存器

    SysTick->VAL,          --当前值寄存器

   SysTick->CALIB,        --校准值寄存器    

下图有他们的分别描述:     下图引用地址:http://blog.csdn.net/marike1314/article/details/5673684

2.systick编程

    现在我们想通过Systick定时器做一个精确的延迟函数,比如让LED精确延迟1秒钟闪亮一次。

    思路:利用systick定时器为递减计数器,设定初值并使能它后,它会每个1系统时钟周期计数器减,计数到 0时,SysTick计数器自动重装初值并继续计数,同时触发中断。

那么每次计数器减到0,时间经过了:系统时钟周期 *计数器初值。我们使用72M作为系统时钟,那么每次计数器减1所用的时间是1/72M,计数器的初值如果是72000,那么每次计数器减到0,时间经过(1/72M)*72000= 0.001,即1ms(简单理解:用72M的时钟频率,即1s计数72M=72000000次,那1ms计数72000次,所以计数值为72000 

 

首先,我们需要有一个72Msystick系统时钟,那么,使用下面这个时钟OK 

    SystemInit();

    这个函数可以让主频运行到72M。可以把它作为systick的时钟源。

    接着开始配置systick,实际上配置systick的严格过程如下:

    1、调用SysTick_CounterCmd()  

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32菜鸟成长记录---系统滴答定时器(systick)应用 的相关文章

  • 小型 ARM 微控制器的 RTOS 内核之间的可量化差异 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 有许多不同的 RTOS 可用于微控制器 我专门寻找支持 ARM Cortex M 处理器的 RTOS 另外 我对闭源解决方案不感兴趣 试图从网站
  • RAM 存储二进制数和汇编语言的冒泡排序

    我必须使用 ARM v7 执行一个例程 在 RAM 内存中存储 10 个二进制数 然后使用冒泡排序对这些数字从高到低进行排序 我应该如何开始 func bubbleSortAscendingU32 ldr r3 r0 4 mov r1 9
  • 处理程序/可运行延迟有时会产生不同步的事件

    当尝试学习如何创建延迟时 我研究并发现主要答案是使用 Handler Runnable postDelayed Handler handler new Handler final Runnable r new Runnable public
  • C 嵌入式应用程序中 time() 函数的问题

    我在用time 在 ARM 微控制器上 处理器一到达此函数就会重新启动 奇怪的是 当我处于调试模式时 代码运行得很好 但一旦我想将其应用到独立模式 我就会遇到重置 我是否忽略了什么 这个功能有替代品吗 代码部分是这样的 include
  • 为 ARM 交叉编译 zlib

    我尝试为arm poky linux gnueabi交叉编译zlib 但启动 make 时出现错误 zlib 1 2 11 AR HOST ar CC HOST gcc RANLIB HOST ranlib configure prefix
  • 尝试使用 qemu-arm 运行arm二进制文件时如何解决“加载共享库时出错”?

    我正在运行 Linux Mint 14 并安装了 qemu qemu user 和 gnueabi 工具链 我编译了 test carm linux gnueabi gcc test c o test 当我尝试跑步时qemu arm usr
  • C#等待串口数据

    我试图通过 C 应用程序从指纹扫描仪获取数据 但在指纹发送之前 我的整个代码都会执行 我尝试使用延迟功能System Threading Thread Sleep 1000 因此它可以在下一步执行之前获取数据 但这一切似乎都是徒劳的 任何人
  • ARM + gcc:不要使用一大块 .rodata 部分

    我想使用 gcc 编译一个程序 并针对 ARM 处理器进行链接时间优化 当我在没有 LTO 的情况下编译时 系统会被编译 当我启用 LTO 时 使用 flto 我收到以下汇编错误 错误 无效的文字常量 池需要更近 环顾网络 我发现这与我系统
  • Android中每10秒显示一次数据

    我必须每 10 秒后显示一些数据 谁能告诉我该怎么做 您还可以使用另一种方法按特定时间间隔更新 UI 以上两个选项都是正确的 但根据具体情况 您可以使用替代方法在特定时间间隔更新 UI 首先为 Handler 声明一个全局变量 用于从 Th
  • ARM 调用约定是否允许函数不将 LR 存储到堆栈中?

    正如标题所示 我在理解 ARM 架构的调用约定时遇到问题 特别是 我仍然很难知道当你调用子程序时 LR 寄存器会发生什么 我认为 当您进入子程序时 处理 LR 寄存器的最明显 最安全的方法是将其存储到堆栈中 但该行为没有出现在文档中 因此我
  • 了解 U-Boot 内存占用

    我不明白加载 U Boot 时 RAM 中发生了什么 我正在开发 Xilinx Zynq ZC702 评估套件 并尝试使用 U Boot 在其上加载 Linux 内核 于是我使用Xilinx工具Vivado和SDK生成了一个BOOT bin
  • saber sd 如何在没有 SPL 的情况下直接从 uboot 启动

    sabre sd 基于 imx 6 最大内部 RAM 约为 150Kb 然而 uboot 足够大 可以容纳在这个空间中 在这个场景中事情是如何进行的 https community freescale com docs DOC 95015
  • iPhone 3GS 上的 ARM 与 Thumb 性能比较,非浮点代码

    我想知道是否有人有关于 iPhone 3GS 上 ARM 与 Thumb 代码性能的硬性数据 特别是对于非浮点 VFP 或 NEON 代码 我知道 Thumb 模式下的浮点性能问题 更大的 ARM 指令的额外代码大小是否会在某个时刻成为性能
  • 架构armv7的重复符号

    尝试在我现有的应用程序中使用 Layar SDK 时出现以下错误 我该如何解决这个问题 Ld Users pnawale Library Developer Xcode DerivedData hub afxxzaqisdfliwbzxbi
  • 如何获取结构体中任意成员的位位置

    如何获取结构体中任意成员的位位置 在示例中 gt typedef struct BitExamStruct unsigned int v1 3 unsigned int v2 4 unsigned int v3 5 unsigned int
  • 设备树不匹配:.probe 从未被调用

    我无法理解设备树的工作原理 或者具体来说为什么该驱动程序无法初始化 这是在 android 版本 3 10 的 rockchip 供应商内核中 驱动程序 看门狗 rk29 wdt c 为了可读性而减少 static const struct
  • 交叉编译armv5,但它创建v7二进制文件

    我设法为arm926ej s创建了一个目标文件我在 qemu 上使用 Debian Arm arm linux gnueabi gcc 4 4 static O c mcpu arm926ej s hello c o hello root
  • aarch64 Linux 硬浮点或软浮点

    linux系统有arm64 有arm架构armv8 a 如何知道 Debian 运行的是硬浮动还是软浮动 符合 AAPCS64 GNU GCC for armv8仅提供硬浮动aarch64工具链 这与 armv7 a 的 GCC 不同 后者
  • AMQP延迟传递并防止重复消息

    我有一个会偶尔生成消息的系统 我只想每 5 分钟提交零条或一条消息 如果没有生成消息 队列消费者将不会处理任何内容 如果 5 分钟内生成一百条相同的消息 我只希望从队列中使用其中一条 我正在使用AMQP RabbitMQ 有没有办法在rab
  • 错误:-march= 开关的值错误

    我写了一个Makefile 但无法让它工作 我有一个选项应该选择编译到哪个处理器 然而 当我跑步时make从命令行它说 tandex tandex P 6860FX emulators nintendo sdks 3DS SDK HomeB

随机推荐

  • 【Matlab学习笔记】【编程实例】一(将两幅图像调整为相同的尺寸大小)

    一 问题的背景 很多时候我们想用处于不同时期或环境下的同一事物的图片做一个对比 用来形成对照 显示差别 由于不同的图片的尺寸可能不完全一致 要将两幅图片拼接到一起 首先要做的就是图片尺寸的统一 二 问题的解决方法和思路 1 读取作对比的两幅
  • 欠采样的精华内容

    1 采样频率高于信号最高频率的两倍 这种采样被称为过采样 2 采样频率低于信号最高频率的两倍 这种采样被称为欠采样 对基带信号进行欠采样是无法从采样信号中恢复出原始信号的 因此基带信号的采样都是过采样 对频带信号进行采样可以是过采样 也可以
  • Quartz框架简单使用

    从此处学习到的配置方法 http www oschina net question 200745 62107 最重要的一个配置文件
  • Unity 2D和3D射线检测

    2D射线检测 Canvas事件点击检测 返回光线投射结果 public List
  • Android 7.0 之后抓包 unknown 和证书无效的解决方案(无需改代码)

    背景 使用抓包软件 以 Charles 为例 抓取APP的 https 请求时 Android和Charles都正确安装了证书却出现抓包失败 报错 Client SSL handshake failed An unknown issue o
  • codeforces 1080 C. Masha and two friends

    题意 n m矩形 被人泼一次白漆 又被泼一次黑漆 问结果白黑数量 首先 xy交换一下 矩形变成左上 右下表示法 记录结果白记为num1 黑num2 泼之前黑白数量很好确定 矩形内黑白数量也很好确定 先减去2个矩形内黑白数量 记录矩形面积白a
  • js push(),pop(),unshift(),shift()的用法小结

    js中push pop unshift shift 的用法小结 1 push pop 和unshift shift 这两组同为对数组的操作 并且会改变数组的本身的长度及内容 不同的是 push pop 是从数组的尾部进行增减 unshift
  • python均值插补法填补缺失值_使用python+sklearn实现处理缺失值

    由于各种原因 许多真实世界中的数据集都包含缺失值 这些值通常被编码为空格 NaNs或其他占位符 然而 这些数据集与scikit learn估计器 estimators 不兼容 scikit learn估计器 estimators 假设数组中
  • 《计算机视觉技术与应用》-----第五章 边缘和轮廓

    系列文章目录 计算机视觉技术与应用 第二章 图像处理基础 计算机视觉技术与应用 第三章 图形用户界面 计算机视觉技术与应用 第四章 图像变换 计算机视觉技术与应用 第五章 边缘和轮廓 计算机视觉技术与应用 第六章 边缘和轮廓 计算机视觉技术
  • Python标准库之——time模块

    前言 继上一篇学完Python 我决定熬夜整理这篇总结 本篇总结一下Python中常用的time标准库用法 通过Demo程序来加深理解 目录 time模块 Demo实例 常用参数 struct time结构 format字符串 time模块
  • 《图说区块链》读书笔记

    数据层 描述区块链技术的物理形式 例如时间戳 哈希函数 网络层 实现区块链网络中节点的信息交换 共识层 让分散的节点针对区块数据的有效性达成共识 例如工作量证明 权益证明 股份授权 激励层 提供一定的激励机制 鼓励节点参与区块两的安全验证工
  • Kafka Eagle 安装与部署详解

    Kafka Eagle 安装与部署详解 在大数据领域中 Kafka 是一种高性能 分布式的消息队列系统 被广泛应用于实时数据流处理和日志收集等场景 而 Kafka Eagle 则是一款用于监控和管理 Kafka 集群的开源工具 它提供了丰富
  • transforms.Compose()类详解:串联多个transform操作

    torchvision是pytorch的一个图形库 它服务于PyTorch深度学习框架的 主要用来构建计算机视觉模型 torchvision transforms主要是用于常见的一些图形变换 以下是torchvision的构成 torchv
  • 如何做好App性能测试

    如何做好App性能测试 App性能测试和网站性能测试不一样 它分成客户端性能测试和服务器性能测试 下面我们详细来说明 1 客户端性能测试 一个App做的好不好 不仅仅只反应在功能上 被测的app在中低端机上的性能表现也很重要 比如 一个很好
  • JAVA安装与配置教程

    一 下载jdk 下载链接 https pan baidu com s 1Z6SJRcHCsMRMzV 3ole0dg 提取码 h42f 二 安装java 1 下一步 2 点击 更改 选择安装路径 建议在Java文件夹里创建两个文件夹 分别命
  • 计算机网络笔记(五):传输层

    文章目录 前言 多路复用和多路分用 UDP User Datagram Protocol RFC 768 可靠数据传输原理 流水线机制与滑动窗口协议 Go Back N GBN 协议 Selective Repeat SR 协议 TCP 协
  • 【js】删除数组中指定元素

    删除数组中指定的元素 export const removeArr function arr val let index arr indexOf val if index gt 1 arr splice index 1 return arr
  • varying是vs和Ps之间的shader传递变量

    正如uniform是shader和应用程序之间传递的变量 varying是shader之间传递的变量 比如 vs的输出 也就是Ps的输入
  • 简单理解css中的垂直居中和水平居中,即vertical-align和text-align属性

    前言 在很多情况下 我们要使用到内容的居中 这里的居中包括了垂直居中和水平居中 下面来浅谈一下 对于水平居中的属性text align和垂直居中属性vertical align的理解 1 text align 如果要实现水平居中 比如我们要
  • STM32菜鸟成长记录---系统滴答定时器(systick)应用

    1 systick介绍 Systick就是一个定时器而已 只是它放在了NVIC中 主要的目的是为了给操作系统提供一个硬件上的中断 号称滴答中断 滴答中断 这里来简单地解释一下 操作系统进行运转的时候 也会有 心跳 它会根据 心跳 的节拍来工