【HAL库】STM32CubeMX开发----非阻塞延时实验----SysTick(滴答定时器)中断

这篇具有很好参考价值的文章主要介绍了【HAL库】STM32CubeMX开发----非阻塞延时实验----SysTick(滴答定时器)中断。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

STM32CubeMX 下载和安装 详细教程
【HAL库】STM32CubeMX开发----STM32F103/F207/F407----目录


前言

HAL库 有自带的 ms级 延时函数: HAL_Delay();
缺点: 这是阻塞延时方式,就是延时期间,什么都不能干,这样很浪费资源。
这篇文章主要介绍,利用SysTick(滴答定时器)中断实现非阻塞延时的实验。

STM32F407----非阻塞延时实验

主要是利用SysTick(滴答定时器)中断中有一个计数变量,每1ms加1,通过获取这个时间数值变量,实现非阻塞延时。

相关 HAL库 函数

/**
  *@功能:获取以毫秒为单位的tick值
  *@参数:无
  *@返回值:以毫秒为单位的tick值
  */
__weak uint32_t HAL_GetTick(void)
{
  return uwTick;
}

获取2个时间点之间的时间间隔的函数

这个函数需要自己手动编写。

具体代码如下:

/**
  *@功能: 获取2个时间点之间是否达到期望的延时
  *@参数1:现在的实时时间
  *@参数2:开始计时的时间
  *@参数3:要延时的时间间隔
  *@返回值:0-延时时间未到,1-延时时间已到
  */
uint8_t Get_Time_Interval(uint32_t Current_Time, uint32_t Past_Time, uint32_t Delay_Time)
{
    if(Current_Time < Past_Time)//实时时间小于开始时间,时间计数发生回滚
    {
        if(0xFFFFFFFF - Past_Time + Current_Time >= Delay_Time)
        {
            return 1;
        }
        else
        {
            return 0;
        }
    }
    else        //实时时间大于开始时间
    {
        if(Current_Time - Past_Time >= Delay_Time)
        {
            return 1;
        }
        else
        {
            return 0;
        }
    }
}

使用方法举例

实验内容:实现每隔1s,通过串口发送数据。

具体代码如下:

//非阻塞延时实验举例
void Non_blocking_delay_example(void)
{
      static  uint32_t  Static_Time = 0;//创建一个时间数静态变量
    
      if(Get_Time_Interval(HAL_GetTick(),Static_Time,1000)==1)
      {
        Static_Time = HAL_GetTick();
        printf("工欲善其事,必先利其器。");
      }
}

将此函数在主函数中调用即可,具体如下:

systick 非阻塞,# 【HAL库】STM32CubeMX开发,stm32,单片机,嵌入式开发

运行结果如下:
systick 非阻塞,# 【HAL库】STM32CubeMX开发,stm32,单片机,嵌入式开发


关于串口通信实验的详细信息,请看这篇文章:【HAL库】STM32CubeMX开发----STM32F407----Uart串口通信实验文章来源地址https://www.toymoban.com/news/detail-594850.html


