STM32使用定时器实现微秒(us)级延时

这篇具有很好参考价值的文章主要介绍了STM32使用定时器实现微秒(us)级延时。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

引言

目前开发STM32普遍使用HAL库,但 HAL 库封装的延时函数目前仅支持 ms 级别的延时,日常很多情况下会用到 us 延时,特别是一些传感器的数据读取过程,对时序要求比较严格,us 延时必不可少,因此我们今天来介绍STM32如何使用定时器实现微秒(us)级延时。

前期准备

  1. Keil 5
  2. STM32CubeMX
  3. STM32F407MCU

介绍

系统时钟

可通过多个预分频器配置 AHB 频率、高速 APB (APB2) 和低速 APB (APB1)。AHB 域的最 大频率为 168 MHz。高速 APB2 域的最大允许频率为 84 MHz。低速 APB1 域的最大允许频 率为 42 MHz。
STM32使用定时器实现微秒(us)级延时,STM32入门到精通(嵌入式开发基础),stm32,单片机,嵌入式硬件

定时器时钟

STM32的定时器大致分为三种:基本定时器、通用定时器和高级定时器。各个定时器和其时钟源的对应关系为:
STM32使用定时器实现微秒(us)级延时,STM32入门到精通(嵌入式开发基础),stm32,单片机,嵌入式硬件
其中,TIM1和TIM8是高级定时器;TIM2-TIM5、TIM9-TIM14是通用定时器;TIM6和TIM7为基本定时器。

  • 高级控制定时器(TIM1 和 TIM8)包含一个 16 位自动重载计数器,该计数器由可编程预分频器驱动。此类定时器可用于各种用途,包括测量输入信号的脉冲宽度(输入捕获),或者生成输出波形(输出比较、PWM 和带死区插入的互补 PWM)。使用定时器预分频器和 RCC 时钟控制器预分频器,可将脉冲宽度和波形周期从几微秒调制 到几毫秒。
  • 通用定时器包含一个 16 位或 32 位自动重载计数器,该计数器由可编程预分频器驱动。它们可用于多种用途,包括测量输入信号的脉冲宽度(输入捕获)或生成输出波形(输出比较和 PWM)。使用定时器预分频器和 RCC 时钟控制器预分频器,可将脉冲宽度和波形周期从几微秒调制 到几毫秒。
  • TIM9 到 TIM14 通用定时器包含一个 16 位自动重载计数器,该计数器由可编程预分频器 驱动。它们可用于多种用途,包括测量输入信号的脉冲宽度(输入捕获),或者生成输出波形(输出比较、PWM)。使用定时器预分频器和 RCC 时钟控制器预分频器,可将脉冲宽度和波形周期从几微秒调制到几毫秒。
  • 基本定时器 TIM6 和 TIM7 包含一个 16 位自动重载计数器,该计数器由可编程预分频器驱动。此类定时器不仅可用作通用定时器以生成时基,还可以专门用于驱动数模转换器 (DAC)。实 际上,此类定时器内部连接到 DAC 并能够通过其触发输出驱动 DAC。

项目

项目介绍

实现一个us级延时

STM32CubeMX

  1. 配置时钟
    STM32使用定时器实现微秒(us)级延时,STM32入门到精通(嵌入式开发基础),stm32,单片机,嵌入式硬件

  2. 配置定时器
    STM32使用定时器实现微秒(us)级延时,STM32入门到精通(嵌入式开发基础),stm32,单片机,嵌入式硬件
    定时器频率为 =TIMxCLK/(TIM_Prescaler+1)。定时器按照此频率计数,累计 TIM_Period 个后产生一个更新或者中断。

程序

定时器相关配置程序都由STM32CubeMX帮助我们生成了,我们主要来编写一下微秒级延时函数。

void delay_us(uint32_t us)
{
	// Set timer period for desired delay in microseconds
  __HAL_TIM_SET_AUTORELOAD(&htim2, us - 1);//定时器响应时间为period*定时器频率
	HAL_TIM_Base_Start(&htim2);//start the timer
	//通过轮询的方式等待定时器的更新事件
	//当定时器溢出并计数器更新时,TIM_FLAG_UPDATE标志会被置位。
	while(__HAL_TIM_GET_FLAG(&htim2,TIM_FLAG_UPDATE)==RESET);
	__HAL_TIM_CLEAR_FLAG(&htim2,TIM_FLAG_UPDATE);//清楚更新标志位
		HAL_TIM_Base_Stop(&htim2);//Stop the timer
}

