基于STC8A8K64S4A12_LQFP44单片机nRF24L01 无线收发实验(双向通信_自动应答)实验软件例程源码+传感器资料 int main()
.register-bit .register-bit.active { background: #3b82f6; color: white; } .flow-step { position: relative; padding: 1.5rem; border-left: 4px solid #3b82f6; margin-left: 1rem; background: #f8fafc; } .flow-step::before { content: ''; position: absolute; left: -12px; top: 50%; transform: translateY(-50%); width: 20px; height: 20px; background: #3b82f6; border-radius: 50%; }
📖 ACK 模式功能概述
🎯 核心原理
当发送端对 TX FIFO 写数据后,数据包中 NO_ACK 标志位复位。接收端接收到有效数据产生 RX_DR 中断后, 自动发送 ACK 信号。 发送端接收到 ACK 信号则清除 TX FIFO 并产生 TX_DS 发射中断,表明通信成功。
关键点:接收端使用接收管道地址作为目标地址发送 ACK,因此发送端需设置 RX_ADDR_P0 与自身发送地址相同
🔄 自动重发机制
如果发送端在 ARD 时间内未收到 ACK 信号,则重新发送上一帧数据。 当重发次数达到最大值仍未收到确认时,产生 MAX_RT 中断。
- ARC_CNT: 记录当前数据重发次数,发送新数据时复位
- PLOS_CNT: 记录丢失数据包数量,每产生一个 MAX_RT 中断加 1
- SETUP_RETR: 配置最大重发次数与 ARD 时间
🔢 PID(Packet ID)去重机制
场景
PID 变化
处理方式
发送新数据包
PID 自动 +1
正常接收
连续两帧数据 PID 相同
可能链路丢包
比对 CRC
PID 相同且 CRC 相同
重复数据包
丢弃数据,重发 ACK
⚙️ 必需的寄存器配置
📤 发送方必要配置
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/279904.html