STM32 HAL库中实现uS延迟的3种方法
传感器的数据读取过程对时序有严格的要求,而us延迟是必不可少的。基于此要求,我将介绍三种实现美国延迟的方法。
该方法也适用于标准库。缺点也请指出。
实验的目的是使用普通的定时器来实现我们的延迟。使用Systick功能实现我们的延迟。
使用for循环来实现我们的延迟。 1.普通计时器实现我们的延迟。
使用定时器TIM2来实现我们的延迟。使用cubemx配置项目。
时钟是MCU的心脏。首先配置时钟。
1.1。内部RC高速时钟也可以用于外部时钟选择。
这次我们主要介绍外部高速时钟的使用。上图:8M晶体焊接在我的板上。
如果板子不是8M,请根据自己的晶振频率进行配置。在左侧的圆圈1中,您可以根据自己的晶体频率输入相应的频率。
经过分频和倍频后,系统时钟频率最大设置为168MHZ,APB1的时钟频率为84MHZ,以后也将使用TIM2上安装的时钟源的频率。 1.2。
TIM2基本配置这比较简单,分频系数为83,计数单位为84MHZ / 84 = 1uS,向上计数模式,周期为65535,因为不使用中断,因此无需打开中断。时钟和计时器的配置已完成,以下是cubemx生成项目时的几种设置,建议您检查它们。
首先是HAL库是否需要包含所有文件。我们选择只需要使用的文件。
这样可以缩短项目的编译时间,仅编译我们使用的库文件,然后检查以为每个外围设备生成一个单独的.c。 .h文件,必须检查这个建议,这将使代码结构非常清晰,第三点非常重要,使用cubemx的朋友在重新生成项目后是否每次都遇到过,之前添加的文件都消失了,如果这项目被选中,用户文件将被保留。
然后是编译器的选择,您可以根据自己喜欢的IDE进行选择,我选择了KEIL5。至此,配置工作完成,可以生成项目。
1.3。代码实现/ *通用计时器实现了我们的延迟* / void user_delaynus_tim(uint32_t& ns){ //设置计时器2的技术初始值__HAL_TIM_SetCounter(& htim2,differ); //启动计时器HAL_TIM_Base_Start(& htim2); while(& nbsp;< 0xffff-5)& nbsp; {& nbsp;& nbsp; differ& nbsp; =& nbsp; __ HAL_TIM_GetCounter(& amp; htim2);& nbsp;}} ; //关闭计时器HAL_TIM_Base_Stop(& amp; htim2);} / * 普通计时器可以实现ms延迟,您可以直接使用HAL库函数HAL_delay()* / void delay_ms_tim(uint16_t& nbsp; nms ){  ; uint32_t& nbsp; i; for(i = 0; i1000);} 1.4。
通过延迟翻转IO来实现效果。逻辑分析仪测试延迟时间。
延迟时间分别为20us和500ms。以下是测量图:2. Systick函数实现我们使用Delay 2.1。
Systick CM3和CM4的简介包括系统计数器SysTick,它是一个24位倒数计时器。当计数达到0时,它将自动从RELOAD寄存器中重新加载时序初始值。
只需将其放入SysTick->清除CTRL中的启用位,它将始终存在。寄存器介绍:相应代码在core_cm4.h / **中。
rief& nbsp;& nbsp;结构& nbsp;类型& nbsp;访问& nbsp;系统& nbsp; Timer& nbsp;(SysTick)。& nbsp; * / typedef 结构{& nbsp; & nbsp; __ IOM& nbsp; uint32_t& nbsp; CTRL; / *!& lt;偏移量:0x000(R / W)SysTick控制和状态寄存器* / __IOM / *!& lt;偏移量:0x004(R / W)SysTick重载值寄存器* / __IOM / *!& lt;偏移量:0x008(R / W)SysTick当前值寄存器* / __IM / *!& lt;偏移量:0x00C(R /)SysTick校准寄存器* /} SysTick控制和状态寄存器(0xE000_E010):该寄存器的位0:指示SysTick使能位,0指示关闭; 0指示关闭。
1表示亮; SysTick_CTRL_ENABLE_Mask;位1:指示SysTIck中断使能位0-表示关闭中断; 1-打开中断; SysTick_CTRL_TICKINT_Mask位2:表示
邮箱:tao@jepsun.com
联系人:汤经理 13316946190
联系人:陆经理 18038104190
联系人:李经理 18923485199
联系人:肖经理 13392851499
QQ:2065372476
地址:深圳市宝安区翻身路富源大厦1栋7楼
-
惯性保险丝:电路保护中的延迟响应机制
惯性保险丝是一种特殊设计的安全装置,用于保护电路免受瞬时高电流的损害。它结合了普通保险丝的功能与惯性元件的特点,能够在检测到电流突然增
-
加压法求等效电阻:一种创新的教学实验方法
在物理教学中,为了帮助学生更好地理解复杂电路的计算,教师们常常会采用各种直观的方法。其中,利用加压法来求解等效电阻是一种非常实用且易于
-
使用CYBUS3384总线开关实现5V Cypress PROM与3.3V系统之间的接口
在现代电子设计中,不同电压级别的设备之间进行通信可能会遇到兼容性问题。特别是当需要将一个工作在5V电压下的Cypress PROM与一个仅支持3.3V信号的系
-
使用电阻将24V降至5V:一种简易但非最佳实践方法
将24V电压降至5V通常不是通过单一电阻实现的,因为这会导致大量的功率损耗,并且无法精确控制输出电压。电阻降压是一种简单但效率极低的方法,不
-
数字万用表能否测量电容及其实现方法
数字万用表本身并不直接具备测量电容的功能,但可以通过一些间接的方法来估算电容器的容量。一种常见的方法是利用电阻档或二极管档进行简易测试
-
静电容寿命的影响因素及延长方法
静电容的寿命往往受到多种因素的影响,包括使用环境、工作电压、温度以及材料本身的特性等。一般来说,在正常的工作条件下,高质量的静电容可以
-
设计与实现自定义滤波器的方法
在信号处理和图像处理领域,自定义滤波器的设计与实现是一个关键步骤,它允许我们针对特定的应用需求来调整频率响应、通带和阻带等参数。设计自
-
Arduino平台上的光敏电阻控制LED灯实现方法
在Arduino平台上实现光敏电阻控制LED灯的项目是一种有趣且实用的学习体验。首先,需要准备的是Arduino开发板、光敏电阻、LED灯、限流电阻以及连接线等
-
UCC28063DR原装现货与真实库存的重要性及其在电源设计中的应用
UCC28063DR是一款由德州仪器(Texas Instruments)生产的高性能功率因数校正(PFC)控制器,广泛应用于电源管理领域,特别是在需要高效率和高功率因数的电
-
A*算法:一种高效的启发式搜索路径规划方法
A*算法是一种在图形平面上,有多个节点的路径中,寻找一条从起始点(source)到目标点(goal)的最短遍历路径的算法。它属于启发式搜索算法的一种,
-
利用电阻和电容构建延时电路的方法
要构建一个基于电阻(R)和电容(C)的简单延时电路,通常采用RC充电或放电电路。这种电路能够根据时间常数(τ = R*C)来控制信号延迟的时间长度。
-
MKL16Z128VLH4微控制器原装现货与真实库存的重要性
MKL16Z128VLH4是一款由NXP半导体公司生产的微控制器,属于Kinetis K系列。这款微控制器具有128KB的闪存和16KB的RAM,非常适合用于需要较高计算能力和存储空间
-
锯子的种类和使用方法
锯子是一种非常实用的手工具,在木工、建筑和其他许多领域都有广泛应用。不同的工作需要不同类型的锯子,因此了解锯子的种类及其使用方法是非常
-
温度计的种类和使用方法
在日常生活中,温度计是测量温度不可或缺的小工具。常见的温度计有水银温度计、电子温度计、红外线温度计、数字温度计等。每种温度计都有其特定
-
螺丝批的使用方法和种类
螺丝批是一种常见的工具,用于拧紧或松开螺丝。不同的螺丝需要不同类型的螺丝批来进行操作。螺丝批的种类包括一字螺丝批、十字螺丝批、六角螺丝
-
接线端子的种类和选择方法
接线端子是一种用于连接电线或电缆的电气元件,广泛应用于各种电子设备和电气系统中。选择合适的接线端子对于确保电路的安全性和可靠性至关重要