前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >STM32使用定时器实现微秒(us)级延时

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

作者头像
跋扈洋
发布2023-09-02 10:25:23
2.2K0
发布2023-09-02 10:25:23
举报
文章被收录于专栏:物联网知识

引言

目前开发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的定时器大致分为三种:基本定时器、通用定时器和高级定时器。各个定时器和其时钟源的对应关系为:

其中,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. 配置时钟
  1. 配置定时器

定时器频率为 =TIMxCLK/(TIM_Prescaler+1)。定时器按照此频率计数,累计 TIM_Period 个后产生一个更新或者中断。

程序

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

代码语言:javascript
复制
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设定延时周期,之后打开定时器,等待事件标志位更新后关闭定时器。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-08-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 物联网知识 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 引言
  • 前期准备
  • 介绍
    • 系统时钟
      • 定时器时钟
      • 项目
        • 项目介绍
          • STM32CubeMX
            • 程序
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档