HAL库和LL库都没有自带的微秒级延时,但是修改SysTick的配置会影响其他部分。经过几天的实验,浏览了不少资料,分享以下三种延时方法。

一、利用定时器实现微秒延时

1. MX配置

2. <tim.c>

/* USER CODE BEGIN 1 */
void delayXus(uint32_t us)
{(&htim3)->Instance->CNT = (0x0000efff -us*8);//  __HAL_TIM_SET_COUNTER(&htim3,differ);//  HAL_TIM_Base_Start(&htim3);SET_BIT(TIM3->CR1, TIM_CR1_CEN);//__HAL_TIM_GET_COUNTER(&htim3);while(((&htim3)->Instance->CNT) < 0x0000effe)  //  READ_REG(TIM3->CNT) {}
//  HAL_TIM_Base_Stop(&htim3);CLEAR_BIT(TIM3->CR1, TIM_CR1_CEN);
}
/* USER CODE END 1 */

二、利用已有的SysTick配置,读取计数判断延迟,精确且不浪费资源

void delay_us(uint32_t udelay)
{uint32_t startval,tickn,delays,wait;startval = SysTick->VAL;tickn = HAL_GetTick();//sysc = 72000;  //SystemCoreClock / (1000U / uwTickFreq);delays =udelay * 72; //sysc / 1000 * udelay;if(delays > startval){while(HAL_GetTick() == tickn){}wait = 72000 + startval - delays;while(wait < SysTick->VAL){}}else{wait = startval - delays;while(wait < SysTick->VAL && HAL_GetTick() == tickn){}}
}

三、利用指令耗时计算延迟

void RCCdelay_us(uint32_t udelay)
{__IO uint32_t Delay = udelay * 72 / 8;//(SystemCoreClock / 8U / 1000000U)//见stm32f1xx_hal_rcc.c -- static void RCC_Delay(uint32_t mdelay)do{__NOP();}while (Delay --);
}

STM32CubeIDE HAL库微秒us的延时Delay实现相关推荐

  1. STM32CubeIDE HAL库操作IIC (二)案例篇(MPU9250)

    接上一篇:STM32CubeIDE HAL库操作IIC (一)配置篇 目录 一.IIC协议操作MPU9250寄存器函数 二.MPU9250的操作(举例) 1.设置寄存器方法 2.读取寄存器方法 三.M ...

  2. STM32CubeIDE HAL库IIC实现气压计MS5637的数据读取

    目录 一.配置 二.MS5637工作流程 1.复位 2.读取出厂校准参数 3.开启ADC及转换 4.读取数据(重复开启和读取,分别得到温度和气压值) 5.通过参数和数据计算得到标准单位的数据 三.代码 ...

  3. 一、STM32用HAL库实现uS级延时

    一.应用场景 STM32CubeMX可视化初始化配置,结合 HAL 库,给STM32软件开发提高了效率,但 HAL 库封装的延时函数目前仅支持 mS 级别的延时,日常很多情况下会用到 uS延时,比如I ...

  4. STM32CubeIDE HAL库DMA方式驱动MPU925X(1)

    一.准备工作 1. 所需硬件 MPU925X模块,stm32f103C8T6最小系统板,jlink烧录器,串口调试工具. MPU925X代表MPU9250(设备ID是0x71),MPU9255(设备I ...

  5. stm32延时us寄存器_自己写一个STM32 HAL库的US微秒延时函数

    当本菜鸟开始接触STM32的时候还是看了原子哥的寄存器教程才跳坑的. 现在ST已经把HAL库推向了主流,但是令我不解的是,HAL那么强大,居然没有一个微秒级别的延时函数?! 黑人问号脸. 好了,废话不 ...

  6. STM32 HAL库IIC驱动

    1. STM32上IIC的一些争议 关于STM32的IIC驱动,网上有很多争论,究竟是使用STM32自带的硬件IIC还是用IO口和软件模拟IIC呢?下面这个图形象展示了这些争论.总结一些:ST为了规避 ...

  7. STM32 使用HAL库实现微秒级长延时

    STM32 使用HAL库实现微秒级长延时 背景 定时器初始化 主程序中的设计 背景 STM32 HAL库中有一个延时函数HAL_Delay(),可以实现毫秒级的延时,能够满足一般延时需求.在有些场合下 ...

  8. 【HAL库】STM32CubeMX开发----delay延时实验----NOP空指令

    STM32CubeMX 下载和安装 详细教程 [HAL库]STM32CubeMX开发----STM32F103/F207/F407----目录 前言 HAL库有自带的 ms级 延时函数: HAL_De ...

  9. hal库实现us延时

    用hal库实现us延时一般有两种做法,一种是用定时器,一种是用系统自带的滴答计数器 本文章主要介绍用系统自带的滴答计数器来实现延时 1.实现函数 void HAL_Delay_us(uint32_t ...

  10. [STM32CubeIDE]创建HAL库项目

    利用STM32CubeIDE创建HAL库项目相对容易 *随着CubeIDE的版本更新使用ST-Link.J-Link以外的调试器越来越复杂 *系统时钟问题可以用MCO功能排查,不起振不一定是晶振的问题 ...

最新文章

  1. Python之路-python(Queue队列、进程、Gevent协程、Select\Poll\Epoll异步IO与事件驱动)
  2. Json.NET Deserialize时如何忽略$id等特殊属性
  3. HTML5获取autoComplete属性:告诉浏览器是否记录之前的输入值
  4. Android 第四课 活动的启动模式
  5. python写sql语句_Python操作文件模拟SQL语句功能
  6. eclipes快捷键
  7. 高可用集群 heartbeatv1实例
  8. [转]如何提升你的能力?给年轻程序员的几条建议
  9. Struts2 + Hibernate + Spring 以及javaweb模块问题解决(1)
  10. 如何使用SQL Server Reporting Services创建图像分类系统
  11. 橘子学Flink03之Flink的流处理与批处理
  12. 短视频拍摄技巧分享,巧用转场提升高级感,拥有自己的风格很重要
  13. springmvc考研交流平台 java ssm mysql
  14. FileUploadException: the request was rejected because no multipart boundary was found
  15. 多个乘法 用计算机什么符号,电脑乘法符号怎么打
  16. JavaScript数组空位的处理
  17. 2003-2017年中国地级城市城投债发行数额、利率等数据
  18. PTA甲级 1097 Deduplication on a Linked List (25分)-链表处理
  19. Oracle错误一览表1
  20. 【自用】simetrix/simplis使用体验及问题分析(2)

热门文章

  1. 【教程】如何查看自己的外网ip是不是公网ip
  2. SSD(Single Shot MultiBox Detector)原理详解
  3. css背景颜色设置后没生效
  4. Java StackTraceElement源码总结 StackTraceElement源码注释翻译和解析中英文对照版
  5. openStack开源云repo db local or on-line 实战部署之Ruiy王者归来
  6. LabVIEW编程LabVIEW开发研华PCI 1756例程与相关资料
  7. 徐思201771010132《面向对象程序设计(java)》第十四周学习总结
  8. Excel合并两列中的文本内容
  9. C:\Users\用户名\AppData\Roaming里面的文件可以删除吗?
  10. 整个AppData目录挪到D盘方法