STM32 us精确延时方式

2023-11-03


本文纯属记录自己学习历程,如有不妥之处,欢迎指正。

使用TIM定时器方式延时

使用STM32CubeMX配制TIM1定时,如下图所示
在这里插入图片描述

自动重装载值为1,向上计数模式,预分频系数为168-1,也就是167(这里我用的是F407的板子做的示例,F407芯片主频为168Mhz,设置这个分频系数,TIM1 的时钟频率为1Mhz,也就是说每1s计数1000000次,换算过来也就是说,1us计数一次)。另外,如果使用的是TIM2-7,这几路定时器时钟频率最高84Mhz,分频系数要做修改。
下面是延时函数

void delay_us(uint16_t us)
{
    uint16_t delay=0xffff-us-5;				//65535-5-us,计数初值,由这个数
    										//计数到65535刚好计数us次,也就实
    										//现了nus延时
    HAL_TIM_Base_Start(&htim1);  			//开启定时器
    __HAL_TIM_SetCounter(&htim1,delay);		//设置计数值
    while(delay<0xffff-5)
    {
        delay=__HAL_TIM_GetCounter(&htim1); //获取当前计数值
    }
    HAL_TIM_Base_Stop(&htim1);
}

延时函数测试代码如下

void LedTask_Function(void const * argument)
{
	portTickType tick = xTaskGetTickCount();
	
	while(1)
	{
		HAL_GPIO_WritePin(LED_2_GPIO_Port,LED_2_Pin,GPIO_PIN_SET);
		delay_us(10);
		HAL_GPIO_WritePin(LED_2_GPIO_Port,LED_2_Pin,GPIO_PIN_RESET);
		delay_us(10);
	}

}

延时效果如图所示
在这里插入图片描述
由图像可以看出,引脚输出的高低电平时间为10.4us,延时效果较为理想

还有其他定时器计数方式,只要了解原理,可以灵活的实现精确延时,另外不建议在较为复杂的系统中使用TIM中断延时,容易出现问题。

使用空代码方式延时

空代码演延时方式精确度略低于定时器延时,但是对于一些us延时精度不是很高的场景已经足够使用。

F103系列

F103系列芯片主频72MHz

/**
 * @funNm : delay_sys_us
 * @brief : 延时nus
 * @param : nus:要延时的us数.	0~204522252(最大值即2^32/fac_us@fac_us=168)	 
 * @retval: void
 */
void delay_sys_us(uint32_t Delay)//1个delay,大概1.5us
{
	uint32_t cnt = Delay * 8;  
    uint32_t i = 0;
    for(i = 0; i < cnt; i++)__NOP();
}

F429系列

F429芯片主频180MHz,执行一条指令时间相较于F103系列芯片会短很多,F429系列us延时函数如下

void delay_sys_us(uint32_t Delay)
{
  uint32_t cnt = Delay*35; 
  uint32_t i = 0;

	for(i=0;i<cnt;i++)__NOP();
}	;

延时效果如图
在这里插入图片描述
由波形图可以看出,使用这种延时方式,也可以做到us级延时,但是仔细看会发现,这种波形的延时周期并不稳定,所以较高要求的延时还是尽量使用TIM定时器延时

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32 us精确延时方式 的相关文章