到了这里,关于【HAL库】STM32CubeMX开发----非阻塞延时实验----SysTick(滴答定时器)中断的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【11】STM32·HAL库开发-STM32CubeMX简介、安装 | 新建STM32CubeMX工程步骤

      STM32CubeMX是ST开发的一款图形配置工具,可通过配置自动生成 初始化代码 (并不包括逻辑代码)。以下是STM32CubeMX官方宣传图片,适用于Windows和macOS系统,用于生成初始化代码,一个图形配置工具,搭配不同系列的STM32Cube固件包,即可支持不同系列的STM32芯片,初始化代码

    2024年02月17日
    浏览(31)
  • STM32 SYSTick高精度延时功能代码实现

    本篇文章将给大家讲解一下SYSTICK滴答定时器,以及讲解使用滴答定时器来实现高精度延时功能的代码。 SysTick定时器是嵌入式系统中常见的一个系统定时器,在ARM Cortex-M微控制器中广泛使用。下面是关于SysTick定时器的一些介绍: 用途: SysTick定时器通常被用作操作系统的时钟

    2024年02月22日
    浏览(21)
  • 2.基于正点原子STM32F103的定时器中断实验(HAL库实现)(cubeMX)

      基本上每一款MCU都会配备定时器这个外设,STM32 的每个通用定时器都是完全独立的,没有互相共享的任何资源。 同样,STM32F1系列的定时器功能也很强大,包括: TIM1和TIM8两个高级定时器; TIM2~TIM5是个通用寄存器; TIM7,TIM8,两个基本定时器。 由于本次实验适用于新手入门

    2023年04月26日
    浏览(137)
  • STM32开发——简介、开发环境(Keil5、CubeMX)、HAL库

    目录 1.简介-初识STM32 2.开发环境 2.1使用Keil5  2.2使用STM32CubeMX  3.标准库与HAL库区别 4.推挽输出与开漏输出 什么是单片机? 单片机(Single-Chip Microcomputer)是一种集成电路芯片,把具有数据处理能力的中央处 理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时

    2024年02月16日
    浏览(26)
  • STM32基于HAL库和STM32CubeMX的实时操作系统FreeRtOS开发

    1、FreeRTOS RTOS是一类操作系统,µC/OS,FreeRTOS,RTX,RT-Thread 等这些都是RTOS 类的操作系统 FreeRTOS 是众多RTOS 类操作系统中的一种,FreeRTOS 十分的小巧,可以在资源有限的微控制器中运行,FreeRTOS 也不仅仅局限于在微控制器中使用。就单从文件数量上来看FreeRTOS 要比µC/OS 少得多

    2024年02月21日
    浏览(20)
  • STM32CubeMX配置STM32G031多通道ADC采集(HAL库开发)

    时钟配置HSI主频配置64M  勾选打开8个通道的ADC  使能连续转换模式  配置好串口,选择异步模式 配置好需要的开发环境并获取代码  修改main.c 串口重定向  串口重定向一定要勾选Use Micro LIB  获取ADC通道值 主函数   串口输出

    2024年02月15日
    浏览(23)
  • STM32之HAL库微妙延迟(借助Systick)

    2024年02月11日
    浏览(19)
  • STM32CubeMX配置STM32G031多通道ADC + DMA采集(HAL库开发)

     时钟配置HSI主频配置64M  勾选打开8个通道的ADC  使能连续转换模式  添加DMA  DMA模式选择循环模式  使能DMA连续请求 采样时间配置160.5 转换次数为8  配置好8次转换的顺序  配置好串口,选择异步模式 配置好需要的开发环境并获取代码  修改main.c 串口重定向  串口重定向

    2024年02月08日
    浏览(18)
  • STM32CubeMx配置ADC(多通道采集+DMA读取数据)(HAL库开发)

    目录 1、函数配置过程(这是标准库配置过程): 2、STM32CubeMx配置过程  3、main函数源文件 采集5路ADC数据,并用串口printf()函数打印出来。 实验现象:  ADC转换的初始条件: 1、使能 2、触发源条件完成(这个需要自己配置)利用:HAL_ADC_Start_DMA()函数; ADC中HAL开发优势就是,

    2023年04月08日
    浏览(32)
  • 关于STM32的hal库中滴答定时器uwTick溢出的思考和分析

    思考:如果中断函数HAL_IncTick中的uwTick一直增加导致溢出会不会导致延时不准? 下面展示一些 STM32的官方库文件stm32f1xx_hal.c部分摘录 。 系统Tick频率设置为1毫秒中断一次,每1ms产生一次Tick中断, 在Tick中断中uwTick++; 那么当自增到0xFFFFFFFF后就会溢出,再从0开始自增 。 0xFFFF

    2024年03月21日
    浏览(23)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包