本帖最后由 nich20xx 于 2020-7-5 06:31 编辑
# 1 前言
STM32WL的sub-GHZ射频模块可运行在150~960MHz ISM频段,支持LoRa、(G)FSK\(G)MSK的收发功能,支持(D)BPSK的发送功能。
> 注:LoRa版本只在STM32WLE**5**、STM32WL5**5**系列中支持
# 2 STM32WL sub-GHz Radio
## 2.1 STM32WL Radio系统框图
# 3NUCLEO-WL55JC2 射频前端电路
NUCLEO-WL55JC2 射频硬件电路支持两种功率输出方式(LoRa):TX HP PA ( 高功率输出,最大22dBm)与TX LP PA( 缺省功率输出, 最大15Bm)。
- 使用1个单刀三掷(SP3T)的高频开关(BGS13S4N9)来实现TX HP PA、TX LP PA、RX 三条射频回路的切换。
- 使用2个单刀双掷(SP2T)的高频开关(NX3L1T3157GM)来实现DC供电与LDO供电方式的切换。
## 3.1 射频发送电路
NUCLEO-WL55JC2 射频发送电路设计的非常灵活,可以用于评估4种功率输出组合,以满足不同IoT需求。
1. Power Management Config.
- 通过LDO与DC-DC的选择,以满足成本与射频整体功耗(发送与接收)的不同需求
- LDO具有更大的功耗,但是具有较低的BOM成本
- DC-DC具有更优的功耗,但是因为额外需要电感等器件,因此具有相对较高些的BOM成本
2. Power Outputs
- 通过TX LP PA与TX HP PA的选择,以满足输出功率(距离)与射频发送功耗的不同需求
- LP PA 最大输出14dBm,在14dBm范围内的应用,具有非常好的发送功耗优势
- LP HA 最大输出22dBm,具有更大的输出功率,更远的距离,但相对发送功耗也会较大
Power Management与Power Output
通过组合Power Management与Power Output,可以形成以下4种射频发送电路方案,用户可根据实际应用场景选择。
# 4 射频测试
## 4.1 射频测试代码
1. NUCLEO-WL55JC2高频开关控制函数,可以用于控制射频前端回路,具有4种切换状态,关闭(睡眠)、RX、TX LP PA、TX HP PA
```
/**
* @briefConfigure Radio Switch.
* @paramConfig: Specifies the Radio RF switch path to be set.
* This parameter can be one of following parameters:
* @arg RADIO_SWITCH_OFF
* @arg RADIO_SWITCH_RX
* @arg RADIO_SWITCH_RFO_LP
* @arg RADIO_SWITCH_RFO_HP
* @retval BSP status
*/
int32_t BSP_RADIO_ConfigRFSwitch(BSP_RADIO_Switch_TypeDef Config)
{
switch (Config)
{
case RADIO_SWITCH_OFF:
{
/* Turn off switch */
HAL_GPIO_WritePin(RF_SW_CTRL3_GPIO_PORT, RF_SW_CTRL3_PIN, GPIO_PIN_RESET);
HAL_GPIO_WritePin(RF_SW_CTRL1_GPIO_PORT, RF_SW_CTRL1_PIN, GPIO_PIN_RESET);
HAL_GPIO_WritePin(RF_SW_CTRL2_GPIO_PORT, RF_SW_CTRL2_PIN, GPIO_PIN_RESET);
break;
}
case RADIO_SWITCH_RX:
{
/*Turns On in Rx Mode the RF Swicth */
HAL_GPIO_WritePin(RF_SW_CTRL3_GPIO_PORT, RF_SW_CTRL3_PIN, GPIO_PIN_SET);
HAL_GPIO_WritePin(RF_SW_CTRL1_GPIO_PORT, RF_SW_CTRL1_PIN, GPIO_PIN_SET);
HAL_GPIO_WritePin(RF_SW_CTRL2_GPIO_PORT, RF_SW_CTRL2_PIN, GPIO_PIN_RESET);
break;
}
case RADIO_SWITCH_RFO_LP:
{
/*Turns On in Tx Low Power the RF Swicth */
HAL_GPIO_WritePin(RF_SW_CTRL3_GPIO_PORT, RF_SW_CTRL3_PIN, GPIO_PIN_SET);
HAL_GPIO_WritePin(RF_SW_CTRL1_GPIO_PORT, RF_SW_CTRL1_PIN, GPIO_PIN_SET);
HAL_GPIO_WritePin(RF_SW_CTRL2_GPIO_PORT, RF_SW_CTRL2_PIN, GPIO_PIN_SET);
break;
}
case RADIO_SWITCH_RFO_HP:
{
/*Turns On in Tx High Power the RF Swicth */
HAL_GPIO_WritePin(RF_SW_CTRL3_GPIO_PORT, RF_SW_CTRL3_PIN, GPIO_PIN_SET);
HAL_GPIO_WritePin(RF_SW_CTRL1_GPIO_PORT, RF_SW_CTRL1_PIN, GPIO_PIN_RESET);
HAL_GPIO_WritePin(RF_SW_CTRL2_GPIO_PORT, RF_SW_CTRL2_PIN, GPIO_PIN_SET);
break;
}
default:
break;
}
return BSP_ERROR_NONE;
}
```
2. 简化的发射性能测试代码
```
{
// Radio initialization
RadioEvents.TxDone = OnTxDone;
RadioEvents.RxDone = OnRxDone;
RadioEvents.TxTimeout = OnTxTimeout;
RadioEvents.RxTimeout = OnRxTimeout;
RadioEvents.RxError = OnRxError;
Radio.Init(&RadioEvents);
Radio.SetTxConfig(MODEM_LORA, TX_OUTPUT_POWER, 0, LORA_BANDWIDTH,
LORA_SPREADING_FACTOR, LORA_CODINGRATE,
LORA_PREAMBLE_LENGTH, LORA_FIX_LENGTH_PAYLOAD_ON,
true, 0, 0, LORA_IQ_INVERSION_ON, TX_TIMEOUT_VALUE);
Radio.SetChannel(RF_FREQUENCY);
Radio.TxCw();
while(1);
}
```
## 4.2 射频性能测试结果
- NUCLEO-WL55JC2 工作频段 433~510MHz
- 输出功率理论设置为470.3MHz,14dBm
- 实测值为13.2dBm(未包含线损)
- 二次谐波为-44.3dBm
# 5 参考
- RM0461 STM32WLEx advanced Arm-based 32-bit MCUs with sub-GHz radio solution Rev01
- STM32Cube_FW_WL_V0.4.0
- UM2592_Nucleo-73_WL55.pdf