
上一节针对lora的驱动移植工作已经完成,而本节就要实现lora-b1开发板的点对点通信。一块儿板子作为发送端,另一块儿作为接收端。上电以后发送端每个500ms发送一次数据,接收端接收到以后进行解析分析如果和发送的数据一样LED进行一次亮灭切换。
开发环境准备:
硬件:
- Lora-B1开发板两块(一发一收)
- DAPLINK(或STLINK、Jlink)调试器
软件:
- stm32cubemx
- MDK5
- 基于上节移植好驱动的代码
修改Lora参数配置:
Sx1278芯片无线通信支持lora、fsk、ook等通信模式。而我们就只讨论lora模式下的配置,而针对lora模式又有很多参数可以配置。
打开sx1276-lora.c文件,如下图所示地方就是默认的参数配置,这里一共有13个参数,而我们要修改lora模式下通信参数也是在这里修改。

这13个参数从上到下分别表示:
- 无线通信频率
- 功率
- 带宽
- 扩频因子
- 纠错码
- CRC校验开关
- 隐藏头部信息开关
- 接收单次模式、连续模式配置
- 跳频模式开关
- 跳频之间的周期长度
- 发送包超时时间
- 接收包超时时间
- 负载信息长度
无线通信频率,我们使用的是sx1278芯片,和sx1276芯片在频率上有区别,所以这里我们要配置在sx1278范围内的频率。可参考下图:

扩频因子可能不太好理解,可以简单的先理解为lora的一种提高传输可靠性的技术,其他参数不变的情况下扩频因子越大,传输固定量数据需要的时间越长,抗干扰性越好。相反,扩频因子越小,传输的速度快但抗干扰性会降低。
关于跳频我们本节不会使用,所以把跳频可以关掉。
还有个单次接收和连续接收的配置,我们把他修改为连续接收,也就是一直处于接收状态。在一定时间内没有收到数据也不会产生接收超时。
所以最终我们需要在默认值的基础上修改两个参数,频率改为429000000;RxSingleOn设置为0即为连续接收模式。
编写lora发送接收应用:
一上电初始化完成之后进入while循环,发送端会每500ms发送一包数据,发送完成LED闪烁一次。
接收端接收到数据以后,进行比对,如果和发送端发送的数据一样就让led闪烁一次。
代码如下:
int main(void)
{
/* USER CODE BEGIN 1 */
uint16_t counter=0;
uint8_t rbuf[10];
uint16_t rlen;
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_SPI1_Init();
/* USER CODE BEGIN 2 */
tRadioDriver *radio;
radio = RadioDriverInit( );
radio->Init();
radio->StartRx();
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
switch(radio->Process())
{
case RF_RX_DONE:
radio->GetRxPacket(rbuf,&rlen);
if(memcmp(rbuf,"12345",rlen)==0)
{
HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);
}
break;
case RF_TX_DONE:
radio->StartRx();
HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);
break;
}
HAL_Delay(1);
counter++;
if(counter==500)
{
if(loratx==1)
{
radio->SetTxPacket( "12345", 5);
}
counter=0;
}
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
实验结果:
分别把发送端程序和接收到程序烧录到两块儿LORA-B1开发板。上电可以看到两块儿板上led等都开始闪烁,当按下发送端板子复位按键停止运行时,接收端的LED也不再会闪烁。