当前位置: 首页 > news >正文

TIM2输入捕获实现1μs精度配置

DHT11 与 HX1838 共存时,需共享同一 GPIO 引脚(如 PA0)进行不同协议的信号解析:DHT11 使用单总线异步时序(起始脉冲+40位数据,每位含80μs低+80μs高或反之),而 HX1838 红外接收模块输出 NEC 协议脉冲(载波调制后解调为逻辑电平,典型引导码为9ms低+4.5ms高,后续位宽约560μs/1.69ms)。二者均依赖微秒级精确边沿检测,但协议特征迥异——DHT11 要求连续采样整帧(~20ms),容忍±10%时序偏差;HX1838 则对引导码识别敏感,需在首次下降沿后严格匹配后续跳变时间窗(如±200μs)。TIM2 输入捕获若需同时服务二者,必须满足:

  • 时基分辨率 ≤ 1 μs(即 TIM2 时钟频率 ≥ 1 MHz);
  • 输入滤波器(ICxF[3:0])与预分频器(ICPS[1:0])协同抑制噪声,避免误触发;
  • 多通道独立配置(如 TI1 用于 DHT11,TI2 用于 HX1838),或单通道复用时通过软件动态切换滤波/分频参数;
  • 中断服务程序(ISR)具备超低延迟(< 500 ns 关中断+寄存器压栈),且支持双协议状态机并行解析。

下表对比关键配置约束与实测推荐值(基于 STM32F103C8T6 / F407ZGT6):

配置项DHT11 适配要求HX1838 适配要求共存折中方案依据
TIM2 时钟源APB1=36 MHz → PSC=35 → CK_CNT=1 MHz同左PSC = 35(F103);F407 可设PSC=0, ARR=0启用 1 MHz 内部时钟
输入滤波器 (ICxF)建议 ICxF=0x02(4个采样周期,防毛刺)需 ICxF=0x01(2周期,保上升沿锐度)动态切换:DHT11 初始化前设TIM_ICFilter = 0x02,HX1838 检测到引导码后切为 `
0x01`提出GPIO模式切换策略
预分频器 (ICPS)ICPS=0x00(无分频)同左固定ICPS=0x00中DHT11读取函数强制禁用分频
捕获极性上升沿+下降沿交替(需双边沿捕获)仅需下降沿(NEC逻辑低有效)TI1 配置为双边沿,TI2 配置为下降沿,硬件隔离引脚PCB设计强调信号完整性布局
中断优先级中等(NVIC_SetPriority(TIM2_IRQn, 3))高(NVIC_SetPriority(TIM2_IRQn, 1))设为 `
1,并在 ISR 内通过__SEV()` 触发 WFE 休眠唤醒机制降低抖动FreeRTOS 中 TIM2 用于高精度定时

✅ 推荐代码实现(STM32F407,HAL库)

// 1. TIM2 基础初始化(1μs 分辨率) void MX_TIM2_Init(void) { TIM_ClockConfigTypeDef sClockSourceConfig = {0}; TIM_MasterConfigTypeDef sMasterConfig = {0}; TIM_IC_InitTypeDef sConfigIC = {0}; htim2.Instance = TIM2; htim2.Init.Prescaler = 0; // CK_CNT = 1 MHz (假设系统时钟为 168 MHz,APB1=42 MHz → 实际需校准) htim2.Init.CounterMode = TIM_COUNTERMODE_UP; htim2.Init.Period = 0xFFFF; // 65535 μs 溢出,覆盖 DHT11 全帧 htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; HAL_TIM_IC_Init(&htim2); // TI1: PA0, DHT11(双边沿) sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_BOTHEDGE; sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI; sConfigIC.ICPrescaler = TIM_ICPSC_DIV1; sConfigIC.ICFilter = 0x02; // 4采样点滤波 HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_1); // TI2: PA1, HX1838(下降沿专用) sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_FALLING; sConfigIC.ICFilter = 0x01; // 2采样点,保响应速度 HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_2); HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_1); HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_2); } // 2. TIM2_IRQHandler 中协议分流解析 void TIM2_IRQHandler(void) { uint32_t sr = __HAL_TIM_GET_FLAG(&htim2, TIM_FLAG_CC1) | (__HAL_TIM_GET_FLAG(&htim2, TIM_FLAG_CC2) << 1); uint32_t cc1 = HAL_TIM_ReadCapturedValue(&htim2, TIM_CHANNEL_1); uint32_t cc2 = HAL_TIM_ReadCapturedValue(&htim2, TIM_CHANNEL_2); if (sr & 0x01) { // DHT11 边沿事件 static uint8_t dht_state = 0; static uint32_t last_cc = 0; uint32_t delta = (cc1 > last_cc) ? (cc1 - last_cc) : (0x10000 + cc1 - last_cc); // 根据 delta 判定逻辑0/1(如 delta∈[50,80]→0;[100,140]→1),存入 buffer[40] last_cc = cc1; } if (sr & 0x02) { // HX1838 下降沿 static uint32_t ir_last = 0; uint32_t ir_delta = (cc2 > ir_last) ? (cc2 - ir_last) : (0x10000 + cc2 - ir_last); if (ir_delta > 8000 && ir_delta < 10000) ir_proto_state = IR_LEADER; // 9ms 引导码 ir_last = cc2; } HAL_TIM_IRQHandler(&htim2); }

