在上章初步测试了E22-400TBL-01的LoRa模块后,正巧手头有两块某STM32F103开发板来可以用来驱动该LoRa模块,通过查阅《E22-400T22S_UserManual_CN_V2.7》手册可知核心E22-400T22S模块可以直接通过串口来进行通讯,同时可以运用GPIO的电平信号来控制M0、M1进行模式的切换。
下图是STM32F103开发板与E22-400TBL-01连接实物图:
编程思路是将上位机发送的数据先经过STM32F103的UART1,再通过STM32F103的UART2发送给E22-400T22S模块,E22-400T22S模块将数据通过RF发送出去;同理,E22-400T22S模块通过RF接收到的数据先经过STM32F103的UART2,再通过STM32F103的UART1发送给上位机。
运用STM32CubeMX生成形成工程:
生成的工程用keil进行编辑,在生成的工程中加入M0,M1的控制引脚,以及串口中断的处理方式:
//模式0:透传模式
void LoRa_mode0(void)
{
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_0,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_RESET);
}
//模式1:WOR模式
void LoRa_mode1(void)
{
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_0,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_RESET);
}
//模式2:配置模式
void LoRa_mode2(void)
{
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_0,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_SET);
}
//模式3:配置模式
void LoRa_mode3(void)
{
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_0,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_SET);
}
void USART1_IRQHandler(void)
{
/* USER CODE BEGIN USART1_IRQn 0 */
uint8_t ch=0;
/* USER CODE END USART1_IRQn 0 */
HAL_UART_IRQHandler(&huart1);
/* USER CODE BEGIN USART1_IRQn 1 */
if(__HAL_UART_GET_FLAG(&huart1, UART_FLAG_RXNE) !=RESET)
{
ch=(uint16_t)READ_REG(huart1.Instance->DR);
WRITE_REG(huart2.Instance->DR,ch);
}
/* USER CODE END USART1_IRQn 1 */
}
void USART2_IRQHandler(void)
{
/* USER CODE BEGIN USART2_IRQn 0 */
uint8_t ch;
/* USER CODE END USART2_IRQn 0 */
HAL_UART_IRQHandler(&huart2);
/* USER CODE BEGIN USART2_IRQn 1 */
if(__HAL_UART_GET_FLAG(&huart2, UART_FLAG_RXNE) != RESET)
{
ch=(uint16_t)READ_REG(huart2.Instance->DR);
WRITE_REG(huart1.Instance->DR, ch);
}
/* USER CODE END USART2_IRQn 1 */
}
并下载验证:
通过验证,可以发现该程序可以实现两个STM32F103开发板分别控制两个LoRa模块相互进行数据交互,为接下来的相关测试实验以及项目上的应用提供便利。