Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
HC-SR04软件包
rt-smart
中断
rt-smart学习笔记——中断模式控制超声波测距HC-SR04模块
发布于 2022-01-03 18:58:41 浏览:1409
订阅该版
[tocm] ## 一、思路 现在是入门学习rt-smart阶段,看到高手有直接使用软件包,使用sensor框架,这些我还没有深入学习到。之前在裸板上实现的思路,相对简单直接一点,因为硬件GPT自带有Capture中断及管脚,参考这个思路,使用一个GPIO连接SR04模块的ECHO,在ECHO信号的边沿进入中断,读取GPT的tick。 - 10us触发:使用pwm设备提供 - echo接收:使用PIN中断 ## 二、实现 ###### 主要函数 ``` int sr04_enable(void);/*初始化PWM,初始化PIN,并启动PWM、使能PIN中断*/ uint32_t sr04_get_timespan(void);/*获取ECHO的高电平时间*/ int sr04_disable(void);/*关闭PWM,关闭中断*/ ``` ### `sr04_get_timespan()`的实现 使能和关闭函数相对简单,这里主要说明一下获取时间的实现过程 ##### Step1 ECHO管脚中断服务函数 系统在收到ECHO边沿信号后进入该中断服务函数 在中断服务函数中根据电平值判断上升/下降沿 ``` uint32_t timespan = 0; void set_timespan(void *args) { uint32_t current_tick = rt_hw_get_tick(); if (rt_pin_read(HR04_ECHO_PIN) == PIN_LOW) { timespan = current_tick - previous_tick; } previous_tick = current_tick; } ``` #### Step2 读取timespan 应用程序可以调用该函数获取当前的时间值,在模块里不计算距离,由调用的应用程序计算 ``` uint32_t sr04_get_timespan(void) { return timespan; } ``` ## 三、调用 在应用程序中调用该功能 ``` sr04_enable(); uint32_t distance; while (1) { /*GPT用的时钟分频后为1M,1us对应0.17mm*/ distance = sr04_get_timespan() * 0.17; rt_kprintf("distance: %d\n", distance);/*float用rt_kprintf打印不出来,截取成整型了*/ rt_thread_mdelay(100); } ``` ## 四、总结 由于对rt-smart核心的运行还不是很了解,之前担心使用轮询或阻塞的方式会导致不准(一个系统时间片设置为1ms,而echo电平时间可能小于1ms),后来看了论坛里用这个方法是没有问题的。两种方法相比,在资源上区别还是挺大的,这也是大家不采用中断方法的原因吧 - 阻塞方法: - 即用即开 - 资源占用少 - 中断方法 - 使能期间一直工作 - 资源占用多 后续学习sensor框架,使用框架来实现。 欢迎指正。
2
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
ledoen
这家伙很懒,什么也没写!
文章
2
回答
4
被采纳
0
关注TA
发私信
相关文章
1
使用CmBacktrace定位错误异常,请教分析原因
2
ARM9、raspberry-pi中断问题
3
内联函数不压栈,会因为中断导致栈内现场被破坏吗
4
rt_hw_context_switch_interrupt的逻辑
5
中断的入口程序在哪个文件里?
6
我想实现一个定时器中断,发现rt_hw_interrupt_install未定义
7
临界区和关中断,是否需要同时使用?
8
gpio 引脚一直进中断,请问怎么办呢?
9
RT-Thread那些API可以在中断程序中调用?
10
spi dma 中断接收的问题
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
freemodbus
PWM
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
中断
编译报错
Debug
SFUD
rt_mq_消息队列_msg_queue
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
a1012112796
10
个答案
1
次被采纳
踩姑娘的小蘑菇
4
个答案
1
次被采纳
红枫
4
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
Ryan_CW
4
个答案
1
次被采纳
本月文章贡献
catcatbing
3
篇文章
5
次点赞
YZRD
2
篇文章
4
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
Woshizhapuren
1
篇文章
5
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部