网站目录提交,wordpress doc嵌入,海外医疗网站建设,设计网站faq需注意需求#xff1a; 使用超声波测距#xff0c;当手离传感器距离小于 5cm 时#xff0c; LED1 点亮#xff0c;否则保持不亮状态 接线#xff1a; 定时器配置#xff1a; 使用 TIM2 #xff0c;只用作计数功能#xff0c;不用作定时。 将 PSC 配置为 71 #xff0c;… 需求 使用超声波测距当手离传感器距离小于 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 的函数但是它们在调用的时候可能存在一些微妙的区别。 __HAL_TIM_ENABLE(htim2): 这是一个宏通常在 HAL 库中用于启用定时器。它可能直接设置定时器的控制寄存器中的相应位使定时器开始计数。在 HAL 库中这个宏可能执行一些底层的配置操作以确保定时器正常工作。 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 的计数器寄存器的当前值并返回该值。