上述程序首先通过__HAL_TIM_SET_AUTORELOAD设定延时周期,之后打开定时器,等待事件标志位更新后关闭定时器。文章来源地址https://www.toymoban.com/news/detail-663184.html

到了这里,关于STM32使用定时器实现微秒(us)级延时的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【STM32笔记】STM32的定时器开发基础(二)(基于STM32CubeMX实现定时器中断)

      传统STM32外部中断 的设计步骤:  (1)将GPIO初始化为输入端口。  (2)配置相关I/O引脚与中断线的映射关系。  (3)设置该I/O引脚对印的中断触发条件。  (4)配置NVIC,并使能中断。  (5)编写中断服务函数。   基于STM32CubeMX的外部中断 设计步骤  (1)在STM3

    2024年02月20日
    浏览(62)
  • STM32定时器使用计算

    一、使用例程代码: 二、定时时间计算:

    2024年02月12日
    浏览(56)
  • STM32通用定时器的使用

    (1)使能定时器时钟 本章定时器实验,我们使用的是通用定时器 TIM4,我们知道 TIM4 是挂接在 APB1 总线上的,所以可以使用 APB1 总线时钟使能函数来使能 TIM4 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);//使能 TIM4 时钟 (2)初始化定时器参数,包含自动重装值,分频系数,计数方式

    2024年02月10日
    浏览(41)
  • STM32定时器实现红外接收与解码

             红外遥控是一种比较常用的通讯方式,目前红外遥控的编码方式中,应用比较广泛的是NEC协议。NEC协议的特点如下: 载波频率为 38KHz 8 位地址和 8位指令长度 地址和命令2次传输(确保可靠性) PWM 脉冲位置调制,以发射红外载波的占空比代表“0”和“1”    

    2024年02月03日
    浏览(34)
  • STM32定时器中断的使用示例

    上一篇博客实现了定时器输出pwm,这篇接着上次的工程,在上次的工程上做简单的配置即可 硬件使用的是stm32h750vbt6; 软件用到了stm32cubemx和keil5; 勾选打开dma3的中断 在main.c中相应位置添加以下代码 MAIN函数中: 这一句很重要,开启定时器计数 可以看到在每次TM3溢出后触发

    2024年02月16日
    浏览(49)
  • 【学习记录】STM32利用定时器中断实现定时闪烁指示灯

    任务:定时闪烁指示灯 任务目标: 掌握 CubeMX 软件配置定时器实现定时功能的方法。 任务内容: 控制开发板上的指示灯LED每隔1s闪烁。 任务实现: 使用的STM32芯片是STM32F407ZET6 第一步:设置高速时钟,设置LED 第二步:配置TIM10时钟为100MHz,故可以设置预分频系数PSC为9999,自

    2024年02月05日
    浏览(59)
  • 【MT32F006】MT32F006之定时器延时

    本文最后修改时间:2023年03月30日 一、本节简介 本文介绍如何使用MT32F006的定时器做us、ms级的延时。 二、实验平台 库版本:V1.0.0 编译软件:MDK5.37 硬件平台:MT32F006开发板(主芯片MT32F006) 仿真器:JLINK 三、版权声明 1)作者:甜甜的大香瓜 2)声明:喝水不忘挖井人,转载

    2024年02月12日
    浏览(43)
  • stm32的学习——SysTick定时器的使用

    SysTick定时器也称为滴答定时器,SysTick定时器是内核中的一个外设,内嵌在NVIC(嵌套向量中断控制器)里面,在cortex M3、M4中都存在,很方便用户移植。 虽然我用的是cortex M4的内核,但是他的内核文档在这方面和Cortex M3的相似。 所以我这里参考了M3的内核中文文档。M3和M4内核

    2024年02月04日
    浏览(40)
  • STM32使用CubeMx配置定时器输出PWM

            项目中经常使用到STM32来输出PWM,每次配置过后过不了多久就会忘记,稍微需要对配置做出修改时都要翻很久的手册,所以决定结合实例把PWM配置的详细步骤记录下来,这样在下次配置时可以很快的捡起来。         本文档的行文结构如下,首先,说明实际需

    2024年02月03日
    浏览(69)
  • STM32使用高级定时器输出互补pwm波

    最近做的一个项目用到stm32,网上查了很多资料,也踩了很多坑,这里记录一下配置的步骤和说明 硬件使用的是stm32h750vbt6; 软件用到了stm32cubemx和keil5; 打开Debug模式方便调试,可以忽略,不影响代码运行 在用cube配置时钟源时,有下面三个选项 Disable(禁用) BYPASS Clock Sou

    2024年02月16日
    浏览(74)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包