Advertisement

STM32学习记录—SysTick定时器

  •  5星
  •     浏览量: 0
  •     大小:None
  •      文件类型:PDF


简介:
本篇博客详细记录了作者在学习STM32微控制器过程中关于SysTick定时器的相关内容,包括其工作原理、配置方法及应用示例。 SysTick定时器是一个24位的倒计数定时器,在STM32单片机系统中扮演着重要角色。当计数值减至0后,它会自动从RELOAD寄存器重新加载初始值,并继续循环计数,除非在SysTick控制及状态寄存器中的使能位被清除。 SysTick定时器有以下几个关键用途: 1. 生成操作系统的时钟节拍:嵌入式系统中通常需要一个定时器来产生滴答中断作为时间基准。由于SysTick与NVIC紧密集成,它可以触发SYSTICK异常(异常号15),从而提供稳定的时钟节拍。 2. 方便代码移植性:Cortex-M3处理器内建了SysTick定时器,使得基于此处理器的软件在不同设备间易于移植,因为所有Cortex-M3芯片都包含这个定时器,并且使用方式和处理逻辑保持一致。 3. 时间测量与闹钟功能:除了用于操作系统之外,SysTick还可以用作时间测量或设定闹钟的功能。不过需要注意的是,在调试模式下处理器停止运行时,SysTick也会暂停计数。 要使SysTick定时器正常工作,需要执行以下步骤: - 配置计数器时钟源:通过设置CTRL寄存器中的CLKSOURCE位。 - 设置重载值:在RELOAD寄存器中设定初始值。 - 清除COUNTFLAG标志位:可通过读取或写入SysTick控制及状态寄存器(STCSR)或当前值寄存器(STCVR)实现。 - 启动定时器:设置CTRL寄存器中的ENABLE位以启动计时操作。 - 如果需要中断功能,还需开启相应的中断,并在服务例程中处理。 为了将SysTick用作系统时钟源: 1. 将STCSR的TICKINT位置为启用状态; 2. 若使用重定位向量表,则需设置SysTick异常的向量地址及提供相应服务例程入口点。 此外,SysTick还可以用来实现延时功能。这可以通过查询方式或中断方式来完成:查询模式是通过不断检查COUNTFLAG标志位判断计数是否结束;而中断模式则是在初始化阶段设定好定时值和中断,并在溢出时由相应的中断服务程序处理延时期满。 例如,以下是一个简单的配置函数示例,用于设置SysTick每1毫秒产生一次中断(假设系统主频为72MHz): ```c void SysTick_Configuration(void){ // 选择AHB总线作为计数器时钟源 SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK); // 设置SysTick优先级为3 NVIC_SystemHandlerPriorityConfig(SystemHandler_SysTick, 7); // 每毫秒触发中断,假设系统时钟频率为72MHz SysTick_SetReload(72000); // 启用SysTick的中断功能 SysTick_ITConfig(ENABLE); } ``` 以上内容概述了STM32单片机中SysTick定时器的基本知识及其应用。它在嵌入式系统开发过程中非常重要,提供了可靠的时间管理和同步机制支持。

全部评论 (0)

