文章目录

  • 设计需求
  • 一、基础知识
  • 二、硬件设计
  • STM32CubeIDE开发
    • MX设置
    • 代码设置
    • 项目目录结构
  • 运行结果

设计需求

这里假设需求为使用SysTick定时器,得到一个us级别的延时


一、基础知识

SysTick相信大家在STM32F103中已经学习了,这里我们再来学习一次。SysTick定时器(又名滴答定时器)是存在于内核的一个定时器,只要是ARM Cotex-M系列内核的MCU都包含这个定时器。使用内核的SysTick定时器来实现延时,可以不占用系统的定时器,节约资源。由于和MCU外设无关,因此可以在不同厂家Cortex-M内核之间移植。

前面使用通用定时器,实现一个us级别延时,这里再用SysTick实现一次。注意SysTick用于了HAL库的毫秒级延时函数HAL_Delay(),不建议日常使用SysTick去做其他用途,这里只作为演示。

SysTick定时器是一个24位递减定时器,即计数器可以从最大值2^24开始每个时钟周期减1,当减到0时,会触发一次中断,同时自动重载定时初值,开始新的一轮计数。而这个定时初值,则是我们可以设置的,就可以实现得到指定时间。如下图所示,y为定时器的初值,然后随着时间的增加,值逐渐减小,直至为0,再重新载入这个初始值,如此往复x1,x2,x3这些时间段就是我们需要的

我们设置M4工作在209MHz,即209000000Hz,意味着1秒内,会计数209000000次。那么1us则计数209次。这个209就是滴答计数器的初始值,将这个值写入滴答定时器,定时器在每个时钟周期减1,减到0,就刚好就是1us,再次载入往复,就能实现我们想要的值。

二、硬件设计

SysTick定时器不涉及硬件,这里只需要一个LED灯去展示延时效果

STM32CubeIDE开发

MX设置



代码设置

driver_led.h

#ifndef DRIVER_LED_H_
#define DRIVER_LED_H_
#include "main.h"
#include "stm32mp1xx_hal.h"#define LED_GREEN_ON()   HAL_GPIO_WritePin(LED_GREEN_GPIO_Port,LED_GREEN_Pin,GPIO_PIN_RESET);
#define LED_GREEN_OFF()  HAL_GPIO_WritePin(LED_GREEN_GPIO_Port,LED_GREEN_Pin,GPIO_PIN_SET);#define LED_YELLOW_ON()  HAL_GPIO_WritePin(LED_YELLOW_GPIO_Port,LED_YELLOW_Pin,GPIO_PIN_RESET);
#define LED_YELLOW_OFF() HAL_GPIO_WritePin(LED_YELLOW_GPIO_Port,LED_YELLOW_Pin,GPIO_PIN_SET);#endif /* DRIVER_LED_H_ */

driver_systick_us.h

#ifndef DRIVER_SYSTICK_US_H_
#define DRIVER_SYSTICK_US_H_#include "main.h"
#include "stm32mp1xx_hal.h"extern void systick_delay_us(uint32_t t);
extern void SysTickInit(void);
#endif /* DRIVER_SYSTICK_US_H_ */

driver_systick_us.c

#include "driver_systick_us.h"static volatile uint32_t tickend=0;//设置中断标志//初始化SysTick,使其初始值为209,
//再设置SysTick定时器中断优先级,最后使能SysTick定时器中断
void SysTickInit(void){uint32_t init_t=0;init_t=SystemCoreClock/1000000;//1us计数的次数if(HAL_SYSTICK_Config(init_t)!=HAL_OK){Error_Handler();}//设置滴答定时器中断优先级,最高HAL_NVIC_SetPriority(SysTick_IRQn,0,0);//使能滴答定时器中断HAL_NVIC_EnableIRQ(SysTick_IRQn);
}
//为了不影响HAL_Delay函数,这里设置一个自己的中断函数
void SysTick_Handler(void){HAL_IncTick();OwnSysTick_Handler();
}
//延时函数
void systick_delay_us(uint32_t t){tickend=t;while(tickend!=0);
}
//中断服务函数
void OwnSysTick_Handler(void){if(tickend!=0){tickend--;}
}

main.c

项目目录结构

运行结果


开发板显示也没有问题

