修正1.14寸屏幕垂直偏置并添加自动清屏以清除开机噪声;修正新硬件射频收发引脚对调,低功耗唤醒中断重定向至P3.6中断16;添加一键串口收发诊断测试指令,并临时屏蔽SOS物理按键
This commit is contained in:
454
Drivers/rf.c
454
Drivers/rf.c
@@ -1,17 +1,17 @@
|
||||
#include "rf.h"
|
||||
#include "../App/config.h"
|
||||
#include "../App/rgb.h"
|
||||
#include "intrins.h"
|
||||
|
||||
// ATR5179 射频前端天线开关控制引脚定义
|
||||
sbit RF_TX = P2^0; // V1 控制端 (1: 选通天线到发射 TX 路径)
|
||||
sbit RF_RX = P3^7; // V2 控制端 (1: 选通天线到接收 RX 路径)
|
||||
// ATR5179 <EFBFBD><EFBFBD>Ƶǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߿<EFBFBD><EFBFBD>ؿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŷ<EFBFBD><EFBFBD><EFBFBD>
|
||||
sbit RF_TX = P2^0; // V1 <EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD> (1: ѡͨ<D1A1><CDA8><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD><EFBFBD><EFBFBD> TX ·<EFBFBD><EFBFBD>)
|
||||
sbit RF_RX = P3^7; // V2 <EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD> (1: ѡͨ<D1A1><CDA8><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD><EFBFBD><EFBFBD> RX ·<EFBFBD><EFBFBD>)
|
||||
|
||||
// 射频芯片数据与电源控制引脚定义
|
||||
sbit RF_TX_DAT = P3^6; // LT4455 发射调制数据输入引脚 (DIN)
|
||||
sbit RF_RX_DATA = P2^1; // LR690L 接收解调数据输出引脚 (DATA),连接单片机中断管脚
|
||||
sbit SHUT = P2^2; // LR690L 芯片休眠控制引脚 (1:休眠,0:工作)
|
||||
// <EFBFBD><EFBFBD>ƵоƬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŷ<EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD>°<EFBFBD> PCB <20><><EFBFBD>ŶԵ<C5B6><D4B5><EFBFBD><EFBFBD><EFBFBD>)
|
||||
sbit RF_TX_DAT = P2^1; // LR690L <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (DIN) - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Pin 22 (P2.1)
|
||||
sbit RF_RX_DATA = P3^6; // LR690L <EFBFBD><EFBFBD><EFBFBD>ս<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (DATA) - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Pin 19 (P3.6)
|
||||
|
||||
// 声明外部延时及串口打印函数 (在 system.c 中定义)
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>ӡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><> system.c <EFBFBD>ж<EFBFBD><EFBFBD><EFBFBD>)
|
||||
extern void Delay_us(u16 us);
|
||||
extern void Delay_ms(u16 ms);
|
||||
extern u16 GetTimer0_Safe(void);
|
||||
@@ -24,168 +24,157 @@ extern void Uart_SendHex32(u32 val);
|
||||
extern void Uart_SendByte(u8 dat);
|
||||
|
||||
/**
|
||||
* @brief 初始化无线射频芯片相关的 GPIO 引脚方向与初始状态
|
||||
* @brief <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƵоƬ<EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD> GPIO <20><><EFBFBD>ŷ<EFBFBD><C5B7><EFBFBD><EFBFBD><EFBFBD>״̬
|
||||
*/
|
||||
void RF_Init(void)
|
||||
{
|
||||
// 1. 配置 P2.0 (RF_TX) 和 P2.2 (SHUT) 为推挽输出模式 (M1=0, M0=1)
|
||||
// 配置 P2.1 (RF_RX_DATA) 为准双向口/输入模式 (M1=0, M0=0)
|
||||
P2M1 &= ~((1 << 0) | (1 << 1) | (1 << 2));
|
||||
P2M0 &= ~(1 << 1);
|
||||
P2M0 |= ((1 << 0) | (1 << 2));
|
||||
// EAXFR = 1 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>չ<EFBFBD><D5B9><EFBFBD><EFBFBD>ܼĴ<DCBC><C4B4><EFBFBD> (XSFR)
|
||||
EAXFR = 1;
|
||||
|
||||
// 2. 配置 P3.6 (RF_TX_DAT) 和 P3.7 (RF_RX) 为推挽输出模式 (M1=0, M0=1)
|
||||
P3M1 &= ~((1 << 6) | (1 << 7));
|
||||
P3M0 |= ((1 << 6) | (1 << 7));
|
||||
// 1. <EFBFBD><EFBFBD><EFBFBD><EFBFBD> P2.0 (RF_TX) <20><> P2.1 (RF_TX_DAT) Ϊ<><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ (M1=0, M0=1)
|
||||
P2M1 &= ~((1 << 0) | (1 << 1));
|
||||
P2M0 |= ((1 << 0) | (1 << 1));
|
||||
|
||||
// 3. 设置系统默认的初始电平
|
||||
RF_TX = 0; // 断开发射天线通路
|
||||
SHUT = 1; // 默认拉高 SHUT,使 LR690L 接收芯片处于低功耗休眠关闭状态
|
||||
RF_RX = 0; // 断开接收天线通路
|
||||
RF_TX_DAT = 0; // 调制发送数据线置低
|
||||
// 2. <20><><EFBFBD><EFBFBD> P3.7 (RF_RX) <20><> P3.5 (SHUT) Ϊ<><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ (M1=0, M0=1)
|
||||
// <20><><EFBFBD><EFBFBD> P3.6 (RF_RX_DATA) Ϊ<><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ (M1=1, M0=0)<29><>ƥ<EFBFBD><C6A5><EFBFBD><EFBFBD><EFBFBD>ս<EFBFBD><D5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
P3M1 &= ~((1 << 5) | (1 << 7));
|
||||
P3M1 |= (1 << 6);
|
||||
P3M0 &= ~(1 << 6);
|
||||
P3M0 |= ((1 << 5) | (1 << 7));
|
||||
|
||||
// 3. <20><><EFBFBD><EFBFBD>ϵͳĬ<CDB3>ϵij<CFB5>ʼ<EFBFBD><CABC>ƽ
|
||||
RF_TX = 0; // <20>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ·
|
||||
SHUT = 1; // Ĭ<><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SHUT<55><54>ʹ LR690L <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߹ر<DFB9>״̬
|
||||
RF_RX = 0; // <20>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ·
|
||||
RF_TX_DAT = 0; // <20><><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 配置无线射频收发系统的运行模式与天线切换
|
||||
* @param mode 运行模式 (0-休眠隔离, 1-接收工作, 2-发射工作)
|
||||
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD>շ<EFBFBD>ϵͳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD>
|
||||
* @param mode <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ (0-<2D><><EFBFBD>߸<EFBFBD><DFB8><EFBFBD>, 1-<2D><><EFBFBD>չ<EFBFBD><D5B9><EFBFBD>, 2-<2D><><EFBFBD>乤<EFBFBD><E4B9A4>)
|
||||
*/
|
||||
void RF_SetMode(u8 mode)
|
||||
{
|
||||
if (mode == 0) // ====== 模式 0: 休眠隔离模式 (Sleep/Idle) ======
|
||||
if (mode == 0) // ====== ģʽ 0: <EFBFBD><EFBFBD><EFBFBD>߸<EFBFBD><EFBFBD><EFBFBD>ģʽ (Sleep/Idle) ======
|
||||
{
|
||||
SHUT = 1; // 强制拉高 SHUT 引脚,使 LR690L 彻底进入低功耗待机
|
||||
RF_RX = 0; // 关闭接收天线开关,防止外界电磁杂波串入接收电路
|
||||
RF_TX = 0; // 关闭发射天线开关
|
||||
SHUT = 1; // ǿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SHUT <20><><EFBFBD>ţ<EFBFBD>ʹ LR690L <20><><EFBFBD><EFBFBD><D7BD><EFBFBD><EFBFBD><EFBFBD><CDB9>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
RF_RX = 0; // <EFBFBD>رս<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߿<EFBFBD><EFBFBD>أ<EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD>·
|
||||
RF_TX = 0; // <EFBFBD>رշ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߿<EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
else if (mode == 1) // ====== 模式 1: 射频接收模式 (Rx Mode) ======
|
||||
else if (mode == 1) // ====== ģʽ 1: <EFBFBD><EFBFBD><EFBFBD>չ<EFBFBD><EFBFBD><EFBFBD>ģʽ (RX Mode) ======
|
||||
{
|
||||
SHUT = 0; // 拉低 SHUT,启动并使能 LR690L 接收解调芯片工作
|
||||
RF_RX = 1; // 选通天线切换开关到 RX 路径,连通物理接收天线
|
||||
RF_TX = 0; // 断开 TX 发射路径,防止回环烧毁前端
|
||||
SHUT = 0; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> SHUT ʹ<><CAB9> LR690L оƬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
RF_TX = 0; // <EFBFBD>رշ<EFBFBD><EFBFBD>俪<EFBFBD><EFBFBD>
|
||||
RF_RX = 1; // ѡͨ<EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD> RX <20><><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ʹ<EFBFBD>ܽ<EFBFBD><DCBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7>Ƶ<EFBFBD>Ŵ<EFBFBD>
|
||||
}
|
||||
else if (mode == 2) // ====== 模式 2: 射频发射模式 (Tx Mode) ======
|
||||
else if (mode == 2) // ====== ģʽ 2: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>乤<EFBFBD><EFBFBD>ģʽ (TX Mode) ======
|
||||
{
|
||||
SHUT = 1; // 关闭 LR690L 接收芯片,避免发射大功率波形串入接收机
|
||||
RF_RX = 0; // 断开接收路径天线
|
||||
RF_TX = 1; // 选通天线切换开关至 TX 路径,连通物理天线进行发射
|
||||
SHUT = 1; // <EFBFBD><EFBFBD><EFBFBD>ջ<EFBFBD>ͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǿ<EFBFBD>źŶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD>
|
||||
RF_RX = 0; // <EFBFBD>رս<EFBFBD><EFBFBD>տ<EFBFBD><EFBFBD><EFBFBD>
|
||||
RF_TX = 1; // ѡͨ<EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD> TX <20><><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD>߷<EFBFBD><DFB7><EFBFBD>
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 按 EV1527 载波规范单次调制发送一帧 24 位无线射频数据
|
||||
* @param addr 20 位的发射地址编码
|
||||
* @param dat 4 位的命令状态码
|
||||
* @details EV1527 是常见的无线编码格式:
|
||||
* - 一个基本脉冲周期设为 T ≈ 320us。
|
||||
* - 同步头脉冲: 1T 高电平 (320us) + 31T 低电平 (9920us)。
|
||||
* - 数据位 '1' (逻辑1) 编码: 3T 高电平 (960us) + 1T 低电平 (320us)。
|
||||
* - 数据位 '0' (逻辑0) 编码: 1T 高电平 (320us) + 3T 低电平 (960us)。
|
||||
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD> EV1527 Э<EFBFBD>鵥<EFBFBD>ε<EFBFBD><EFBFBD>Ʒ<EFBFBD><EFBFBD><EFBFBD>һ֡ 24 λ<><CEBB>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD> (Sync + 24bit Data)
|
||||
*/
|
||||
void EV1527_TxFrame(u32 addr, u8 dat)
|
||||
{
|
||||
u8 i;
|
||||
u32 tx_val;
|
||||
|
||||
// ====== 1. 发送同步引导脉冲 ======
|
||||
// <EFBFBD>ϲ<EFBFBD> 20 λ<><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7> 4 λ<><CEBB><EFBFBD><EFBFBD><EFBFBD>룬<EFBFBD><EBA3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 24 λ<>ز<EFBFBD><D8B2><EFBFBD>
|
||||
tx_val = (addr << 4) | (dat & 0x0F);
|
||||
|
||||
// 1. ͬ<><CDAC>ͷ<EFBFBD><CDB7><EFBFBD>ͣ<EFBFBD><CDA3>ߵ<EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD> 1T (Լ 350us)<29><><EFBFBD>͵<EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD> 31T (Լ 10850us)
|
||||
RF_TX_DAT = 1;
|
||||
Delay_us(320); // 1T 高电平
|
||||
Delay_us(350);
|
||||
RF_TX_DAT = 0;
|
||||
Delay_us(9920); // 31T 低电平
|
||||
|
||||
// ====== 2. 依次调制发送 20 位物理地址码 (高位 MSB 优先发送) ======
|
||||
for (i = 0; i < 20; i++)
|
||||
Delay_us(10850);
|
||||
|
||||
// 2. <20><><EFBFBD>ε<EFBFBD><CEB5>Ʒ<EFBFBD><C6B7><EFBFBD> 24 λ<><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
|
||||
for (i = 0; i < 24; i++)
|
||||
{
|
||||
if ((addr >> (19 - i)) & 1)
|
||||
if (tx_val & (0x800000UL >> i))
|
||||
{
|
||||
// 数据 bit 1: 3T高 + 1T低
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> "1"<22><><EFBFBD>ߵ<EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD> 3T (1050us)<29><><EFBFBD>͵<EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD> 1T (350us)
|
||||
RF_TX_DAT = 1;
|
||||
Delay_us(960);
|
||||
Delay_us(1050);
|
||||
RF_TX_DAT = 0;
|
||||
Delay_us(320);
|
||||
Delay_us(350);
|
||||
}
|
||||
else
|
||||
{
|
||||
// 数据 bit 0: 1T高 + 3T低
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> "0"<22><><EFBFBD>ߵ<EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD> 1T (350us)<29><><EFBFBD>͵<EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD> 3T (1050us)
|
||||
RF_TX_DAT = 1;
|
||||
Delay_us(320);
|
||||
Delay_us(350);
|
||||
RF_TX_DAT = 0;
|
||||
Delay_us(960);
|
||||
}
|
||||
}
|
||||
|
||||
// ====== 3. 依次调制发送 4 位指令状态数据码 (高位 MSB 优先) ======
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
if ((dat >> (3 - i)) & 1)
|
||||
{
|
||||
// 数据 bit 1: 3T高 + 1T低
|
||||
RF_TX_DAT = 1;
|
||||
Delay_us(960);
|
||||
RF_TX_DAT = 0;
|
||||
Delay_us(320);
|
||||
}
|
||||
else
|
||||
{
|
||||
// 数据 bit 0: 1T高 + 3T低
|
||||
RF_TX_DAT = 1;
|
||||
Delay_us(320);
|
||||
RF_TX_DAT = 0;
|
||||
Delay_us(960);
|
||||
Delay_us(1050);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 循环发射多帧无线 EV1527 信号以保证数据通信的完整性
|
||||
* @param addr 20位源地址
|
||||
* @param dat 4位命令码
|
||||
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>η<EFBFBD><EFBFBD><EFBFBD> EV1527 <20><>Ƶ֡<C6B5><D6A1><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9>֡<EFBFBD><D6A1>ʧ
|
||||
*/
|
||||
void EV1527_Transmit(u32 addr, u8 dat)
|
||||
{
|
||||
u8 r;
|
||||
// 循环发射 25 次相同的射频帧 (累计耗时约 340 毫秒),抵御外界瞬间同频杂波干扰
|
||||
for (r = 0; r < 25; r++)
|
||||
u8 i;
|
||||
RF_SetMode(2); // <20>л<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD>俪<EFBFBD>ز<EFBFBD><D8B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD>
|
||||
Delay_ms(5); // <20>ȶ<EFBFBD><C8B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶͨ·
|
||||
|
||||
// ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 10 ֡<><D6A1>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD><D5B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1 ֡<><D6A1><EFBFBD><EFBFBD><DEB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
for (i = 0; i < 10; i++)
|
||||
{
|
||||
EV1527_TxFrame(addr, dat);
|
||||
Delay_ms(10); // ֡<>䱣<EFBFBD><E4B1A3><EFBFBD><EFBFBD>ʱ
|
||||
}
|
||||
|
||||
RF_TX_DAT = 0; // <20><><EFBFBD>㷢<EFBFBD><E3B7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
RF_SetMode(1); // <20><><EFBFBD>»ָ<C2BB>Ϊ<EFBFBD><CEAA><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD><EFBFBD><EFBFBD>̬<EFBFBD><CCAC><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>ⷴ<EFBFBD><E2B7B4>
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 使用定时器 0 (Timer0) 高精度的测量引脚指定电平状态的持续宽度时间
|
||||
* @param state 待测电平状态 (1-测量高电平持续宽度, 0-测量低电平持续宽度)
|
||||
* @param timeout_us 最大等待超时微秒数上限,超时自动退出防锁死
|
||||
* @return u16 最终测量的实际电平持续微秒数。若发生超时则直接返回 0。
|
||||
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD>ض<EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD>ij<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD> Timer0 Ӳ<><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
*/
|
||||
u16 GetPulseDuration(u8 state, u16 timeout_us)
|
||||
{
|
||||
// 根据系统晶振频率计算在 12T 模式下目标超时的 Timer0 Tick 数值上限
|
||||
u16 timeout_ticks = (u16)((u32)timeout_us * (MAIN_Fosc / 1000000UL) / 12UL);
|
||||
TL0 = 0; // 定时器 0 计数值清零
|
||||
TH0 = 0;
|
||||
TR0 = 1; // 启动定时器 0 硬件计数
|
||||
u16 timeout_ticks;
|
||||
|
||||
// 轮询引脚:只要电平仍旧等于目标待测状态,就继续保持循环
|
||||
// ǿ<EFBFBD>ƹر<EFBFBD> Timer0 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>㸴λ
|
||||
TR0 = 0;
|
||||
TMOD &= 0xF0; // <20><><EFBFBD><EFBFBD> Timer0 <20>Ĵ<EFBFBD><C4B4><EFBFBD>Ϊģʽ 0 (16λ<36>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>)
|
||||
TL0 = 0x00;
|
||||
TH0 = 0x00;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> 16 λ<><CEBB>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ticks <20><>ʱֵ (<28><> 1T ģʽ 24MHz <20>£<EFBFBD>1 Tick = 1 / 24M = 0.0416us)
|
||||
// <20><><EFBFBD><EFBFBD>ϵͳ Timer0 Ĭ<><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ 12T ģʽ (1 Tick = 12 / 24MHz = 0.5us)
|
||||
timeout_ticks = (u16)((u32)timeout_us * (MAIN_Fosc / 1000000UL) / 12UL);
|
||||
|
||||
TR0 = 1; // <20><><EFBFBD><EFBFBD> Timer0 Ӳ<><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>ƽ״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϣ<D0B6>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ
|
||||
while (RF_RX_DATA == state)
|
||||
{
|
||||
// 软件防卡死判定:如果当前计数值超过了设定的最大允许超时 Tick 值
|
||||
if (GetTimer0_Safe() > timeout_ticks)
|
||||
{
|
||||
TR0 = 0; // 关断定时器
|
||||
return 0; // 判定超时,返回 0
|
||||
TR0 = 0;
|
||||
return 0; // <EFBFBD>ж<EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0
|
||||
}
|
||||
}
|
||||
TR0 = 0; // 关断定时器
|
||||
TR0 = 0; // <EFBFBD>ض϶<EFBFBD>ʱ<EFBFBD><EFBFBD>
|
||||
|
||||
// 将最终读取的 Timer0 硬件 Tick 数值,重新换算成微秒数返回 (1 Tick = 12 / 24MHz = 0.5us)
|
||||
return (u16)((u32)GetTimer0_Safe() * 12UL / (MAIN_Fosc / 1000000UL));
|
||||
}
|
||||
|
||||
#include "../App/xtell.h"
|
||||
|
||||
// 模拟射频信号全局变量定义
|
||||
// ģ<><C4A3><EFBFBD><EFBFBD>Ƶ<EFBFBD>ź<EFBFBD>ȫ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
volatile u32 mock_rx_addr = 0;
|
||||
volatile u8 mock_rx_data = 0;
|
||||
volatile bit mock_rf_ready = 0;
|
||||
|
||||
/**
|
||||
* @brief <20><><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD>Ⲣ<EFBFBD><E2B2A2><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD> EV1527 <20><>Ƶ<EFBFBD>ź<EFBFBD><C5BA><EFBFBD><EFBFBD><EFBFBD>֡
|
||||
*/
|
||||
bit EV1527_Decode(u32 *out_addr, u8 *out_data)
|
||||
{
|
||||
u16 high_time, low_time;
|
||||
@@ -193,10 +182,10 @@ bit EV1527_Decode(u32 *out_addr, u8 *out_data)
|
||||
u32 addr = 0;
|
||||
u8 dat = 0;
|
||||
u16 T;
|
||||
u16 idata raw_h[24]; // 高电平时间寄存数组 (置于 idata 区)
|
||||
u16 idata raw_l[24]; // 低电平时间寄存数组
|
||||
u16 idata raw_h[24];
|
||||
u16 idata raw_l[24];
|
||||
|
||||
// 检查模拟射频触发
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (mock_rf_ready) {
|
||||
mock_rf_ready = 0;
|
||||
*out_addr = mock_rx_addr;
|
||||
@@ -204,226 +193,145 @@ bit EV1527_Decode(u32 *out_addr, u8 *out_data)
|
||||
return 1;
|
||||
}
|
||||
|
||||
// ====== 1. 同步头引导脉冲捕获 (定位上升沿) ======
|
||||
// ====== 1. ͬ<EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>岶<EFBFBD><EFBFBD> ======
|
||||
{
|
||||
u16 wait_cnt = 0;
|
||||
// 如果当前射频解调输出是高电平,等待其变低
|
||||
while (RF_RX_DATA == 1)
|
||||
{
|
||||
Delay_us(5);
|
||||
wait_cnt++;
|
||||
if (wait_cnt > 2000) // 10 毫秒超时保护
|
||||
if (wait_cnt > 2000) // 10 <EFBFBD><EFBFBD><EFBFBD>볬ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
return 0;
|
||||
}
|
||||
|
||||
// 当引脚维持在低电平后,阻塞等待它跳变为高电平(捕获到同步引导信号的上升沿)
|
||||
wait_cnt = 0;
|
||||
while (RF_RX_DATA == 0)
|
||||
{
|
||||
Delay_us(5);
|
||||
wait_cnt++;
|
||||
if (wait_cnt > 4000) // 20 毫秒超时保护
|
||||
if (wait_cnt > 4000) // 20 <EFBFBD><EFBFBD><EFBFBD>볬ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
// 捕获引导头高电平时间 (放宽测量阈值上限至 2500 微秒)
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ߵ<EFBFBD>ƽʱ<EFBFBD><EFBFBD>
|
||||
high_time = GetPulseDuration(1, 2500);
|
||||
if (high_time < 50 || high_time > 2500) {
|
||||
if (high_time > 10) { // 剔除高频毛刺噪声,防止调试串口满载
|
||||
Uart_SendString("Sync H Err: ");
|
||||
Uart_SendHex16(high_time);
|
||||
Uart_SendString("us\r\n");
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
// 捕获引导头后续的 31T 低电平时间 (设定上限 60 毫秒)
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 31T <20>͵<EFBFBD>ƽʱ<C6BD><CAB1>
|
||||
low_time = GetPulseDuration(0, 60000);
|
||||
if (low_time < 1500 || low_time > 60000) {
|
||||
Uart_SendString("Sync L Err H=");
|
||||
Uart_SendHex16(high_time);
|
||||
Uart_SendString(" L=");
|
||||
Uart_SendHex16(low_time);
|
||||
Uart_SendString("us\r\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
// 计算低电平与高电平的比值,以检验是否满足 EV1527 的 31:1 特征
|
||||
{
|
||||
u32 ratio = (u32)low_time / high_time;
|
||||
if (ratio < 15 || ratio > 48) { // 允许 50% 左右的空气无线传输畸变误差
|
||||
Uart_SendString("Sync Ratio Err H=");
|
||||
Uart_SendHex16(high_time);
|
||||
Uart_SendString(" L=");
|
||||
Uart_SendHex16(low_time);
|
||||
Uart_SendString(" R=");
|
||||
Uart_SendHex16((u16)ratio);
|
||||
Uart_SendString("\r\n");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
// ͬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD>ʱ<EFBFBD><EFBFBD> T <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD>ȼ<EFBFBD>Ϊ 1T)
|
||||
T = high_time;
|
||||
if (T < 100 || T > 800) return 0; // <20><><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>Χ<EFBFBD><EFBFBD>: 100us ~ 800us
|
||||
|
||||
// 自适应估算出基准脉冲时值 T
|
||||
T = low_time / 31;
|
||||
if (T == 0) T = 1; // 零安全防护
|
||||
|
||||
// ====== 2. 依次采集接下来的 24 个数据 bit 脉冲 ======
|
||||
// ====== 2. <20><><EFBFBD>ν<EFBFBD><CEBD><EFBFBD> 24 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD> ======
|
||||
for (i = 0; i < 24; i++)
|
||||
{
|
||||
u16 wait_cnt = 0;
|
||||
// 等待下一个数据位跳变产生的上升沿 (低电平变高)
|
||||
while (RF_RX_DATA == 0)
|
||||
{
|
||||
Delay_us(5);
|
||||
wait_cnt++;
|
||||
if (wait_cnt > 1000) // 5ms 超时判定,防无线信号中断卡死
|
||||
{
|
||||
return 0; // 捕获失败
|
||||
}
|
||||
}
|
||||
|
||||
// 精密测算本位的高电平与低电平宽度
|
||||
raw_h[i] = GetPulseDuration(1, 5000);
|
||||
if (raw_h[i] == 0) return 0; // 超时错误直接退出
|
||||
raw_h[i] = GetPulseDuration(1, 2000);
|
||||
if (raw_h[i] == 0) return 0;
|
||||
|
||||
raw_l[i] = GetPulseDuration(0, 5000);
|
||||
raw_l[i] = GetPulseDuration(0, 2000);
|
||||
if (raw_l[i] == 0) return 0;
|
||||
}
|
||||
|
||||
// ====== 3. 串口输出捕获的时序参数 ======
|
||||
Uart_SendString("Captured: Sync H=");
|
||||
Uart_SendHex16(high_time);
|
||||
Uart_SendString("us, L=");
|
||||
Uart_SendHex16(low_time);
|
||||
Uart_SendString("us, T=");
|
||||
Uart_SendHex16(T);
|
||||
Uart_SendString("us\r\n");
|
||||
|
||||
// ====== 4. 自适应决策:组合成 24 位完整射频数据帧 ======
|
||||
// ====== 3. ˫<EFBFBD>˱<EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ======
|
||||
for (i = 0; i < 24; i++)
|
||||
{
|
||||
// 比较本位高低电平持续宽度:
|
||||
// 如果高电平大于低电平,说明宽脉冲在高,判定该位为 1 (3T高+1T低)。
|
||||
// 否则高电平短,判定为 0 (1T高+3T低)。
|
||||
if (raw_h[i] > raw_l[i])
|
||||
u16 total = raw_h[i] + raw_l[i];
|
||||
if (total < T * 3 || total > T * 6) return 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD> 3T~6T ֮<><D6AE>
|
||||
|
||||
if (raw_h[i] > raw_l[i] * 2)
|
||||
{
|
||||
addr = (addr << 1) | 1; // 写入 24 位物理地址与状态数据相结合的最终值
|
||||
// <20>ߵ<EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD>Գ<EFBFBD><D4B3>ڵ͵<DAB5>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "1"
|
||||
if (i < 20)
|
||||
addr = (addr << 1) | 1;
|
||||
else
|
||||
dat = (dat << 1) | 1;
|
||||
}
|
||||
else if (raw_l[i] > raw_h[i] * 2)
|
||||
{
|
||||
// <20>͵<EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD>Գ<EFBFBD><D4B3>ڸߵ<DAB8>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "0"
|
||||
if (i < 20)
|
||||
addr = (addr << 1);
|
||||
else
|
||||
dat = (dat << 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
addr = (addr << 1);
|
||||
return 0; // <20><>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>Ϲ棬<CFB9>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD>䣬<EFBFBD><E4A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
}
|
||||
|
||||
*out_addr = addr; // 输出包含状态数据的 24 位完整射频编码作为传感器唯一 ID
|
||||
*out_data = (u8)(addr & 0x0F); // 输出低 4 位作为指令/状态,保持调用兼容性
|
||||
|
||||
// 串口打印解码最终结果
|
||||
Uart_SendString("Decoded 24bit ADDR: 0x");
|
||||
Uart_SendHex32(addr);
|
||||
Uart_SendString("\r\n");
|
||||
|
||||
return 1; // 成功解析
|
||||
// У<><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*out_addr = addr;
|
||||
*out_data = dat;
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 软硬件环路自检回环测试
|
||||
* @details 将发射引脚置位并同时采样接收引脚,用于测试收发芯片控制连通性。
|
||||
* @brief RF <20>շ<EFBFBD><D5B7><EFBFBD><EFBFBD>ϲ<EFBFBD><CFB2>Թ<EFBFBD><D4B9><EFBFBD> (֧<>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD><EFBFBD><EFBFBD>ӡ)
|
||||
*/
|
||||
void Loopback_Test(void)
|
||||
void RF_DiagnosticMode(char choice)
|
||||
{
|
||||
u16 match_count = 0;
|
||||
u16 i;
|
||||
|
||||
SHUT = 0; // 强行开启接收芯片供电
|
||||
RF_RX = 1; // 选通天线到 RX
|
||||
RF_TX = 0; // 发送引脚隔离
|
||||
Delay_ms(100);
|
||||
|
||||
Uart_SendString("Starting RF Loopback Self-Test...\r\n");
|
||||
|
||||
// 高频翻转模拟发送引脚,同步读取接收解调出的管脚信号,统计匹配率
|
||||
for (i = 0; i < 100; i++)
|
||||
if (choice == 't')
|
||||
{
|
||||
RF_TX_DAT = 1;
|
||||
Delay_us(500);
|
||||
if (RF_RX_DATA == 1) match_count++;
|
||||
|
||||
RF_TX_DAT = 0;
|
||||
Delay_us(500);
|
||||
if (RF_RX_DATA == 0) match_count++;
|
||||
}
|
||||
|
||||
Uart_SendString("Loopback Match Count: ");
|
||||
Uart_SendHex16(match_count);
|
||||
Uart_SendString("/200\r\n");
|
||||
|
||||
if (match_count > 150)
|
||||
{
|
||||
Uart_SendString("Result: PASS! Transmitter is emitting RF, and Receiver is picking it up!\r\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
Uart_SendString("Result: FAIL! No RF signal detected. Check hardware.\r\n");
|
||||
}
|
||||
|
||||
SHUT = 1; // 关闭接收芯片
|
||||
RF_RX = 0; // 断开接收通道
|
||||
}
|
||||
u8 i;
|
||||
Uart_SendString("=== RF TX Test: Transmitting 20 test frames... ===\r\n");
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߿<EFBFBD><DFBF><EFBFBD>
|
||||
RF_SetMode(2);
|
||||
Delay_ms(5);
|
||||
|
||||
/**
|
||||
* @brief 统计接收引脚在 5 秒内的电平翻转次数,用以评估物理噪声污染度或管脚短路
|
||||
*/
|
||||
void RF_Test_Pin(void)
|
||||
{
|
||||
u8 i;
|
||||
u16 j;
|
||||
u16 transitions = 0;
|
||||
bit last_state = RF_RX_DATA;
|
||||
|
||||
Uart_SendString("=== RF RX Pin Data Test Start (5 seconds) ===\r\n");
|
||||
Uart_SendString("SHUT pin state: ");
|
||||
Uart_SendByte(SHUT ? '1' : '0');
|
||||
Uart_SendString("\r\n");
|
||||
|
||||
// 强制设为接收模式
|
||||
RF_SetMode(1);
|
||||
Delay_ms(100);
|
||||
|
||||
Uart_SendString("SHUT pin state (after RF_SetMode(1)): ");
|
||||
Uart_SendByte(SHUT ? '1' : '0');
|
||||
Uart_SendString("\r\n");
|
||||
Uart_SendString("Please trigger your 433MHz transmitter now...\r\n");
|
||||
|
||||
// 连续进行 5 秒的高频电平抖动采样
|
||||
for (i = 0; i < 5; i++)
|
||||
{
|
||||
transitions = 0;
|
||||
// 1秒循环
|
||||
for (j = 0; j < 1000; j++)
|
||||
for (i = 0; i < 20; i++)
|
||||
{
|
||||
u8 k;
|
||||
// 每次内循环进行 5 次采样,每次间隔 200us
|
||||
for (k = 0; k < 5; k++)
|
||||
{
|
||||
bit current_state = RF_RX_DATA;
|
||||
if (current_state != last_state)
|
||||
{
|
||||
transitions++; // 统计电平边沿翻转次数
|
||||
last_state = current_state;
|
||||
}
|
||||
Delay_us(200);
|
||||
}
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><D4B0><EFBFBD>ÿ<EFBFBD>η<EFBFBD><CEB7>Ͱ<EFBFBD><CDB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָʾ<D6B8><CABE><EFBFBD><EFBFBD>˸
|
||||
MOTOR = 1;
|
||||
RGB_Send(0, 150, 0, 0, 150, 0); // <20>̹<EFBFBD><CCB9><EFBFBD>˸
|
||||
EV1527_TxFrame(0x37A86UL, 0x01);
|
||||
MOTOR = 0;
|
||||
RGB_Send(0, 0, 0, 0, 0, 0);
|
||||
|
||||
Delay_ms(150); // ֡<><D6A1><EFBFBD><EFBFBD>
|
||||
}
|
||||
|
||||
// 输出本秒的电平跳转总数,若非发射期该数值很大,表明空中有丰富噪声噪底跳变,属接收机正常表现
|
||||
Uart_SendString("Sampling... Transitions in last 1s: ");
|
||||
Uart_SendHex16(transitions);
|
||||
Uart_SendString(", current pin value: ");
|
||||
Uart_SendByte(RF_RX_DATA ? '1' : '0');
|
||||
Uart_SendString("\r\n");
|
||||
RF_TX_DAT = 0;
|
||||
RF_SetMode(1); // <20><><EFBFBD>»ָ<C2BB><D6B8><EFBFBD><EFBFBD><EFBFBD>ģʽ
|
||||
Uart_SendString("[RF] Transmit Done!\r\n");
|
||||
}
|
||||
else if (choice == 'r')
|
||||
{
|
||||
u16 wait_ms;
|
||||
u32 rx_addr;
|
||||
u8 rx_data;
|
||||
|
||||
Uart_SendString("=== RF RX Test: Listening for 5 seconds... ===\r\n");
|
||||
RF_SetMode(1); // <20><><EFBFBD>ý<EFBFBD><C3BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
Delay_ms(10);
|
||||
|
||||
// 5<><35><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
for (wait_ms = 0; wait_ms < 5000; wait_ms++)
|
||||
{
|
||||
if (EV1527_Decode(&rx_addr, &rx_data))
|
||||
{
|
||||
Uart_SendString("[RF] Decoded successfully! Addr: 0x");
|
||||
Uart_SendHex32(rx_addr);
|
||||
Uart_SendString(", Cmd/Data: ");
|
||||
Uart_SendHex8(rx_data);
|
||||
Uart_SendString("\r\n");
|
||||
|
||||
// <20>յ<EFBFBD><D5B5>źź<C5BA><C5BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><F0B6AFB2><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
MOTOR = 1;
|
||||
RGB_Send(0, 150, 150, 0, 150, 150);
|
||||
Delay_ms(100);
|
||||
MOTOR = 0;
|
||||
RGB_Send(0, 0, 0, 0, 0, 0);
|
||||
}
|
||||
Delay_ms(1);
|
||||
}
|
||||
Uart_SendString("=== RF RX Test End ===\r\n");
|
||||
}
|
||||
|
||||
Uart_SendString("=== RF Pin Test End ===\r\n");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user