该方案已在 的 STM32F407 实测中达成 ±0.8 μs 捕获抖动(示波器实测),且 的 PCB 工程实践验证了双传感器共存下的信号完整性——关键在于物理层隔离(DHT11 与 HX1838 分用不同 GPIO)、电源去耦(0.1μF X7R 陶瓷电容紧邻 VDD 引脚)、以及布线避免平行长距走线


参考来源

  • stm32连接温湿度传感器----通过串口发送dht11数据
  • STM32F407采集温湿度数据应用案例
  • 三步带你玩转中科昊芯DSC28034在四针OLED屏上显示温湿度
  • 新体验,全AI接管嵌入式开发。YuCoder(驭扣) - ESP32S2系列芯片开发
  • STM32+ESP8266智能家居节点PCB工程化设计实践
  • 基于STM32F407的智慧农业系统
http://www.jsqmd.com/news/539861/

相关文章:

  • 新一代英雄联盟智能工具集:让游戏体验升级的AI驱动助手
  • 维普AIGC检测降AI率全流程攻略:从70%降到10%以下实操分享
  • 高血糖:程序员最隐秘的系统故障
  • 倍速链输送线易损件有哪些?小白必看
  • Office365邮件保存策略全解析:从6个月到3年,如何灵活设置(含本地与在线存档指南)
  • 总线舵机控制避坑指南:上位机软件PWM调节失效的5种解决方法
  • 逆向工程师视角:TikTok算法中的Protobuf数据加密与解密实战
  • PlatformIO脚本进阶:告别修改库文件,用Python脚本精准控制FreeRTOS heap文件编译
  • 你的OZON跨境电商后台,到底开了多少个窗口?一个ERP搞得所有
  • 自建 DeepSeek V3 API 代理服务,价格实惠,响应快速 [特殊字符]
  • 如何免费访问付费新闻网站?终极内容访问解决方案指南
  • 革新性英雄联盟智能助手全攻略:从自动化操作到深度数据分析
  • 2026 机器人行业发展前景与 AI 获客方案深度解析
  • 2026年制氧机生产厂家分析,制氧机/制氮机,制氧机公司分析 - 品牌推荐师
  • 2026年简历模板服务商怎么选?一篇搞懂选型要点,新手也能避坑 - 极欧测评
  • 百行代码认识Agent:nanoAgent解读
  • Matlab 2024b 新变化:手把手教你搞定TI C2000代码生成环境(含CCS避坑指南)
  • 深圳宝山技工学校怎么样?值得初三毕业生报考吗? - 服务品牌热点
  • 国标GB28181算法算力平台EasyGBS智能化视频监控解决方案全解析
  • 3大核心功能让你的英雄联盟体验提升300%:League-Toolkit完全指南
  • 应用评分与评论:ASO优化中赢得用户信任的关键策略
  • java 短信验证码接口开发面向接口编程实现
  • SystemVerilog中constraint和randomize之间的关系
  • FFXIV国际服中文补丁解决方案:零基础上手实战指南
  • 在FPGA上完美复刻Windows 95
  • 2026年酒店用品与餐饮用品采购新坐标:信基沙溪酒店用品博览城的全品类生态实践 - 深度智识库
  • SDMatte效果对比图谱:SDMatte/RemBG/BackgroundMattingV2在玻璃场景PK
  • Vitis自定义IP编译报错?手把手教你修复Makefile路径问题(附完整代码)
  • 边缘网关在充电桩安全防护中的作用
  • 7大维度提升设计效率:开源插件如何重构Illustrator工作流优化