STM32CubeIDE HAL库微秒us的延时Delay实现
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实现相关推荐
- STM32CubeIDE HAL库操作IIC (二)案例篇(MPU9250)
接上一篇:STM32CubeIDE HAL库操作IIC (一)配置篇 目录 一.IIC协议操作MPU9250寄存器函数 二.MPU9250的操作(举例) 1.设置寄存器方法 2.读取寄存器方法 三.M ...
- STM32CubeIDE HAL库IIC实现气压计MS5637的数据读取
目录 一.配置 二.MS5637工作流程 1.复位 2.读取出厂校准参数 3.开启ADC及转换 4.读取数据(重复开启和读取,分别得到温度和气压值) 5.通过参数和数据计算得到标准单位的数据 三.代码 ...
- 一、STM32用HAL库实现uS级延时
一.应用场景 STM32CubeMX可视化初始化配置,结合 HAL 库,给STM32软件开发提高了效率,但 HAL 库封装的延时函数目前仅支持 mS 级别的延时,日常很多情况下会用到 uS延时,比如I ...
- STM32CubeIDE HAL库DMA方式驱动MPU925X(1)
一.准备工作 1. 所需硬件 MPU925X模块,stm32f103C8T6最小系统板,jlink烧录器,串口调试工具. MPU925X代表MPU9250(设备ID是0x71),MPU9255(设备I ...
- stm32延时us寄存器_自己写一个STM32 HAL库的US微秒延时函数
当本菜鸟开始接触STM32的时候还是看了原子哥的寄存器教程才跳坑的. 现在ST已经把HAL库推向了主流,但是令我不解的是,HAL那么强大,居然没有一个微秒级别的延时函数?! 黑人问号脸. 好了,废话不 ...
- STM32 HAL库IIC驱动
1. STM32上IIC的一些争议 关于STM32的IIC驱动,网上有很多争论,究竟是使用STM32自带的硬件IIC还是用IO口和软件模拟IIC呢?下面这个图形象展示了这些争论.总结一些:ST为了规避 ...
- STM32 使用HAL库实现微秒级长延时
STM32 使用HAL库实现微秒级长延时 背景 定时器初始化 主程序中的设计 背景 STM32 HAL库中有一个延时函数HAL_Delay(),可以实现毫秒级的延时,能够满足一般延时需求.在有些场合下 ...
- 【HAL库】STM32CubeMX开发----delay延时实验----NOP空指令
STM32CubeMX 下载和安装 详细教程 [HAL库]STM32CubeMX开发----STM32F103/F207/F407----目录 前言 HAL库有自带的 ms级 延时函数: HAL_De ...
- hal库实现us延时
用hal库实现us延时一般有两种做法,一种是用定时器,一种是用系统自带的滴答计数器 本文章主要介绍用系统自带的滴答计数器来实现延时 1.实现函数 void HAL_Delay_us(uint32_t ...
- [STM32CubeIDE]创建HAL库项目
利用STM32CubeIDE创建HAL库项目相对容易 *随着CubeIDE的版本更新使用ST-Link.J-Link以外的调试器越来越复杂 *系统时钟问题可以用MCO功能排查,不起振不一定是晶振的问题 ...
最新文章
- Python之路-python(Queue队列、进程、Gevent协程、Select\Poll\Epoll异步IO与事件驱动)
- Json.NET Deserialize时如何忽略$id等特殊属性
- HTML5获取autoComplete属性:告诉浏览器是否记录之前的输入值
- Android 第四课 活动的启动模式
- python写sql语句_Python操作文件模拟SQL语句功能
- eclipes快捷键
- 高可用集群 heartbeatv1实例
- [转]如何提升你的能力?给年轻程序员的几条建议
- Struts2 + Hibernate + Spring 以及javaweb模块问题解决(1)
- 如何使用SQL Server Reporting Services创建图像分类系统
- 橘子学Flink03之Flink的流处理与批处理
- 短视频拍摄技巧分享,巧用转场提升高级感,拥有自己的风格很重要
- springmvc考研交流平台 java ssm mysql
- FileUploadException: the request was rejected because no multipart boundary was found
- 多个乘法 用计算机什么符号,电脑乘法符号怎么打
- JavaScript数组空位的处理
- 2003-2017年中国地级城市城投债发行数额、利率等数据
- PTA甲级 1097 Deduplication on a Linked List (25分)-链表处理
- Oracle错误一览表1
- 【自用】simetrix/simplis使用体验及问题分析(2)
热门文章
- 【教程】如何查看自己的外网ip是不是公网ip
- SSD(Single Shot MultiBox Detector)原理详解
- css背景颜色设置后没生效
- Java StackTraceElement源码总结 StackTraceElement源码注释翻译和解析中英文对照版
- openStack开源云repo db local or on-line 实战部署之Ruiy王者归来
- LabVIEW编程LabVIEW开发研华PCI 1756例程与相关资料
- 徐思201771010132《面向对象程序设计(java)》第十四周学习总结
- Excel合并两列中的文本内容
- C:\Users\用户名\AppData\Roaming里面的文件可以删除吗?
- 整个AppData目录挪到D盘方法