PRF 2.4G LP RF¶
1 功能概述¶
本例程演示 PRF 2.4G 发送(Tx) 与 MCU Deepsleep 低功耗结合的基本流程:
初始化 RF(PRF 库)并准备 32 字节 Payload
进入 Deepsleep
通过 SleepTimer(32k) 定时或 GPIO 上升沿唤醒
唤醒后发送一次 Payload,并在发送完成回调里打印计数
循环执行,实现“休眠-唤醒-发送”的低功耗间歇发射
2 例程位置与工程文件¶
例程目录:
<PAN271x-DK>\01_SDK\samples\proprietary_rf\03_lp_rfKeil 工程:
keil\lp_rf.uvprojx主要代码:
src\main.c
3 环境准备¶
3.1 硬件设备¶
PAN271x EVB 核心板与底板 1 套(仅演示“低功耗 + 发射”时 1 套即可)
若要做对测:再准备 1 套板做 Rx
JLink 仿真器(用于下载程序)
USB-TypeC 线(用于供电与查看串口 Log)
杜邦线/跳线帽(用于连接 SWD 与串口相关跳线)
3.2 硬件接线¶
对每一套板:
将 EVB 核心板插到底板上
串口(UART0)连接:
用 USB-TypeC 线,将 PC 与底板 USB->UART 口相连
用跳线帽/杜邦线将底板排针:
J8(P06 & TXD) 与J9(P05 & RXD) 分别短接例程中 UART0 引脚复用为:P0.5=TX,P0.6=RX(见
Sys_Init())
JLink(SWD)连接:
SWD_CLK → 底板 P00
SWD_DAT → 底板 P01
SWD_GND → 底板 GND
可选:GPIO 唤醒口测试
例程默认把 P1.3 (已扩展到
J13)配为上升沿唤醒(见LP_WakeUpPinConfig(P1, GPIO_Pin_3))。由于函数开启下拉(pulldown),如需外部唤醒,请让 P1.3 从低电平产生一次上升沿(例如接按键到高电平/或外部信号源)。
3.3 PC 软件¶
串口工具:UartAssist / SecureCRT / MobaXterm 等
串口参数:115200, 8N1
4 编译与烧录(Keil)¶
打开工程
keil\lp_rf.uvprojx选择目标工程
lp_rf编译:Build
下载:Download
说明:该工程在 Keil 的 Flash Download 配置里使用了外部烧录工具(JFlash)与 keil\settings.jflash,因此“下载”动作会调用 SDK 自带的 JFlash 执行擦除/烧录/启动。
5 使用方法¶
5.1 选择 Tx 或 Rx¶
在 src\main.c 顶部通过宏切换:
#define TX_MODE (1) // 1=Tx(默认,带Deepsleep演示), 0=Rx
Tx(默认):编译烧录后会周期性“睡眠→唤醒→发送一次”
Rx:修改为
TX_MODE=0后编译烧录,设备会持续接收并打印 Payload + RSSI
5.2 Tx(Deepsleep 间歇发送)流程说明¶
Tx 模式下主循环核心逻辑如下(摘取要点):
LOG("Enter Deepsleep mode.\r\n");
LP_WakeUpPinConfig(P1, GPIO_Pin_3); // GPIO 上升沿唤醒
LP_SetUsrSleepTimer(32000*1, 1); // SleepTimer 比较值,单位=32k时钟周期
LP_EnableDeepsleepTimer1(); // 使能 SleepTimer1 中断 + 唤醒
GPIO_DisableDigitalPath(P0,GPIO_Pin_6); // 关UART0_RX数字通路,降低漏电(按实际RX引脚调整)
LP_EnterDeepSleep(); // 进入 Deepsleep
GPIO_EnableDigitalPath(P0,GPIO_Pin_6);
LOG("Exit Deepsleep mode.\r\n");
TxBuf[0]++;
PAN271_RF_SetTxData(TxBuf, sizeof(TxBuf));
PAN271_RF_TrxStart(); // 发送一次
要点说明:
LP_SetUsrSleepTimer(sleepTime, idx)的sleepTime单位是 32k 时钟周期数。例如 1 秒约为
32000*1;3 秒可改为32000*3(参见drivers/pan_lp.h的说明)。
LP_EnableDeepsleepTimer1()使能的是 SleepTimer1(对应该例程的SLPTMR1_IRQHandler)。进入低功耗前关闭 UART0_RX 的数字通路,常用于降低低功耗漏电;唤醒后再恢复。
5.3 Rx(对测/调试)使用说明¶
Rx 模式下会执行:
PAN271_RF_TrxStart();
while(1) { }
收到包后会在接收回调中打印:Payload 长度、十六进制内容、RSSI。
对测建议:
Tx 端:使用本例程(
TX_MODE=1)Rx 端:可使用本例程编译成
TX_MODE=0,或直接使用 normal_trx 的 Rx 端
注意:Tx 与 Rx 的 RF 配置必须一致(频道、速率、地址、地址宽度、Payload 长度等)。
6 关键配置说明¶
6.1 RFConfig_t(结构体参数)¶
例程默认 RF 配置位于 src\main.c 的 gRfConfig:
WorkMode = PAN271_WORKMODE_NORMAL:普通模式Channel = 55:工作信道(Tx/Rx 必须一致)DataRate = PAN271_DR_1Mbps:速率(Tx/Rx 必须一致)TxPower = PAN271_TXPWR_11dBm:发射功率AddrWidth = PAN271_WIDTH_5BYTES:地址宽度(Tx/Rx 必须一致)TxAddr = {12 34 56 78 9A}:Tx 地址RxAddr[0]:Pipe0 地址(示例启用且与 TxAddr 一致)EnTxNoAck = ENABLE:不需要 ACKTxLen/RxLen = 32:Payload 长度TxBuf/RxBuf 数组空间需要是 4 的整数倍(例程已有注释)
6.2 RF 中断回调(发送完成打印)¶
例程在 src\main.c 实现了 PAN271_RF_ISR_Init(),用于注册 RF 中断回调(如 tx_cb)。
发送完成后会进入
event_tx_fun()并打印tx done, count: N该函数由 RF 驱动在
PAN271_RF_Init()内部调用(驱动里提供了弱定义,用户实现会覆盖)
6.3 低功耗相关配置¶
进入 Deepsleep 前,例程还做了两类常见的“降漏电”处理:
关闭下载口相关引脚数字通路/上拉(避免 SWD 引脚漏电):
GPIO_DisableDigitalPath(P0, 0x03);
GPIO_DisablePullupPath(P0, 0x03);
进入低功耗前关闭 UART0_RX 数字通路(P0.6),唤醒后恢复。
7 串口输出示例¶
7.1 Tx(Deepsleep + 发送)¶
典型输出:
CPU @ 48000000Hz
Enter Deepsleep mode.
slptmr1 int
Exit Deepsleep mode.
tx done, count: 1
Enter Deepsleep mode.
...
当 GPIO 唤醒触发时,可能看到:
P1 interrupt
7.2 Rx¶
典型输出(内容会随实际 Payload 变化):
CPU @ 48000000Hz
rx len:32
00 01 02 03 04 05 06 07 ...
rssi:-45 dBm
8 常见问题排查¶
串口无打印:
检查波特率是否 115200
检查 UART0 复用引脚(P0.5/P0.6)与底板跳线是否按要求短接
确认 USB->UART 口枚举到正确的 COM 口
Rx 收不到包:
确认两块板分别烧录了 Tx 与 Rx(
TX_MODE不同)确认
Channel/DataRate/AddrWidth/TxAddr/RxAddr/TxLen/RxLen完全一致缩短两板距离、避开强干扰;必要时调整信道
低功耗电流不理想:
确认进入 Deepsleep 前已按需关闭 UART RX 数字通路、下载口相关引脚数字通路/上拉
断开不必要的外设连接(例如某些调试接口),并结合板级电路评估漏电来源