STM32F SysTick定时器

2023-10-29

  SysTick定时器:系统滴答定时器是一个非常基本倒计时定时器,用于在每隔一定的时间产生一个中断,即使是系统在睡眠模式下也能工作。
 它使得 OS 在各 CM3 器件之间的移植中不必修改系统定时器的代码,移植工作一下子容易多了,不用考虑最基本的时钟不一致的问题。

总结一下:SysTick_Handler()函数每1ms运行一次,运行时就调用TimingDelay_Decrement()函数,而这个函数又令变量TimingDelay减1

看相关配置 systick_config.c文件如下:
#include “stm32f4xx.h”
static __IO uint32_t TimingDelay;

void led_init(void)//LED初始化
{
GPIO_InitTypeDef GPIO_InitStructure;
/* Enable the GPIO_LED Clock /
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);
/
Configure the GPIO_LED pin */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8; //led IO 口
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //模式:输出
// GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
// GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉 ,硬件自带上拉电阻,故此处不需要软件上拉,若不屏蔽则 led 灯很暗
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //50M 翻转
GPIO_Init(GPIOE, &GPIO_InitStructure);
}

void TimingDelay_Decrement(void) //记得将此函数加入 stm32f4xx_it.c 文件中(第 143 行) ,并申明外部函数
{
if (TimingDelay != 0x00)
{
TimingDelay–;
}
}

void Delay(__IO uint32_t nTime)
{
TimingDelay = nTime;
while(TimingDelay != 0);
}

另外, 在 stm32f4xx_it.c 文件中, 需打开中断, 操作如下:
将stm32f4xx_it.c函数打开,并在 stm32f4xx_it.c 的前面申明 extern void TimingDelay_Decrement(void);
void SysTick_Handler(void)//Sys Tick滴答定时器中断函数
{
TimingDelay_Decrement(); // 本行程序原本是屏蔽了的,切记要打开
}

下面还有另外一个问题, Systick 究竟多长时间产生一次中断。
看 main.c 中的代码:
if (SysTick_Config(SystemCoreClock / 1000))
{
/* Capture error */
while (1);
}
我们可以猜测, 那个 1000 就是关键。 让我们把 1000 改成 100,重新编译再运行,结果是灯闪烁的速度慢了 10 倍,也就是Systick 变成了 10ms 中断一次。这样,我们就学会了怎么样来改变这个 Systick 。可是,总觉得这还有点不够,为什么会是这样呢?让我们把鼠标移到 SystemCoreClock 上去按下
F12 吧。这次跑到了 system_stm32f0xx.c 文件中去了, 这就是 User 组中的第 3 个文件。查看一下,原来符号: SystemCoreClock是一个变量,
它的值是 48000000, 也就是 48M , 这好像是个挺熟悉的数值,是什么呢?打开 STM32F051 芯片介绍的资料,原来在这儿, 48M 是该芯片运行的最高频率。
那么我们可以猜测:
( 1)在这个例子中,我们把芯片运行到了它的最高频率,即 48M
( 2) 48M 除 1000 就是 48 000,应该是将这个 48000 这个数放到了某个寄存器中,然后根据这个数来分频。也就是时钟
脉冲的频率是 48M , 然后每隔 48000 出来一个 Systick, 这样,这个 Systick 就是 1ms/次了。
讲到这里,似乎把 Systick 理解了,但其实还有更多的疑问,为什么这个芯片是运行在 48M ?既然是最高, 那肯定还有其他的值,如何设置?
好奇是人进步的阶梯,不过要是一直纠缠下去, 这一篇就没法结束了。

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

