Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
STM32F407
HWTIMER_硬件定时器
微秒级时间
10
rtthread如何实现代码微秒级别控制
发布于 2025-09-05 10:18:12 浏览:402
订阅该版
公司使用了STM32F407VGT6单片机,分别连接一个红外发射器和一个红外接收器,发射器定时器定时输出PWM波形驱动发光二极管,接收器的二极管接收到指定光以后会有一个高低电平的信号,通过这个信号来判断发射接收器之间是否被遮挡。 所使用的发射器不能长时间发光,数据手册提到的是发光时长要控制在200us~800us之间,我程序设计的是每100ms循环一次,循环内执行:驱动发射器发送光信号→延迟600us后判断接收器引脚电平→关闭发射器→等待100ms执行下一次判断 之前我用裸机环境使用如下代码: ```c // 2000 运行约430us, 2320约500us, 2800约602us void Delay(void) { for(int i=0;i<2800;i++) { for(int j=0;j<10;j++); } } ``` 延迟控制和引脚电平判断没有问题,后来功能扩展以后开始使用rtthread进行开发,同样的代码在rtthread上我发现需要1.6ms左右才能执行完毕,导致超过了发射器发光时长关闭了,读取接收器状态时就一直无法接收到信号从而判断异常,我也有改用rt_hw_us_delay(600); 但是问题依旧如此。 请问导致此问题的原因可能是哪些呢?网上搜了下资料说是rtthread任务调度导致的,执行代码时切换到了别的进程,但是我在这个发射接收流程中没有用到rt_thread_mdelay()这种导致切换线程的代码,这方面的知识我该到哪找呢? 另外是否有合适的代码可以确保能够实现我的需求的,一个稳定的us级别等待运行的代码,确保在驱动发射器发光以后,XXXus后一定能执行接收器引脚电平读取代码,希望有人能指教一下,谢谢。
查看更多
Ryan_CW
认证专家
2025-09-05
这家伙很懒,什么也没写!
搭配调度器上锁和使用us延时应该就可以了,但是效率太低了。 建议使用一个硬件定时器25 / 50us中断一次累加count值,红外接收引脚配置为中断,写一个状态机,us延时通过判断count值来实现。 硬件定时器中断可以等待第一次收到红外引脚的中断再开始计时,收完就停止,节约cpu 使用pwm捕获也是一样的思路
5
个回答
默认排序
按发布时间排序
nongxiaoming
2025-09-05
rt-thread大师兄
直接用硬件定时器发event唤醒任务的方式就可以实现us级别的调度的,本身rtt是抢占式调度的,也就是你处理的线程A优先级够高就行。简单的说线程A等等事件B,然后定时器定时时间,比如100us,然后发送事件B,这时候线程A的调度就是能控制在100us的周期跑的
Lu_盼盼
2025-09-06
这家伙很懒,什么也没写!
最常用的是作systick来做微秒的延迟,当然如果定时器够用,那用定时器来实现那就更加精准。
winfeng
认证专家
2025-09-06
这家伙很懒,什么也没写!
伪需求。 1 精确的定时要用CPU定时器结合IO实现,不要用软件定时; 2 你的发送需求就是一个PWM信号,频率10Hz,占空比大约6/1000;用CPU定时器直接输出这个PWM信号驱动发射管即可,设置完成后不用再占用CPU; 3 只需要检测接收器的输出有符合要求的脉冲信号就可以了; 4 你还可以利用CPU定时器的捕获功能进一步解放CPU;
oxlm
2025-09-06
这家伙很懒,什么也没写!
直接走硬件定时器吧,或者看看你的平台有没有移植好cputime模块,移植好的话,也可以试试那个模块
撰写答案
登录
注册新账号
关注者
0
被浏览
402
关于作者
Eternalxl
这家伙很懒,什么也没写!
提问
7
回答
4
被采纳
0
关注TA
发私信
相关问题
1
STM32F407 enable ethernet driver
2
F407使用QEMU调试网络功能报错,附Cm_backtrace信息
3
tm32f407-atk-explorer这个BSP中,1M外置的SRAM
4
串口怎样接收int类型数据?
5
F407无法使用RTC,手册上的RTC实验例程跑不通。请各位不吝赐教!
6
CAN不能推出休眠模式
7
ENV配置Lwip后不能将包跟新到本地?
8
程序跳转出问题,怀疑rtt有指定地址的函数
9
rtthread3.1.2中使用env建立的工程需还需要修改什么东西吗
10
在STM32F407跟着教程制作新bsp后 ,程序运行卡死
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
【最新活动】RT-Thread论坛活动正在进行(2026年5月活动已更新)
4
国产MCU移植系列教程汇总,欢迎查看!
5
机器人操作系统 (ROS2) 和 RT-Thread 通信
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
五分钟玩转RT-Thread新社区
8
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
9
STM32的“GPU”——DMA2D实例详解
10
RT-Thread隐藏的宝藏之completion
最新文章
1
【RSOC26】第一天学习(环境的搭建以及git and gitee)
2
【RSOC26】RT-Thread 启动流程和引导机制
3
【RSOC26】RT-thread内核与多线程培训
4
【RSOC26】rtthread启动流程
5
轻量化Agent框架
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
Bootloader
AT
Hardfault
CAN总线
ART-Pi
FinSH
DMA
USB
RT-Thread
SCons
文件系统
RT-Thread Nano
线程
MQTT
STM32
FAL
rt-smart
BSP
cubemx
RTC
WIZnet_W5500
PWM
I2C_IIC
UART
packages_软件包
GD32
ota在线升级
ESP8266
freemodbus
flash
keil_MDK
编译报错
ADC
潘多拉开发板_Pandora
flashDB
Debug
ulog
msh
rt_mq_消息队列_msg_queue
socket
MicroPython
SDIO总线
中断
SFUD
QEMU
本月问答贡献
crystal266
3
个答案
1
次被采纳
CYFS
3
个答案
1
次被采纳
oxlm
1
个答案
1
次被采纳
王棒棒
1
个答案
1
次被采纳
wdfk_prog
1
个答案
1
次被采纳
本月文章贡献
Ewan11111
3
篇文章
1
次点赞
longtsing
1
篇文章
4
次点赞
RTT_Studio
1
篇文章
4
次点赞
枫雪天
1
篇文章
3
次点赞
PVNR_2505
1
篇文章
3
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部