一.描述
本篇是 E22P-433MBH-SC评估套件测评的收尾篇。
开箱贴里留了个问题:只有一套评估板怎么测收发?正好我手上有一块Lora模组于是就有了 STM32F103 + SX1278 LoRa 节点。
它和板载 E22P-433M30S(Semtech SX1262)同为 433MHz 频段、LoRa 调制,只要扩频因子、带宽、编码率、同步字对齐,这样就能互通测试了。
二、测试介绍
| 设备 | E22P-433MBH-SC 评估板 | 自制Nucleo-STM32F103 + SX1278 模组 |
| 射频芯片 | SX1262(E22P-433M30S) | SX1278 |
| 主控 | STM32F103C8T6 | STM32F103(HAL 工程 SX1278_HAL) |
| 交互 | 0.96 OLED + 三按键 | USART2 串口打印 + PC13 按键 |
| 天线 | SMA 433MHz 胶棒天线 | 弹簧天线 |
两端各发 100 包:
E22 发 → SX1278 收:评估板菜单进入 Tx Mode 发射,SX1278 端串口打印每一包;
SX1278 发 → E22 收:按下 SX1278 板上 PC13 按键,连续发 100 包,评估板 OLED 显示接收统计。
三、通信参数一定要设定成一样的
LoRa 对参数极其敏感,两端只要有一项不一致,接收端基本一片死寂。最终对齐的配置:
| 频率 | 433.000 MHz | 433MHz 免费频段 |
| 带宽 BW | 500 kHz | SX1278 端 SignalBw = 9 |
| 扩频因子 SF | 11 | SpreadingFactor = 11 |
| 编码率 CR | 4/5 | ErrorCoding = 1 |
| CRC | ON | 两端都开,否则收端判为错包 |
| 报头 | Explicit 显式 | ImplicitHeaderOn = false |
| 功率 | E22 30dBm / SX1278 20dBm | 大功率端覆盖小功率端 |
| 前导/同步字 | 对齐评估板默认值 | SX1278 端沿用驱动默认 |
四、SX1278 端程序(SX1278_HAL 工程)
工程基于 STM32CubeMX + HAL,射频驱动是 Semtech sx12xx 驱动(SX1278/radio),SPI2 接 SX1278,USART2 做 printf 打印。
4.1 射频参数
SX1278/radio/sx1276-LoRa.c 中按上表改成与 E22 一致:
#define LoRa_FREQENCY 433000000tLoRaSettings LoRaSettings =
{
LoRa_FREQENCY , // RFFrequency,433MHz 与E22对齐
20, // Power dBm
9, // SignalBw 9 = 500kHz
11, // SpreadingFactor SF11
1, // ErrorCoding 1 = 4/5
true, // CrcOn
false, // ImplicitHeaderOn 显式报头
0, // RxSingleOn 0 = 连续接收
0, // FreqHopOn
4, // HopPeriod
100, // TxPacketTimeout
100, // RxPacketTimeout
32, // PayloadLength};4.2 上电自检:先确认 SPI 通了
调无线最忌讳"一上来就发",第一步永远是读版本寄存器。Src/main.c 里加了一段自检:
uint8_t regVer = 0, regOpMode = 0;
SX1276Read( 0x42, ®Ver ); /* REG_LR_VERSION,正常 0x12 */SX1276Read( 0x01, ®OpMode ); /* REG_LR_OPMODE */printf("RegVersion(0x42) = 0x%02X\r\n", regVer);printf("RegOpMode (0x01) = 0x%02X\r\n", regOpMode);读回 0x12 说明 SPI 时序、片选、复位都正常;读回 0x00 或 0xFF 就是典型的"SPI 没回应",先查接线和 3.3V 供电,别急着改射频参数。程序里还连续多读了 3 次,用来确认 SPI 在高速下稳定。
4.3 接收主循环
Radio = RadioDriverInit( );
Radio->Init( );
Radio->StartRx( );while (1)
{ while( Radio->Process( ) == RF_RX_DONE ) /* 收到一包 */
{
Radio->GetRxPacket( px, ( uint16_t* )&BufferSize ); printf("RX(%d bytes): %s\r\n", (unsigned int)BufferSize, px);
Radio->StartRx( ); /* 回到连续接收 */
}
}Radio->Process() 是驱动的状态机,返回 RF_RX_DONE 时取包,取完必须再次 StartRx(),否则就只收一包停在那儿了。
4.4 按键触发发送 100 包
用 PC13 按键(低电平有效)触发批量发送,payload 为 TX.100.001 … TX.100.100,方便对端统计丢包:
if( HAL_GPIO_ReadPin( KEY_GPIO_Port, KEY_Pin ) == KEY_PRESSED )
{
HAL_Delay( 20 ); /* 消抖 */
for( i = 1; i <= 100; i++ )
{
txLen = sprintf( txMsg, "TX.%03d.%03d", 100, i );
Radio->SetTxPacket( txMsg, txLen + 1 ); while( Radio->Process( ) != RF_TX_DONE ); /* 等本包发完 */
HAL_Delay( 500 ); /* 包间隔 500ms */
}
Radio->StartRx( ); /* 发完回到接收 */
Radio->Process( );
}每包之间留 500ms,避免对端 OLED 刷新不过来,也让频谱仪/电流表有时间读数。
4.5 发送完成自动变回 RX
实测发现连续发 100 包后偶尔卡在非 RX 状态,所以发送结束加了一次",状态检查,看工作是否正常":
uint8_t ver = 0, opm = 0;
SX1276Read( 0x42, &ver ); /* 正常 0x12 */SX1276Read( 0x01, &opm ); /* RX连续接收 = 0x85 */if( ver == 0x12 && (opm & 0x07) != 0x05 )
{
SX1276Write( 0x01, (opm & 0xF8) | 0x05 ); /* 强制拉回 RX */
SX1276Read( 0x01, &opm );
}串口会打印 TX done, back to RX. Ver=0x12 OpMode=0x85 [module OK, in RX],一眼就能判断模块在位、状态正确。这套"读版本 + 读 OpMode 确定状态的变化。
五、测试环境与过程
桌面环境,两端相距约 1 米(近场,主要验证功能互通与参数正确,距离拉远测试留到后续),两根天线平行放置。

上电后评估板 OLED 亮起 EBYTE logo,按 OK 键进入主菜单,用 UP/DOWN 选 Tx Mode / Rx Mode 即可切换收发。


5.1 测试一:E22 发 → SX1278 收
评估板进 Tx Mode,OLED 显示当前参数与发射计数:SF11 / BW500 / CR4/5、Freq:433MHz、Pour:30dBm、Tx Total:100。

SX1278 端串口逐包打印,最后一包编号与对端计数一致,说明 100 包全部落地、无丢包:

5.2 测试二:SX1278 发 → E22 收
按 SX1278 板上 PC13,程序连发 100 包,串口打印 Sent #1: TX.100.001 … 一直到 Sent #100,最后输出 TX done, back to RX. Ver=0x12 OpMode=0x85 [module OK, in RX]。

评估板 OLED 上能看到实时统计:Total / Current / Lost / RSSI,本次收发 RSSI 约 -2dBm(近场)、丢包为 0。
5.3 接收电流
补充一下之前在过程贴中,没有测试的部分

六、结果汇总
| 空口互通 | E22 → SX1278 | 100 | 100 | 0% | — |
| 空口互通 | SX1278 → E22 | 100 | 100 | 0% | 约 -2dBm |
结论:SX1262(E22P-433M30S)与 SX1278 在 433MHz / BW500 / SF11 / CR4-5 / CRC ON / 显式报头下可以稳定互通,双向各 100 包零丢包。
七、总结
评估板菜单是很方便:Home / Setting / Tx Mode / Rx Mode / Version 五个选项就把参数配置和收发测试做完了,前期验证芯片互通根本不用写代码,一块板 就能进行所有测试。
参数对齐 > 一切:频率、BW、SF、CR、CRC、报头、同步字七项参数,要不通信简历不了
先自检再调参:读 0x42 版本很重要。。
电流测试点方便:板载 TR 测试电阻让功耗评估不用飞线,对电池供电项目很实用。
感谢 EEPW 与亿佰特提供的测评机会。
我要赚赏金
