|
|
#include "main.h"
|
|
|
#include "LoRa.h"
|
|
|
|
|
|
#include <stdlib.h>
|
|
|
#include <stdio.h>
|
|
|
#include <string.h>
|
|
|
#include "stdint.h"
|
|
|
#include "stm32l4xx_hal.h"
|
|
|
|
|
|
//GPIO_TypeDef *PA0_GPIO_Port;
|
|
|
//uint16_t PA0_Pin;
|
|
|
#define SIZE 256
|
|
|
|
|
|
extern UART_HandleTypeDef hlpuart1;
|
|
|
extern uint8_t isPrintf; // 定义于 main 函数: 是否打印日志
|
|
|
#define LPUART1_REC_LEN 1024
|
|
|
uint8_t bRxBufferUart1[1]; // 接收数据
|
|
|
uint8_t LPUART1_RX_BUF[LPUART1_REC_LEN]; // 缓存数据
|
|
|
volatile uint16_t LPUART1_RX_LEN = 0;
|
|
|
uint8_t LPUART1_RX_STA[SIZE];
|
|
|
uint8_t Tran_Data[SIZE];
|
|
|
#define CMD_LEN 100
|
|
|
char cmdSend[CMD_LEN]; // 发送上报数据的 AT 指令
|
|
|
uint32_t DefaultTimeout = 300; // 超时
|
|
|
/*LoRa 模块 AT 指令发送
|
|
|
|
|
|
* 参数: uint_t *cmd,需要发送的命令
|
|
|
* uint8_t *result,期望获得的结果
|
|
|
* uint32_t timeOut,等待期望结果的时间
|
|
|
* uint8_t isPrintf,是否打印 Log
|
|
|
*/
|
|
|
void LoRa_SendCmd(uint8_t *cmd, uint8_t *result, uint32_t timeOut, uint8_t isPrintf)
|
|
|
{
|
|
|
// char *pos;
|
|
|
HAL_UART_Transmit(&hlpuart1, cmd, strlen((const char *)cmd), 0xff); // 发送AT 指令
|
|
|
//HAL_UART_Receive_IT(&hlpuart1, bRxBufferUart1, 1); // 启动低功耗串口接收中断
|
|
|
HAL_Delay(timeOut); // 延时等待
|
|
|
// while (1)
|
|
|
// {
|
|
|
// pos = strstr((const char *)LPUART1_RX_BUF, (const char *)result); // 期望结果,如 "OK"
|
|
|
// printf("receive:%s\r\n", LPUART1_RX_BUF); // 打印 AT 指令返回的数据
|
|
|
// if (pos)
|
|
|
// {
|
|
|
// printf("Success!\r\n");
|
|
|
// LPUART1_RX_LEN = 0;
|
|
|
// memset(LPUART1_RX_BUF, 0, strlen((const char *)LPUART1_RX_BUF));
|
|
|
// // 清除缓存
|
|
|
// break; // 不清空数据,待处理
|
|
|
// }
|
|
|
// else
|
|
|
// {
|
|
|
// printf("Fail!\r\n");
|
|
|
// LPUART1_RX_LEN = 0;
|
|
|
// memset(LPUART1_RX_BUF, 0, strlen((const char *)LPUART1_RX_BUF)); // 清除缓存
|
|
|
// HAL_UART_Transmit(&hlpuart1, cmd, strlen((const char *)cmd), 0xff);
|
|
|
// // error 或者无应答,再次发送
|
|
|
// HAL_UART_Receive_IT(&hlpuart1, bRxBufferUart1, 1); // 启动低功耗串口接收中断
|
|
|
// HAL_Delay(timeOut);
|
|
|
// }
|
|
|
// }
|
|
|
}
|
|
|
/*LoRa 模块,透明传输点对点模式配置
|
|
|
* uint8_t isPrintf:是否打印 Log
|
|
|
* uint8_t isReboot:是否重启
|
|
|
* 模块地址:10086 通信信道:10 发射功率:11dbm
|
|
|
*/
|
|
|
void LoRa_T_P_Attach(uint8_t isPrintf, uint8_t isReboot)
|
|
|
{
|
|
|
if (isReboot == 1)
|
|
|
{
|
|
|
//HAL_GPIO_WritePin(PA0_GPIO_Port, PA0_Pin, GPIO_PIN_SET);
|
|
|
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET);
|
|
|
HAL_Delay(1000);
|
|
|
// Configure UART settings
|
|
|
LoRa_SendCmd((uint8_t *)"AT+UART=7,0\r\n", (uint8_t *)"OK",
|
|
|
DefaultTimeout, isPrintf);
|
|
|
// Configure wireless rate
|
|
|
LoRa_SendCmd((uint8_t *)"AT+WLRATE=10,5\r\n", (uint8_t *)"OK",
|
|
|
DefaultTimeout, isPrintf);
|
|
|
// Configure transmit power
|
|
|
LoRa_SendCmd((uint8_t *)"AT+TPOWER=0\r\n", (uint8_t *)"OK",
|
|
|
DefaultTimeout, isPrintf);
|
|
|
// Configure transmission mode
|
|
|
LoRa_SendCmd((uint8_t *)"AT+TMODE=0\r\n", (uint8_t *)"OK",
|
|
|
DefaultTimeout, isPrintf);
|
|
|
// Configure wireless time
|
|
|
LoRa_SendCmd((uint8_t *)"AT+WLTIME=0\r\n", (uint8_t *)"OK",
|
|
|
DefaultTimeout, isPrintf);
|
|
|
// Configure wireless mode
|
|
|
LoRa_SendCmd((uint8_t *)"AT+CWMODE=0\r\n", (uint8_t *)"OK",
|
|
|
DefaultTimeout, isPrintf);
|
|
|
// Configure address
|
|
|
LoRa_SendCmd((uint8_t *)"AT+ADDR=27,66\r\n", (uint8_t *)"OK",
|
|
|
DefaultTimeout, isPrintf);
|
|
|
//HAL_GPIO_WritePin(PA0_GPIO_Port, PA0_Pin, GPIO_PIN_RESET);
|
|
|
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET);
|
|
|
printf("Attach!\r\n");
|
|
|
}
|
|
|
}
|
|
|
/*
|
|
|
* LoRa 模块,透明传输广播模式配置
|
|
|
* uint8_t isPrintf:是否打印 Log
|
|
|
* uint8_t isReboot:是否重启
|
|
|
* 模块地址:0xFFFF 通信信道:10 发射功率:11dbm
|
|
|
*/
|
|
|
void LoRa_T_V_Attach(uint8_t isPrintf, uint8_t isReboot)
|
|
|
{
|
|
|
if (isReboot == 1)
|
|
|
{
|
|
|
//HAL_GPIO_WritePin(PA0_GPIO_Port, PA0_Pin, GPIO_PIN_SET);
|
|
|
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET);
|
|
|
HAL_Delay(1000);
|
|
|
LoRa_SendCmd((uint8_t *)"AT+UART=7,0\r\n", (uint8_t *)"OK",
|
|
|
DefaultTimeout, isPrintf);
|
|
|
LoRa_SendCmd((uint8_t *)"AT+WLRATE=11,5\r\n", (uint8_t *)"OK",
|
|
|
DefaultTimeout, isPrintf);
|
|
|
LoRa_SendCmd((uint8_t *)"AT+TPOWER=0\r\n", (uint8_t *)"OK",
|
|
|
DefaultTimeout, isPrintf);
|
|
|
LoRa_SendCmd((uint8_t *)"AT+TMODE=0\r\n", (uint8_t *)"OK",
|
|
|
DefaultTimeout, isPrintf);
|
|
|
LoRa_SendCmd((uint8_t *)"AT+WLTIME=0\r\n", (uint8_t *)"OK",
|
|
|
DefaultTimeout, isPrintf);
|
|
|
LoRa_SendCmd((uint8_t *)"AT+CWMODE=0\r\n", (uint8_t *)"OK",
|
|
|
DefaultTimeout, isPrintf);
|
|
|
LoRa_SendCmd((uint8_t *)"AT+ADDR=FF,FF\r\n", (uint8_t *)"OK",
|
|
|
DefaultTimeout, isPrintf);
|
|
|
//HAL_GPIO_WritePin(PA0_GPIO_Port, PA0_Pin, GPIO_PIN_RESET);
|
|
|
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET);
|
|
|
printf("Attach!\r\n");
|
|
|
}
|
|
|
}
|
|
|
/*
|
|
|
* LoRa 模块,定向传输点对点模式配置
|
|
|
* uint8_t isPrintf:是否打印 Log
|
|
|
* uint8_t isReboot:是否重启
|
|
|
*/
|
|
|
void LoRa_D_P_Attach(uint8_t isPrintf, uint8_t isReboot)
|
|
|
{
|
|
|
if (isReboot == 1)
|
|
|
{
|
|
|
//HAL_GPIO_WritePin(PA0_GPIO_Port, PA0_Pin, GPIO_PIN_SET);
|
|
|
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET);
|
|
|
LoRa_SendCmd((uint8_t *)"AT+UART=7,0\r\n", (uint8_t *)"OK",
|
|
|
DefaultTimeout, isPrintf);
|
|
|
LoRa_SendCmd((uint8_t *)"AT+WLRATE=10,5\r\n", (uint8_t *)"OK",
|
|
|
DefaultTimeout, isPrintf);
|
|
|
LoRa_SendCmd((uint8_t *)"AT+TPOWER=0\r\n", (uint8_t *)"OK",
|
|
|
DefaultTimeout, isPrintf);
|
|
|
LoRa_SendCmd((uint8_t *)"AT+TMODE=1\r\n", (uint8_t *)"OK",
|
|
|
DefaultTimeout, isPrintf);
|
|
|
LoRa_SendCmd((uint8_t *)"AT+WLTIME=0\r\n", (uint8_t *)"OK",
|
|
|
DefaultTimeout, isPrintf);
|
|
|
LoRa_SendCmd((uint8_t *)"AT+CWMODE=0\r\n", (uint8_t *)"OK",
|
|
|
DefaultTimeout, isPrintf);
|
|
|
LoRa_SendCmd((uint8_t *)"AT+ADDR=27,66\r\n", (uint8_t *)"OK",
|
|
|
DefaultTimeout, isPrintf);
|
|
|
//HAL_GPIO_WritePin(PA0_GPIO_Port, PA0_Pin, GPIO_PIN_RESET);
|
|
|
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET);
|
|
|
printf("Attach!\r\n");
|
|
|
// 请补充代码
|
|
|
}
|
|
|
}
|
|
|
/*
|
|
|
* LoRa 模块,定向传输广播模式配置
|
|
|
* uint8_t isPrintf:是否打印 Log
|
|
|
* uint8_t isReboot:是否重启
|
|
|
*/
|
|
|
void LoRa_D_V_Attach(uint8_t isPrintf, uint8_t isReboot)
|
|
|
{
|
|
|
if (isReboot == 1)
|
|
|
{
|
|
|
//HAL_GPIO_WritePin(PA0_GPIO_Port, PA0_Pin, GPIO_PIN_SET);
|
|
|
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET);
|
|
|
LoRa_SendCmd((uint8_t *)"AT+UART=7,0\r\n", (uint8_t *)"OK",
|
|
|
DefaultTimeout, isPrintf);
|
|
|
LoRa_SendCmd((uint8_t *)"AT+WLRATE=10,5\r\n", (uint8_t *)"OK",
|
|
|
DefaultTimeout, isPrintf);
|
|
|
LoRa_SendCmd((uint8_t *)"AT+TPOWER=0\r\n", (uint8_t *)"OK",
|
|
|
DefaultTimeout, isPrintf);
|
|
|
LoRa_SendCmd((uint8_t *)"AT+TMODE=1\r\n", (uint8_t *)"OK",
|
|
|
DefaultTimeout, isPrintf);
|
|
|
LoRa_SendCmd((uint8_t *)"AT+WLTIME=0\r\n", (uint8_t *)"OK",
|
|
|
DefaultTimeout, isPrintf);
|
|
|
LoRa_SendCmd((uint8_t *)"AT+CWMODE=0\r\n", (uint8_t *)"OK",
|
|
|
DefaultTimeout, isPrintf);
|
|
|
LoRa_SendCmd((uint8_t *)"AT+ADDR=FF,FF\r\n", (uint8_t *)"OK",
|
|
|
DefaultTimeout, isPrintf);
|
|
|
//HAL_GPIO_WritePin(PA0_GPIO_Port, PA0_Pin, GPIO_PIN_RESET);
|
|
|
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET);
|
|
|
printf("Attach!\r\n");
|
|
|
// 请补充代码
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|