stm32实现定时、延时一般通过调用CMSIS函数SysTick_Config实现。例如我们设置1ms中断如下:
/************************************** **转载请注明:http://tedeum.iteye.com** ***************************************/ if (SysTick_Config(SystemCoreClock / 1000)) { /* Capture error */ while (1); }
这时,每过1ms就会调用中断,可以在中断中进行定时逻辑处理:
void SysTick_Handler(void) { //进行相应的定时逻辑处理 }
在此基础上,我们就可以进行延时,频率处理,计时的功能的开发:
一、延时,我们首先定义一个延时时间,然后调用延时函数后,延时时间在SysTick中断中减一,为0时跳出:
//延迟时间计数器 __IO uint32_t TimingDelay = 0; //SysTick中断处理函数 void SysTick_Handler(void) { //每次SysTick中断减一 if (TimingDelay != 0x00) { TimingDelay--; } } //延时函数 void Delay(__IO uint32_t nTime) { //设置终端延时计数器 TimingDelay = nTime; //为0时延时等待结束 while(TimingDelay != 0); }
二、计时,设置一个sysTickCount,两个sysTickCount的差就是时长:
//tick计数器,48天后重复,如用于四轴不用处理 static volatile uint32_t sysTickCount = 0; //SysTick中断处理函数 void SysTick_Handler(void) { //每次SysTick中断加1 sysTickCount++ } //获取当前计数 uint32_t millis(void) { return sysTickCount; } //使用例子 uint32_t t1 = millis(); //do somethin uint32_t t2 = millis(); uint32_t t3 = t2 - t1;
三、频率处理,按上面没1ms处理1次,频率= 1000(每秒次数)/每次间隔时间,在中断处理函数中如下:
void SysTick_Handler(void) { //每次SysTick中断加1 sysTickCount++ //500hz if ((sysTickCount % 2) == 0) { //do something 500hz } //250hz if ((sysTickCount % 4) == 0) { //do something 200hz } //200hz if ((sysTickCount % 5) == 0) { //do something 200hz } //100hz if ((sysTickCount % 10) == 0) { //do something 200hz } //50hz if ((sysTickCount % 20) == 0) { //do something 200hz } //20hz if ((sysTickCount % 50) == 0) { //do something 200hz } //10hz if ((sysTickCount % 100) == 0) { //do something 200hz } //5hz if ((sysTickCount % 200) == 0) { //do something 200hz } }
以上就是SysTick一些基本应用的笔记。
/************************************************* *****转载请注明出处:http://tedeum.iteye.com****** **************************************************/
相关推荐
总结,STM32F1和STM32F4的延时函数实现涉及硬件定时器、软件循环计数等多种方式,需要根据实际需求和资源选择合适的方法。给定的"DELAY"文件提供了现成的延时库,简化了开发者的工作。在使用时,需注意延时精度、...
总之,STM32精准延时程序通过合理配置通用定时器,结合外部时钟源和预分频器,能够实现精确的定时任务。这在许多实时性和同步性要求高的应用中,如电机控制、通信协议、LED闪烁等场景,都具有至关重要的作用。
通过深入学习STM32滴搭定时器的使用,开发者可以充分利用其功能,实现各种精确的定时和延时应用,例如电机控制、信号采样、通信协议的时序控制等。提供的资料应该包含详细的讲解和实例,对于STM32新手来说是非常有...
在STM32开发过程中,经常需要进行软件延时操作,例如在定时任务、动画效果或者等待外部事件时。本文将深入探讨如何在STM32上实现精准的软件延时,并进行测试。 首先,我们需要理解STM32中的延时方法。最基础的延时...
根据提供的文件信息,本文将围绕“STM32延时子程序1ms、1s”这一主题展开讨论,旨在帮助读者理解如何通过软件手段实现高精度的延时功能。 ### STM32简介 STM32是意法半导体(STMicroelectronics)推出的一系列基于...
在STM32的开发过程中,延时函数是必不可少的一部分,它用于控制程序执行的精确时间,比如在LED闪烁、定时任务或者通信协议中。本资料主要介绍了如何在STM32的HAL库中实现微秒和毫秒级别的延时。 HAL库,全称为...
在STM32的程序设计中,延时功能是不可或缺的一部分,尤其在处理硬件交互、定时任务或者脉冲控制等场景。本篇文章将深入探讨如何利用STM32的系统滴答时钟来实现微秒和毫秒级的精确延时。 首先,我们需要了解STM32中...
STM32延时程序是嵌入式开发中的关键部分,特别是在微控制器应用中,精确的延时控制对于系统定时和事件同步至关重要。基于8M晶振的STM32延时程序设计涉及到硬件时钟系统、软件算法以及中断管理等多个方面。 首先,...
在STM32中,硬件定时器如TIM、SysTick等提供了高效且精确的定时功能,但有时因为资源限制或特定需求,我们可能需要自定义软件延时函数。软件延时主要通过循环计数来实现,常见的方法有忙等待(Busy-Wait)和睡眠模式...
通过理解和掌握这两种延时函数的实现原理,开发者可以更好地在STM32项目中实现精确的定时任务,提升系统性能和可靠性。在实际项目中,可以参考"01_延时函数"这样的资料,学习和实践这些延时技术。
STM32定时闪烁LED STM32微控制器是STMicroelectronics推出的32位基于ARM Cortex-M的微控制器系列。STM32系列微控制器具有低功耗、高速运算和强大连接能力等特点,广泛应用于智能家电、工业自动化、医疗器械、汽车...
在STM32的程序设计中,延时函数是非常关键的部分,它用于控制程序执行的时间间隔,常用于定时任务、中断服务或者硬件操作的同步。本教程将详细介绍如何在STM32上利用时钟系统实现精确的延时函数,包括秒、毫秒和微秒...
系统滴答定时器(Systick Timer)是STM32内建的一种特殊功能定时器,它是一个独立的、递减计数的定时器,通常用于实现操作系统(如FreeRTOS)的时钟节拍或提供基本的延时功能。本文将详细介绍如何利用STM32F103的...
在这个项目中,我们将探讨如何利用STM32单片机通过按键来实现一个简单的时钟功能。这个功能不仅能够帮助初学者理解STM32的IO口操作、中断处理和时间管理,而且也是实际应用中的常见需求。 首先,我们需要了解STM32...
STM32实现交通灯设计是一项常见的嵌入式系统实践项目,它涉及到微控制器编程、硬件接口操作以及模拟仿真等多个IT领域的知识。在这个项目中,主要使用了STM32系列的微控制器,配合Keil集成开发环境进行软件编写,并...
STM32 CubeMX是STMicroelectronics推出的一款强大的STM32微控制器配置和代码生成工具,它可以帮助开发者快速地初始化和配置STM32芯片的各种外设,包括时钟、GPIO、ADC、DAC、串口等。在STM32的开发过程中,延时功能...
在STM32中,系统定时器(SysTick)是一个非常重要的组件,它提供了精确的时间基准,可用于软件定时和延迟等功能。本篇将详细介绍如何利用STM32的SysTick实现从微妙到毫秒的精确定时。 首先,SysTick是Cortex-M系列...
总结来说,这个项目展示了如何使用keil5和STM32F103C8T6的固件库进行基本的GPIO控制,以及如何通过delay函数实现定时任务。对于初学者,这是理解STM32开发流程和基本硬件操作的一个很好的起点。随着对STM32固件库和...
在本项目中,我们关注的是STM32上的按键触发延时1分钟程序,这对于初学者理解MCU的中断处理和时间管理功能非常有帮助。 在STM32中,按键通常连接到GPIO(通用输入/输出)引脚,当按下按键时,对应的GPIO端口电平会...