LoRa 串口透传开发
LoRa 串口透传系统设计
为什么要进行串口透传开发?因为很多人并不具备 LoRa 模块的开发能力,很多供应商会选择替用户设计好直观的串口透传系统,解决用户使用 LoRa 门槛高的问题。
串口透传系统设计需求
1、将 LoRa 终端定义成两种角色:Master(主机)和 Slave(从机);
2、一个模块发送任意字节长度(小于 128 Byte)数据,另一模块都可以接收到;
3、PC 机上通过串口调试助手实现接收和发送;
4、终端在 LCD 屏幕上显示终端类型及收发数据包个数;
LoRa 透传系统设计与 PingPang 系统设计最大的不同之处是后者没有完成自定义数据的发送和接收,我们之前 PingPang 系统设计的数据接收和发送是固定数据。
串口透传系统通信机制
透传机制如下图所示,主机通过串口助手发送数据 SetTxPacket() 到从机,从机 StartRx() 处于等待接收的状态,当从机接收到主机的数据之后,使用 printf() 将数据打印出来并返回主机,主机也通过 printf() 将数据打印出来。
串口透传业务流程
初始化 |
主程序 |
LCD任务 |
串口接收任务 |
无线任务 |
|
LoRa串口透传系统功能开发
串口功能开发
对于串口的功能配置,我们在 STM32CubeMX 生成的代码 uart.c 中有 uart1 的接收中断初始化、设置中断优先级和打开全局中断,所以这一步不需要人为干预,我们只需要将启动串口,让串口进入空闲中断的代码添加在 main.c 中即可。
- /* main.c */
- //启动串口1,使能串口空闲中断 。设置为空闲中断模式可以在整包之后才进行数据的收发,然后产生中断,避免重复单个数据的收发(减小开销)
- __HAL_UART_ENABLE_IT(&huart1,UART_IT_IDLE);//注意:使能空闲中断后,不管有没有接收数据,会先触发一次中断,发送一次数据
- HAL_UART_Receive_DMA(&huart1,a_Usart1_RxBuffer,RXLENGHT); //打开DMA接收,串口空闲中断模式配合DMA进行数据的接收
然后我们打开 stm32f0xx_it.c 来配置串口中断。