随机推荐

  • JSP、servlet运行原理

    一 jsp和servlet的区别 servlet是用Java编写的服务器端程序 其主要功能在于交互式地浏览和修改数据 生成动态Web内容 狭义的Servlet是指Java语言实现的一个接口 广义的Servlet是指任何实现了这个Servle
  • es-5数据同步

    向ES里面添加数据 logstash kabina javaapi restful api 重点介绍一下logstash 是一个数据同步工具 可以动态地将来自不同数据源的数据统一起来 并将数据标准化到其他任何数据源 其实最常见的使用场景是将
  • 思考::战略藐视:RTOS 高级多任务调度器 (***)

    战略藐视 RTOS 高级任务调度器 压力大 将 RTOS 视为操作系统 则似乎有很大的学习心里压力 复杂 耗时 有难度 减压 将它们视为是 某种 高级多任务调度器 来学习 就好了 这样似乎就简单了 心里压力也就小了 或者 将它们视为是 某种
  • 基于Python生成Markdown的标题序号

    import sys import os import time import re headline title sign list 用于判断标题产生环境 titles added number 保存嵌入了编号的标题 用于产生新编号 is
  • Java的内部类

    学习笔记 内部类 内部类访问特点 1 内部类可以直接访问外部类中的成员 2 外部类要访问内部类 必须建立内部类的对象 一般用于类的设计 分析事物时 发现该事物描述中还有事物 而且这个事物还在访问被描述事物的内容 这时就是 还有的事物 定义成
  • iOS进阶_多线程(二.线程间的状态)

    ViewController m 004 NSThread状态 Created by mac on 2018 4 27 Copyright 2018年 mac All rights reserved import ViewControlle
  • TencentOS-tiny 时间管理(十 六)- 时间片轮转机制

    一 时间管理 时间片轮转机制 概述 TencentOS tiny操作系统内核是一个抢占式内核 抢占式内核的特点是 如果最高优先级的任务不放弃CPU 调用tos task delay tos task yeild等主动放权 或者任务间同步通信
  • 深度学习:不平衡的二分类,precise与recall

    在不平衡的二分类问题中 一般数量较少的样本标签为1 precise 预测为正样本中真实为正样本的比例 recall 真实为正样本中预测为正样本的比例 f1 score precise与recall的调和平均 两者中较小值的起决定性作用
  • 配置防火墙,开启80端口、3306端口 & iptables 使用详解

    1 配置防火墙 开启80端口 3306端口 vi etc sysconfig iptables A INPUT m state state NEW m tcp p tcp dport 80 j ACCEPT 允许80端口通过防火墙 A IN
  • GIT常用命令大全——赶紧收藏

    史上最全的GIT常用命令都在这里啦 全是干货 建议收藏起来 反复观看 一 git安装后 指定名称和邮箱 git config global user name Your Name git config global user email e
  • Linux cache介绍及控制

    有关Cache 文件缓存是提升性能的重要手段 毋庸置疑 读缓存 Read caching 在绝大多数情况下是有益无害的 程序可以直接从RAM中读取数据 而写缓存 Write caching 则相对复杂 Linux内核将写磁盘的操作分解成了
  • salt 服务器信息收集,使用saltstack自定义模块获取服务器的信息

    1 查看MASTER的BASE路径 在对应的路径建立 modules文件夹 存放 py的模块 root v72 modules cat etc salt master grep file roots A 5 file roots base
  • c语言 学生成绩信息综合管理系统(包含文件写入读出,链表,冒泡排序....)

    include
  • Kendo UI开发教程(27): 移动应用开发简介

    Kendo UI 支持开发Web应用 前面介绍的SPA 也支持开发移动应用 至于使用 HTML5 JavaScript CSS开发移动是不是一个好的选择不在本文的讨论之中 Kendo UI Mobile提供了一种快速开发跨手机平台的方法 K
  • linux dev/zero,/dev/zero是什么意思

    hsvea 于 2009 10 16 10 35 03发表 dev zero 是一个输入设备 你可你用它来初始化文件 dev zero 该设备无穷尽地提供0 可以使用任何你需要的数目 设备提供的要多的多 他可以用于向设备或文件写入字符串0
  • Pycharm 安装第三方库报错及解决方案——no such option: --build-dir

    Pycharm 安装第三方库报错及解决方案 no such option build dir Pycharm 安装第三方库报错及解决方案 no such option build dir 最近在学习路径规划相关内容 在运行GitHub上下载
  • 数据结构知识整理

    基于严蔚敏及吴伟民编著的清华大学C语言版教材并结合网上相关资料整理 http www docin com p 2027739005 html 第一章 绪论 1 数据结构 是一门研究非数值计算的程序设计问题中计算机的操作对象以及他们之间的关系
  • varifocal loss(VFL)介绍

    文章目录 一 论文链接 二 公式理解 代码 一 论文链接 https arxiv org pdf 2008 13367 pdf 二 公式理解 简单说明下 这里的IACS是IoU aware classification score的缩写 V
  • spring校验注解@valid和@validated重点获取校验消息

    spring校验注解 valid和 validated重点获取校验消息 valid作用范围类 方法参数 成员变量 可以用来做嵌套校验 validated作用范围类 方法参数 不可以用来做嵌套校验 可以分组 valid不可以分组 可以做一个全
  • STM32 us精确延时方式

    STM32精确延时方式 使用TIM定时器方式延时 使用空代码方式延时 F103系列 F429系列 本文纯属记录自己学习历程 如有不妥之处 欢迎指正 使用TIM定时器方式延时 使用STM32CubeMX配制TIM1定时 如下图所示 自动重装载