还没有任何评论哟~
客服
客服
  • STM32SysTick
    优质
    本篇博客详细记录了作者在学习STM32微控制器过程中关于SysTick定时器的相关内容,包括其工作原理、配置方法及应用示例。 SysTick定时器是一个24位的倒计数定时器,在STM32单片机系统中扮演着重要角色。当计数值减至0后,它会自动从RELOAD寄存器重新加载初始值,并继续循环计数,除非在SysTick控制及状态寄存器中的使能位被清除。 SysTick定时器有以下几个关键用途: 1. 生成操作系统的时钟节拍:嵌入式系统中通常需要一个定时器来产生滴答中断作为时间基准。由于SysTick与NVIC紧密集成,它可以触发SYSTICK异常(异常号15),从而提供稳定的时钟节拍。 2. 方便代码移植性:Cortex-M3处理器内建了SysTick定时器,使得基于此处理器的软件在不同设备间易于移植,因为所有Cortex-M3芯片都包含这个定时器,并且使用方式和处理逻辑保持一致。 3. 时间测量与闹钟功能:除了用于操作系统之外,SysTick还可以用作时间测量或设定闹钟的功能。不过需要注意的是,在调试模式下处理器停止运行时,SysTick也会暂停计数。 要使SysTick定时器正常工作,需要执行以下步骤: - 配置计数器时钟源:通过设置CTRL寄存器中的CLKSOURCE位。 - 设置重载值:在RELOAD寄存器中设定初始值。 - 清除COUNTFLAG标志位:可通过读取或写入SysTick控制及状态寄存器(STCSR)或当前值寄存器(STCVR)实现。 - 启动定时器:设置CTRL寄存器中的ENABLE位以启动计时操作。 - 如果需要中断功能,还需开启相应的中断,并在服务例程中处理。 为了将SysTick用作系统时钟源: 1. 将STCSR的TICKINT位置为启用状态; 2. 若使用重定位向量表,则需设置SysTick异常的向量地址及提供相应服务例程入口点。 此外,SysTick还可以用来实现延时功能。这可以通过查询方式或中断方式来完成:查询模式是通过不断检查COUNTFLAG标志位判断计数是否结束;而中断模式则是在初始化阶段设定好定时值和中断,并在溢出时由相应的中断服务程序处理延时期满。 例如,以下是一个简单的配置函数示例,用于设置SysTick每1毫秒产生一次中断(假设系统主频为72MHz): ```c void SysTick_Configuration(void){ // 选择AHB总线作为计数器时钟源 SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK); // 设置SysTick优先级为3 NVIC_SystemHandlerPriorityConfig(SystemHandler_SysTick, 7); // 每毫秒触发中断,假设系统时钟频率为72MHz SysTick_SetReload(72000); // 启用SysTick的中断功能 SysTick_ITConfig(ENABLE); } ``` 以上内容概述了STM32单片机中SysTick定时器的基本知识及其应用。它在嵌入式系统开发过程中非常重要,提供了可靠的时间管理和同步机制支持。
  • STM32 SysTick 系统
    优质
    简介:STM32 SysTick定时器是Cortex-M内核的标准组成部分,提供了一个独立于硬件架构的基本定时功能,广泛应用于RTOS中的时间管理及任务调度。 STM32 SysTick系统定时器应用代码已编译成功!
  • []STM32F1 SYSTICK滴答源码详解(寄存、标准库、HAL库)
    优质
    本文详细解析了STM32F1系列微控制器中SYSTICK滴答定时器的工作原理,包括其寄存器配置及使用方法,并结合标准库和HAL库进行代码示例说明。 STM32F1系列是意法半导体(STMicroelectronics)基于ARM Cortex-M3内核开发的微控制器,在各种嵌入式系统设计中有广泛应用。SYSTICK作为Cortex-M系列处理器内置的一个滴答定时器,主要用于实现系统的定时和中断功能。在STM32F1中,理解和正确使用SYSTICK对于创建高效且实时的应用程序至关重要。 一、SYSTICK的基本概念 SYSTICK是一个24位递减计数器,其时钟源通常来自于系统时钟(System Clock),提供了一个固定的基准时间单位,并可用于实现周期性任务或超时检测。当该计数器值减少至0后会产生一个中断信号并自动重装载设定的数值。 二、寄存器操作 在STM32F1中,通过三个关键的寄存器来配置和控制SYSTICK: - SYSTICK_CTRL:用于管理定时器的状态(如启动/停止)及是否启用中断。 - SYSTICK_LOAD:设置计数的最大值或重载值。 - SYSTICK_VAL:显示当前递减计数值。 三、标准库操作 在STM32的标准库中,可以通过RCC和NVIC两个函数来管理SYSTICK。例如: ```c // 启用时钟配置寄存器的时钟源 RCC_APB1PeriphClockCmd(RCC_APB1Periph_SYSCFG, ENABLE); // 初始化中断控制器参数并启用系统滴答定时器的中断功能。 SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); SysTick_Config(SystemCoreClock / 1000 - 1); ``` 四、HAL库操作 STM32 HAL库提供了一种更高级别的抽象来简化SYSTICK的操作。具体步骤包括: ```c // 初始化滴答中断优先级并启用滴答定时器。 HAL_InitTick(TICK_INT_PRIORITY); HAL_SYSTICK_Config(SystemCoreClock / 1000 - 1); ``` 五、应用示例 在实践中,SYSTICK常被用于实现延时函数或作为RTOS的Tick管理。例如: ```c void Delay(uint32_t ms){ uint32_t start = HAL_GetTick(); while ((HAL_GetTick() - start) < ms); } ``` 通过以上分析可以看出STM32F1系列中SYSTICK滴答定时器在寄存器、标准库和HAL库层面上的使用方法。理解并掌握这些知识有助于更好地进行嵌入式系统开发。 文件中的T7_HAL_systick、“T6_JCQ_SYSTICK” 和 T7_BZ_systick 可能是不同的示例工程,分别展示了如何利用HAL库、自定义库以及可能的优化版本来配置和使用SYSTICK。通过分析这些代码可以加深对实际操作的理解。
  • STM32——通用PWM配置详解
    优质
    本篇文章详细介绍了如何使用STM32微控制器进行通用定时器PWM(脉冲宽度调制)功能的配置。通过具体步骤解析和代码示例,帮助读者掌握PWM的基本原理及其在实际项目中的应用技巧。适合初学者深入理解STM32定时器模块。 脉冲宽度调制(PWM)是一种利用微处理器的数字输出来控制模拟电路的有效技术,其实质是对脉冲宽度进行调节。 在STM32中,除了TIM6 和 TIM7定时器之外,其他所有定时器都可以用来生成 PWM 输出信号。其中高级定时器 TIM1 和 TIM8 可以同时产生多达 7 路的 PWM 输出;通用定时器则可以同时产生最多4路PWM输出。因此,在使用STM32的情况下,理论上最多可同时生成30路PWM输出。 这里我们仅利用TIM3 的 CH2 来实现一路 PWM 输出信号的生成。 配置过程: 1)开启 TIM3 时钟以及复用功能时钟。
  • STM32
    优质
    《STM32学习记录》是一份详尽的技术文档,涵盖了从基础理论到实践应用的全过程,旨在帮助初学者快速掌握STM32微控制器开发技能。 STM32完整学习笔记PDF扫描版基于ARM Cortex-M3内核的32位处理器,帮助你入门STM32的学习。
  • STM32:通用的应用
    优质
    本笔记深入浅出地介绍如何使用STM32微控制器中的通用定时器模块。涵盖配置步骤、中断处理及实用示例,适合初学者快速上手。 STM32系列微控制器配备了丰富的定时器资源,其中包括8个通用16位定时器:TIMER1和TIMER8属于高级定时器类别,而TIMER2至TIMER7则为普通定时器。此外,还有一个系统滴答定时器Systick,在实时操作系统中主要用于任务切换的调度;RTC(实时时钟)是一个支持秒级中断的毫秒计时器,适用于时间同步与实时时钟功能。除此之外还有看门狗定时器,用于监控系统的运行状态并防止程序陷入死循环。 STM32的这些定时器可以使用APB1或APB2总线作为它们的工作时钟源。TIMER1和TIMER8连接到APB2,并且最高可配置至72MHz的频率;而TIMER2至TIMER7则通过APB1获得最多达36MHz的时钟信号。这些定时器能够根据实际需求经由预分频器来调整其工作频率。 在编程中,我们可以利用这些定时器实现特定的功能,比如控制LED灯以一定的周期闪烁。以下是一个使用TIM2定时器与GPIO配置来控制LED灯的例子: 首先,在代码里进行必要的初始化设置:定义并开启GPIOC的第13号引脚,并将其模式设为推挽输出。 ```c #include stm32f10x.h void GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; // 使用PC13引脚 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOC, &GPIO_InitStructure); // 初始化GPIO配置 } ``` 接着,设置中断控制器NVIC的相关参数:选择TIM2的中断通道,并设定其抢占和子优先级。 ```c void NVIC_Config(void) { NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); // 设置为最低优先级别分组 NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; // 定义TIM2的中断通道 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; // 抢占优先级设为0 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // 子优先级也设为0 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); // 初始化中断控制器配置 } ``` 然后,进行定时器TIM2的初始化设置:定义周期、预分频数及计时模式等关键参数。 ```c void Timer_Config(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); // 使能定时器TIM2的时钟 TIM_TimeBaseStructure.TIM_Period = 1000; // 设置计数周期为1000 TIM_TimeBaseStructure.TIM_Prescaler = 36000 - 1; // 预分频值设为最大(即系统频率/2) TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; // 设置定时器工作模式为向上计数 TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); // 初始化TIM2的配置 TIM_ClearFlag(TIM2, TIM_FLAG_Update); // 清除更新标志位 TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); // 开启定时器中断功能 TIM_Cmd(TIM2, ENABLE); } ``` 在主函数`main()`中,初始化系统时钟(如果还未完成),配置GPIO、NVIC和TIM2,并进入无限循环等待。 ```c int main(void) { SystemInit(); // 初始化系统时钟 GPIO_Config(); NVIC_Config(); Timer_Config(); while (1) { // 主程序的其它任务可以在此处添加 } } ``` 每当TIM2计数达到预设周期(即1000次),会触发更新中断。在相应的中断服务函数中,可以根据需求执行特定操作,例如切换LED的状态。 通过以上步骤我们可以理解STM32通用定时器的基本使用方法:包括时钟源配置、中断功能设置以及参数设定等关键环节。掌握这些知识对于开发基于STM32的应用程序至关重要,因为它们广泛应用于各种实时控制、信号生成及延迟等功能的实现当中。
  • STM32:实验三 中断控制灯光开关
    优质
    本实验是基于STM32微控制器的学习项目第三部分,重点介绍通过定时器中断实现灯光的自动开关控制,涵盖硬件配置、代码编写及调试过程。 STM32是一款基于ARM Cortex-M内核的微控制器,在嵌入式系统设计领域应用广泛。本实验将探讨如何利用定时器中断来控制LED灯的亮灭,这对于理解和掌握实时系统及硬件交互非常重要。 在STM32中,定时器是一个关键组件,它能够周期性地生成中断请求以执行特定任务。该微控制器包含多种类型的定时器,包括基本定时器、通用定时器和高级定时器等。本实验可能使用的是功能强大的通用定时器(TIM),因为它们可以配置为不同的工作模式。 1. **配置定时器**: 在STM32中进行初始化时,需要设置定时器的工作模式(如向上计数、向下计数或中心对齐)、预分频值以及自动重装载寄存器的数值等。例如,可将定时器设为向上计数模式,并设定预分频值1000和500作为自动重载值,这样每经过一毫秒就会产生一次中断。 2. **开启中断**: 配置好定时器后,需启用相应的中断使能功能以允许在到达预定数值时触发。这通常涉及修改TIMx_DIER寄存器中的UIE位来启动更新中断。 3. **编写中断服务程序**(ISR): 当发生定时器中断时,CPU将跳转至预先设定的ISR中处理相关任务。例如,在LED灯初始状态为熄灭的情况下,每次收到新的中断信号后便切换其状态使之亮起或关闭。 4. **连接GPIO接口**: 控制LED需要使用到STM32上的通用输入/输出(GPIO)端口。选择并配置一个合适的GPIO引脚作为推挽模式的输出,并根据ISR中的逻辑改变该引脚电平,从而操控LED灯的状态变化。 5. **中断优先级和NVIC管理**: 嵌套向量中断控制器(NVIC)负责STM32中所有中断事件的处理。需要设置定时器中断的优先级来保证系统的响应速度以及不同级别之间协调工作。 6. **确定中断触发条件**: 在这个实验里,当计数值达到自动重装载寄存器所设定的目标值时就会引发一个溢出中断,此时会执行相应的ISR程序代码。 7. **调试与测试**: 使用ST-Link或J-Link等工具可以观察定时器的工作状态和确保正确的中断触发行为。同时通过目测LED灯的闪烁频率来验证实际运行效果是否符合预期设置。 本实验将让你熟悉STM32定时器中断的基本操作方式,并掌握基于中断驱动硬件IO实现实时控制的方法,这对于理解嵌入式系统中的时间调度及事件处理机制至关重要,也是进行复杂项目开发的基础。在实践中,定时器中断常用于生成PWM信号、电机控制系统以及无线通信同步等多种应用场景中。
  • US级Systick应用
    优质
    本文介绍了STM32微控制器中US级精度的SysTick定时器的应用方法,包括其配置和使用技巧,帮助开发者实现精确的时间管理和任务调度。 systick定时器用于微秒级的定时任务。
  • STM32 F103C8T64:钟树与滴答计中断设置.rar
    优质
    本资源为STM32 F103C8T6微控制器的学习笔记,详细介绍了如何配置其内部时钟树及滴答计时器以实现定时中断功能。 STM32 F103C8T6学习笔记4:时钟树、滴答计时器、定时器定时中断.rar配套工程文件
  • 嵌入式初指南四——SysTick
    优质
    本指南深入浅出地介绍嵌入式系统中常用的SysTick定时器,帮助初学者掌握其配置与应用技巧,是学习嵌入式开发的基础教程之一。 这篇文章主要分析了系统的滴答时钟。内容涵盖了SysTick时钟的基本概念、原理以及在HAL库开发过程中常用的函数。SysTick定时器与系统时钟有所不同,但两者之间存在直接联系,具体细节可参考相关原理图。