0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32 SysTick配置函数

冬至子 来源:纷纭杂谈 作者:CY_CHEN 2023-07-22 10:21 次阅读

之前使用SysTick滴答定时器都是通过查找内核编程手册配置寄存器让SysTick滴答定时器工作的。其实在内核相关的头文件core_cm4.h中已经有SysTick滴答定时器的相关配置了。

图片

条件__Vendor_SysTickConfig == 0成立,配置函数才能使用。

图片

刚好在stm32f4xx.h中定义了__Vendor_SysTickConfig = 0,所以可以使用该配置函数。

观察函数__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks),其中的寄存器和我们在Systick查询定时中用到的寄存器其实是一样的。

__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)
{
  //SysTick_LOAD_RELOAD_Msk为24,如果装载值超过24位,返回错误信息
  if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) { return (1UL); }    /* Reload value impossible */


  SysTick- >LOAD  = (uint32_t)(ticks - 1UL);                         /* set reload register */
  //设中断端优先级
  NVIC_SetPriority (SysTick_IRQn, (1UL < < __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */
  SysTick- >VAL   = 0UL;                                             /* Load the SysTick Counter Value */
  SysTick- >CTRL  = SysTick_CTRL_CLKSOURCE_Msk |
                   SysTick_CTRL_TICKINT_Msk   |
                   SysTick_CTRL_ENABLE_Msk;                         /* Enable SysTick IRQ and SysTick Timer */
  return (0UL);                                                     /* Function successful */
}

这种方式没有分频,时钟速度为168Mhz,每秒可计数168000000次,每毫秒可计数168000次,每微秒计数168次。装载值为24位,最大为16777215,可以算得最大延时时间为100ms。

这次的程序不需要上次写的delay文件了,只要在主文件加入SysTick配置函数的头文件core_cm4.h,根据想要定时的时间,计算相应的数值,初始化SysTick配置函数。再调用中断接口封装中断函数,就可以实现SysTick中断了。

如果中断函数像之前那样可能会看不到现象,因为定时时间过短,人眼可能识别不出led灯在闪烁,这里可以添加个计数,相当于定时更长时间才执行想要的程序。

#include "stm32f4xx.h"
#include "led.h"
#include "core_cm4.h"


int main()
{
  LED_Init();              //初始化LED灯
  SysTick_Config(8400000);//延时50ms    168000000/8400000=20     1000/20=50

  while(1)
  {
  }
}


void SysTick_Handler()
{
  static u8 cnt = 0;
  SysTick- >CTRL  &=~  (1< < 16);    //清计数标志位
  cnt++;
  if(cnt == 10)
  {
    LED_Toggle(DS0);              //LED灯闪烁
    cnt = 0; 
  }
}

编译工程项目并烧入开发板,LED灯闪烁,SysTick配置函数调用成功。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • led灯
    +关注

    关注

    22

    文章

    1592

    浏览量

    107831
  • 寄存器
    +关注

    关注

    31

    文章

    5317

    浏览量

    119996
  • 定时器
    +关注

    关注

    23

    文章

    3237

    浏览量

    114462
  • 串口中断
    +关注

    关注

    0

    文章

    64

    浏览量

    13858
  • STM32F4
    +关注

    关注

    3

    文章

    194

    浏览量

    27991
收藏 人收藏

    评论

    相关推荐

    STM32 SYSTICK定时器常见问题

    我们知道,STM32函数里通常使用来自内核的系统定时器SYSTICK作为时基,实现计数延时。一般来讲,ST公司提供的库函数里将SYSTICK
    发表于 09-13 16:20 2956次阅读

    配置SYSTICK

    /*配置SYSTICK很简单,只需在SySTick_Config中写入一个不大于2^24次方的数,就可以产生systick中断1.无需对NVIC进行
    发表于 08-17 06:22

    STM32--SYSTICK超简易定时器

    当然CORTEX-M3独有的定时功能可是超级简单的 那就是SySTick,所谓的系统定时器。配置方式简单,简单的不能再简单,因为STM32 的库函数已经帮我们搞好了,只需要调用一个
    发表于 03-16 15:47 19次下载

    STM32单片机Systick函数的使用方法

    在CMSIS中提供的函数SysTick_Config(uint32_t ticks); 该函数设置了自动重载入计数器(LOAD)的值,SysTick IRQ的优先级,复位了计数器(V
    发表于 12-28 15:07 5929次阅读

    什么是SysTick定时器?实现STM32时钟系统的详细资料说明

    什么是SysTick定时器?实现STM32时钟系统的详细资料说明主要内容包括了:Systick原理和配置方法,ALIENTEK 延时函数de
    发表于 01-02 08:00 3次下载
    什么是<b class='flag-5'>SysTick</b>定时器?实现<b class='flag-5'>STM32</b>时钟系统的详细资料说明

    STM32中的SysTick时钟源来自哪里?

    STM32SysTick时钟源来自哪里?
    的头像 发表于 03-03 14:32 7804次阅读

    【野火指南者】STM32F103延时函数及其系统定时器—SysTick

    学习目的:1、学习STM32的系统定时器及其相关的寄存器2、使用STM32的系统定时器来配置延时函数内容介绍:一、Systick简介二、
    发表于 11-24 20:06 7次下载
    【野火指南者】<b class='flag-5'>STM32</b>F103延时<b class='flag-5'>函数</b>及其系统定时器—<b class='flag-5'>SysTick</b>

    STM32学习笔记之SysTick

    Systick大有不同,于是作此学习笔记。Systick的两大作用:1、可以产生精确的延时2、可以提供给操作系统一个单独的心跳(时钟)节拍通常实现Delay(N)函数的方法为:    &n
    发表于 11-25 10:36 1次下载
    <b class='flag-5'>STM32</b>学习笔记之<b class='flag-5'>SysTick</b>

    STM32—关于SYSTICK系统时钟的详解及学习笔记

    /*配置SYSTICK很简单,只需在SySTick_Config中写入一个不大于2^24次方的数,就可以产生systick中断1.无需对NVIC进行
    发表于 11-30 15:51 15次下载
    <b class='flag-5'>STM32</b>—关于<b class='flag-5'>SYSTICK</b>系统时钟的详解及学习笔记

    STM32F4: Systick滴答定时器-延时函数讲解(五)

    Systick定时器基础知识讲解Systick相关寄存器库函数讲解delay延时函数讲解(Systick应用)(借鉴正点原子网课)(一)
    发表于 12-01 15:21 15次下载
    <b class='flag-5'>STM32</b>F4: <b class='flag-5'>Systick</b>滴答定时器-延时<b class='flag-5'>函数</b>讲解(五)

    Systick定时器几个简单的函数简介

    目录Systick定时器Systick定时器是什么?SysTick的四个寄存器寄存器对应的位Systick时钟源选择函数
    发表于 12-04 17:06 1次下载
    <b class='flag-5'>Systick</b>定时器几个简单的<b class='flag-5'>函数</b>简介

    stm32 SysTick/EXTI/USART中断过程

    本文中例子所使用的是stm32f103+标准库函数, 声明.SysTick中断过程SysTick配置好重装载计数器(STK_LOAD)后,
    发表于 12-23 19:55 3次下载
    <b class='flag-5'>stm32</b> <b class='flag-5'>SysTick</b>/EXTI/USART中断过程

    STM32关于systick计时器时间不对的一点问题

    STM32关于systick计时器时间不对的一点问题我是新手刚接触STM32,我设定的时间总是实际时间的一半,检查许久也不知道是哪里出了问题下面是延时函数和计时器的
    发表于 01-18 10:41 4次下载
    <b class='flag-5'>STM32</b>关于<b class='flag-5'>systick</b>计时器时间不对的一点问题

    STM32SysTick滴答定时器(delay延时函数讲解)

    。比如UCOS中,分时复用,需要一个最小的时间戳,一般在STM32+UCOS系统中,都采用Systick做UCOS心跳时钟。
    发表于 02-10 10:35 13次下载
    【<b class='flag-5'>STM32</b>】<b class='flag-5'>SysTick</b>滴答定时器(delay延时<b class='flag-5'>函数</b>讲解)

    STM32SysTick时钟源来自哪里?

    STM32SysTick时钟源来自哪里?
    的头像 发表于 10-26 15:58 1793次阅读
    <b class='flag-5'>STM32</b>的<b class='flag-5'>SysTick</b>时钟源来自哪里?