STM32——超声波传感器


需求:

使用超声波测距,当手离传感器距离小于 5cm 时, LED1 点亮,否则保持不亮状态

接线:

定时器配置:

使用 TIM2 ,只用作计数功能,不用作定时。
将 PSC 配置为 71 ,则计数 1 次代表 1us 。

编写微秒级函数:

1、总结 微秒级定时:

这个延迟函数的实现利用了定时器 TIM2 的计数器来测量时间,从而实现微秒级的延迟。在一些嵌入式系统中,这种方式是常见的延迟实现方法。请注意,这种忙等待的方式可能在一些场景中不够精确,因为它依赖于系统的时钟频率。在一些要求更高精度的场合,可能需要采用其他延迟方式,比如使用硬件定时器或者其他精确的定时方法。

2、(1 * n_us)-1)是什么意思?为什么要减一呢?

表达式 (1 * n_us) - 1 其实等价于 n_us - 1。在这里,1 * n_us 实际上就是 n_us,因为任何数乘以1都等于它本身。所以,这个表达式就是为了减小 n_us 的值。

在实际应用中,通常采用这种方式是为了确保延迟的准确性。假设你要延迟 10 微秒,但由于延迟函数本身也需要一定的时间,为了确保总延迟时间是准确的,你可能会将计数器的目标值设置为 n_us - 1。

例如,如果 n_us 为10,那么 (1 * n_us) - 1 就是 9。这意味着在计数器达到9之前,循环会一直等待。这是一种补偿,以考虑延迟函数自身的执行时间,确保总体延迟接近预期值。

主函数:

1、__HAL_TIM_ENABLE(&htim2);和HAL_TIM_Base_Start(&htim2);有啥区别?

__HAL_TIM_ENABLE(&htim2) 和 HAL_TIM_Base_Start(&htim2) 都是用于启动定时器 TIM2 的函数,但是它们在调用的时候可能存在一些微妙的区别。

  1. __HAL_TIM_ENABLE(&htim2):

    • 这是一个宏,通常在 HAL 库中用于启用定时器。
    • 它可能直接设置定时器的控制寄存器中的相应位,使定时器开始计数。
    • 在 HAL 库中,这个宏可能执行一些底层的配置操作,以确保定时器正常工作。
  2. HAL_TIM_Base_Start(&htim2):

    • 这是 HAL 库中的一个函数,用于启动定时器。
    • 这个函数可能执行一系列初始化步骤,包括设置定时器的模式、分频因子等。
    • 与 __HAL_TIM_ENABLE 不同,HAL_TIM_Base_Start 是一个函数调用,而不是宏,因此它可能包含一些更复杂的逻辑。

在很多情况下,这两者可以互换使用,因为在 HAL 库中,__HAL_TIM_ENABLE 实际上调用了 HAL_TIM_Base_Start。然而,如果你要使用底层的 HAL 库以外的特定功能,可能需要查看它们的具体实现以了解更多细节。

总的来说,如果你在使用 STM32 的 HAL 库,并且只是简单地启动定时器,这两者可能没有太大的区别。在更复杂的应用中,可能需要查看具体的 HAL 库文档或源代码以了解更多信息。

2、 __HAL_TIM_SetCounter(&htim2, 0);

__HAL_TIM_SetCounter(&htim2, 0); 是一个用于设置定时器计数器初值的宏。在这里,htim2 表示 TIM2 定时器的配置。

这行代码的作用是将 TIM2 的计数器的值设置为0。通常在测距应用中,当开始测量 Echo 信号的时间时,需要先将计数器清零,然后开始计时。这样可以确保你测量的是一个相对的时间,而不是累积的时间。

3、__HAL_TIM_GetCounter(&htim2)

__HAL_TIM_GetCounter(&htim2) 是一个用于获取定时器计数器当前值的宏。在这个上下文中,htim2 是一个结构体或指针,表示 TIM2 定时器的配置。这个宏会读取 TIM2 的计数器寄存器的当前值,并返回该值。

相关推荐
wuyk5551 小时前
Keil工具链-第05讲-启动文件与__main到底做了什么
c语言·stm32·单片机·嵌入式硬件·物联网
shijuejianceliu7 小时前
传统规则视觉与嵌入式AI智能相机的技术差异
人工智能·嵌入式硬件·视觉检测·相机
Zw-awa10 小时前
OLED为什么能显示字:软件I2C换成硬件I2C
stm32
不脱发的程序猿11 小时前
GD32串口数据收进内存之后DMA如何处理?
单片机·嵌入式硬件·dma·嵌入式·串口通信·gd32
FPGA小迷弟15 小时前
FPGA 与千兆以太网校验和:从原理到 Verilog 实现
嵌入式硬件·fpga开发·无人机·ai编程·fpga
Zw-awa1 天前
协议是人为约定:同一个字节能有三种意思
stm32
国科安芯1 天前
83 倍:ASC0108S 在推挽和开漏之间,差的不是速度,是回程
单片机·嵌入式硬件·架构·电平转换·抗辐射
国科安芯1 天前
从遥控到自治:ASP4644S2B支撑星载电源健康管理与容错配电
网络·单片机·嵌入式硬件·安全·dcdc·低轨卫星·商业航天
rhythm-ring1 天前
《汽车热管理系统:电子水泵单线PWM双向诊断机制》
单片机·嵌入式硬件·汽车
Dev_XH2 天前
【成品设计】基于物联网的车间安全生产监控系统设计
stm32·单片机·嵌入式硬件·物联网