STM32F SysTick定时器 的相关文章

  • Linux系统下串口调试助手putty,cutecom,xgcom

    系统 linux mint 18 3 xfce 64bit 串口驱动 ch340 系统已自带 没有测试pl2302 尝试了几个linux下的串口调试助手 这里总结一下 由于使用的是USB转串口 CH340 所以在 dev 目录下面看到的串口
  • STM32F103的低功耗模式

    一 原理 STM32F103的低功耗模式有多种 常用的有STOP模式和STANDBY模式 这两种模式都可以有效降低芯片的功耗 特别是在电池供电的场景下 可以延长电池寿命 STOP模式 主要关闭CPU SRAM和Flash时钟 只保留少数必要
  • (转载)STM32与LAN9252构建EtherCAT从站

    目录 一 项目简介 EtherCAT及项目简述 LAN9252工作模式 整体开发流程 移植要处理的问题 代码层面的工作 开发中使用的工具 二 SSC的使用 SSC简介和下载 SSC构建协议栈文件和XML 三 LAN9252的XML文件 Et
  • STM32F SysTick定时器

    SysTick定时器 系统滴答定时器是一个非常基本倒计时定时器 用于在每隔一定的时间产生一个中断 即使是系统在睡眠模式下也能工作 它使得 OS 在各 CM3 器件之间的移植中不必修改系统定时器的代码 移植工作一下子容易多了 不用考虑最基本的
  • openmv识别三角形及一些不规则形状的识别

    今年在准备国电赛过程中 看了一下一些自己往年写过的代码 想起自己以前在网上找资料的艰辛 同时也非常感谢前人的无私分享 就想着把自己做过的东西也在网上分享分享 这篇文章应该去年就发的 但由于当时学业繁忙 后来就忘了 最近准备国赛才想起来 我个
  • 教你做一个属于自己的平衡小车,用STM32F103单片机实现(硬件篇)

    平衡小车软件篇 平衡小车代码篇 目录 一 电机 二 电机驱动 三 陀螺仪 四 OLED显示屏 五 STM单片机 六 其它 七 效果展示 一 电机 如果要做平衡小车不仅需要电机输出PWM来控制小车的行走 还应该适用带编码器的电机 因为要得到小
  • 22_PWM输出实验

    目录 通用定时器PWM概述 PWM模式 PWM输出配置步骤 计算频率和占空比 实验源码 通用定时器PWM概述 STM32PWM工作过程 从APB1 2的时钟在到预分频器在到计数器再到比较寄存器最后在到输出控制 假设我们的计数值是100 比较
  • 90、基于STM32单片机数字频率计频率检测配NE555脉冲发生器设计(程序+原理图+PCB源文件+参考论文+硬件设计资料+元器件清单等)

    单片机主芯片选择方案 方案一 AT89C51是美国ATMEL公司生产的低电压 高性能CMOS型8位单片机 器件采用ATMEL公司的高密度 非易失性存储技术生产 兼容标准MCS 51指令系统 片内置通用8位中央处理器 CPU 和Flash存储
  • 万用表的使用

    deprecate 反对 轻视 declaration 宣告 声明书 宣布 宣告 申报 arg argue 争论 论证 争辩 主张 认为 提供证据 证明 表明 原因等 type 类型 种类 打字 成为 的典型 function 功能 作用
  • 【stm32单片机基础】按键状态机实现长按和短按

    stm32单片机基础 按键状态机 文章目录 stm32单片机基础 按键状态机 前言 一 按键的消抖 二 按键状态机实现 0 状态机模式 1 单个按键检测 2 单个按键实现长按和短按 三 长按和短按测试示例 四 多按键检测 按键处理经典例程
  • 浅谈中断挂起与中断标志的区别

    中断挂起 如果中断发生时 正在处理同级或高优先级异常 或者被掩蔽 则中断不能立即得到响应 此时中断被悬起 悬挂意味着等待而不是舍去 当优先级高的或者同等级先发生的中断完成后 被挂起的中断才会执行 中断的悬起状态可以通过 中断设置悬起寄存器
  • STM32F103屏蔽JTAG/SWD 以及PC13,PC14,PC15的RTC晶振禁用。

    STM32F103屏蔽JTAG SWD 以及PC13 PC14 PC15的RTC晶振禁用 1 关于JTAG SWD屏蔽 2 PC13 PC14 PC15的RTC晶振屏蔽 1 关于JTAG SWD屏蔽 STM32F103系列上的一些IO口在标
  • STM32自己写printf函数方法(不用重定向)

    stm32有几个串口可以使用 当我们想用printf打印数据到上位机时 通常是使用fput重定向 当我们要多个串口使用printf格式函数时 可以在写一个类似printf的函数 include
  • 17_外部中断实验

    目录 外部中断概述 外部中断的一般配置步骤 硬件连接图 实验源码 中途遇到问题printf打印中文乱码 外部中断概述 STM32F1的每个IO口都可以作为外部中断输入 STM32F1的中断控制器支持19个外部中断 事件请求 线0 15 对应
  • STM32F407ZGT6控制舵机(采用高级定时器8)

    前言 32单片机给舵机供电不足 会出现不稳定的情况 舵机鬼畜 所以要外加电源给舵机供电 利用12v锂电池 通过稳压模块降压到5 5v 提供给舵机 稳压电路的gnd一定要接上32单片机的gnd 不共地虽然能供电但数据线无法传输数据 stm32
  • 02-407控制底板PCB开发板资源介绍资料

    核心板 控制底板 反客 DIY 1 芯片介绍 stm32F407ZGT6 开发指南 产品 见淘宝 反客科技 核心板并没有使用STM32F407开发指南上的 因为它贵且许多功能没有用到 所以就使用反客的 芯片的一样 没事 开发板是李明枫老师画
  • STM32串口环形队列

    一 环线队列 在设计串口驱动的过程中 要遵循的两条准则是 1 尽量的减少程序运行的时间 2 尽量的减少程序所占用的内存 单片机相对于电脑来说 单片机的储存空间和电脑的存储空间根本不是一个量级 电脑并不用过多考虑内存的多少 而单片机就需要考虑
  • STM32之_keil 编译内存大小解析

    Program Size Code 28784 RO data 6480 RW data 60 ZI data 3900 的含义 1 Code 程序所占用的FLASH大小 存储在FLASH 2 RO data Read only data
  • App\led\led.h(6): warning: #1295-D: Deprecated declaration LED_Init - give arg types

    如图所示操作即可 如图所示操作即可 如图所示操作即可
  • 45_SDIO基础知识

    目录 SDIO协议简介 SDIO设备分类 SD卡物理结构 SD卡寄存器列表 SDIO总线拓扑 SDIO总线 SDIO总线协议 SDIO命令 命令格式 命令类型 响应 SD卡的操作模式 卡识别模式 数据传输模式 STM32 SDIO功能框图

随机推荐