STM32MP157(实验九)——SysTick定时器us延时相关推荐

  1. STM32延时函数的四种方法:普通延时(2种)、SysTick 定时器延时(2种)

    STM32延时函数的三种方法:普通延时.SysTick 定时器延时(1.中断方式:2.非中断方式) 单片机编程过程中经常用到延时函数,最常用的莫过于微秒级延时delay_us( )和毫秒级delay_ ...

  2. systick定时器 延时计时

    可以直接看定时器二代 systick定时器是属于cortex M内核的外设,专门为RTOS的系统时钟节拍设计的.systick是cortex M内核自带的,因此和debug调试接口一样,与单片机型号和 ...

  3. 嵌入式开发(7)系统定时器(SysTick)之延时函数运用

    目录 一.系统定时器 1. 简介 2.工作原理 3.频率的概念 二.库函数SysTick定时器操作 系统定时器配置 三.寄存器SysTick定时器操作 1.系统定时器的用途 2.寄存器 3.官方示例 ...

  4. 【STM32F103】嘀嗒定时器(Systick)_延时函数

    STM32嘀嗒定时器--延时函数 一 系统Systick定时器 Systick定时器就是系统滴答定时器,一个24 位的倒计数定时器,计到0 时,将从RELOAD 寄存器中自动重装载定时初值.只要不把它 ...

  5. SysTick定时器的一个简单应用

    SysTick即为系统定时器,又称嘀嗒定时器,是Cortex-M3内核的一个外设,集成在NVIC中.SysTick是一个24bit的向下递减的计数器,每计数一次的时间为1/SYSCLK(SYSCLK一 ...

  6. 填坑-关于SysTick定时器

    目录 01.坑的由来 02.填坑 03.修改代码验证 04.总结 本文主要来填坑,更正之前文章的错误.也进一步加深了我对SysTick定时器的理解,希望对你有帮助. 01.坑的由来 在之前的推文中&l ...

  7. SysTick 定时器

    11.1关于 SysTick 定时器 SysTick定时器(又名系统滴答定时器)是存在于Cortex-M3的一个定时器,只要是ARM Cotex-M系列内核的MCU都包含这个定时器.使用内核的SysT ...

  8. STM32使用内部时钟HSI作为系统时钟及配置Systick定时器

    参考:https://blog.csdn.net/huangyangquan/article/details/78790443 https://www.cnblogs.com/dustinzhu/p/ ...

  9. 【STM32】SysTick定时器

    00. 目录 文章目录 00. 目录 01. SysTick定时器概述 02. SysTick定时器寄存器描述 03. 相关函数实现 04. 延时函数实现 05. 应用示例 06. 附录 07. 声明 ...

  10. STM32学习及应用笔记一:SysTick定时器学习及应用

     这几年一直使用STM32的MCU,对ARM内核的SysTick计时器也经常使用,但几乎没有仔细了解过.最近正好要在移植一个新的操作系统时接触到了这块,据比较深入的了解了一下. 1.SysTick ...

最新文章

  1. 安卓setclicklistener函数没有_金主脚本按键精灵安卓按键初体验—乱斗西游2自动签到...
  2. 【BLE MIDI】开发 BLE MIDI 硬件电子乐器设备需要遵循的相关规范 ( 资料收集 )
  3. 查看程序占用内存_电脑内存不足怎么办
  4. 《STL源码剖析》学习-- 1.9-- 可能令你困惑的C++语法1
  5. Qt使用OpenCV读取图片练习
  6. 字符串的比较相关方法
  7. Android QA
  8. jqGrid数据列表和表单的列隐藏/显示
  9. jenkins安装与自动部署详细说明
  10. php基于新浪ip库获取城市,WordPress-利用新浪IP库获取评论用户所在城市信息!
  11. java long 1 000_Java-基本数据类型
  12. 浅谈实时语音质量监控系统
  13. VirtualLab基础实验教程-6.闪耀光栅
  14. win10系统迁移后系统重装_Win10如何把系统迁移到固态硬盘上?Win10系统迁移到SSD上教程...
  15. java里的哈希值。
  16. 如何把电脑加上公司的域
  17. PDF 文件格式 基本结构
  18. Java服务端接入苹果内购。实现票据二次校验、自动续期订阅
  19. 项目一——电子通讯录
  20. 【基础知识】~ 分频器

热门文章

  1. 编译错误: error ‘gets’ was not declared in this scope gets(s)
  2. Latex文档中 插入符号和编号
  3. python3下载远程代码并执行
  4. 【聚来宝】创业 兼职 教程 资料
  5. 计算机基础表格制作教学设计,word中表格制作教学设计精选
  6. 使用python print打印函数返回值多一个None的问题探究
  7. Cobaltstrike Socks 代理隧道
  8. 系统集成(IBMS)软件的功能
  9. 网站使用微软雅黑需要版权吗
  10. python访问陌生人qq空间_自己的QQ空间怎么不让陌生人进入—设置访问权限