[应用相关] stm32Hal库与AS32_TTL lora模块通讯

[复制链接]
302|0
晓伍 发表于 2025-9-9 15:20 | 显示全部楼层 |阅读模式
单片机使用的是 STM32f407zet6 通讯串口使用的是 uart5 波特率9600

Lora.h

/*
* Lora.h
*
*  Created on: Jan 6, 2023
*      Author: Administrator
*/

#ifndef USER_LORA_H_
#define USER_LORA_H_


#ifndef true
#define true 1
#endif

#ifndef false
#define false 0
#endif



#define DEFAULT_HEAD 0XC0
#define DEFAULT_ADDH 0X00
#define DEFAULT_ADDL 0X02
#define DEFAULT_CHANEL 0X17
#define DEFAULT_SPEED  0X1A
#define DEFAULT_OPTION 0X40

#define MAX_TT_COUNT 64

typedef struct
{
        uint8_t HEAD;//固定头 0xc0 or 0xc2(掉电保存)
        uint8_t ADDH;//模块地址高字节
        uint8_t ADDL;//模块地址低字节
        union
        {
                uint8_t SPEED;//速率参数 包括串口速率和空中速率
                struct
                {
                        uint8_t SPEEDbit0:1;
                        uint8_t SPEEDbit1:1;
                        uint8_t SPEEDbit2:1;
                        uint8_t SPEEDbit3:1;
                        uint8_t SPEEDbit4:1;
                        uint8_t SPEEDbit5:1;
                        uint8_t SPEEDbit6:1;
                        uint8_t SPEEDbit7:1;
                };
        };

        uint8_t CHAN;//通讯盘【频率 0x00-0X1F
        union
        {
                uint8_t OPTION;//
                struct
                {
                        uint8_t OPTIONbit0:1;
                        uint8_t OPTIONbit1:1;
                        uint8_t OPTIONbit2:1;
                        uint8_t OPTIONbit3:1;
                        uint8_t OPTIONbit4:1;
                        uint8_t OPTIONbit5:1;
                        uint8_t OPTIONbit6:1;
                        uint8_t OPTIONbit7:1;
                };
        };
}ParameterData;


typedef struct
{
        uint8_t ADDH;
        uint8_t ADDL;
        uint8_t CHANEL;
        uint8_t tt_buff[MAX_TT_COUNT];
}TT_buff;//透传数据包

typedef enum
{
        MOD0 = 0x00,//透明传输模式
        MOD1,//定向传输模式
}LORA_TRANSMIT_MOD;


extern ParameterData GloraInitParemeter;


void userDelay(uint32_t ms);
void LoraInit();
void LoraParameterSet(ParameterData cmd,uint8_t length);
HAL_StatusTypeDef TemporarySetParameter(ParameterData parameter);
HAL_StatusTypeDef TT_LoraTransmit(uint8_t* data,uint8_t length );
HAL_StatusTypeDef BT_LoraTransmit(uint16_t addres,uint8_t chanel, uint8_t *data, uint8_t length);

#endif /* USER_LORA_H_ */



Lora.c

/*
* Lora.c
*
*  Created on: Jan 6, 2023
*      Author: Administrator
*/

#include "gpio.h"
#include "Lora.h"
//#include "FreeRTOS.h"
#include "main.h"
//#include "task.h"
//#include "cmsis_os.h"
#include "usart.h"
#include "string.h"
//#include "usbd_cdc_if.h"


//#define RTOS_DEL false//若使用了FreeRtos则取消该注释 将HAL_DEL  改为 false
#define HAL_DEL true
ParameterData LoraCmd;
ParameterData GloraInitParemeter;

static TT_buff bt_buff;

void userDelay(uint32_t ms)
{
#if HAL_DEL
HAL_Delay(ms);
#endif

#if RTOS_DEL
        osDelay(ms);
#endif
}


//lora初始化
//根据需要修改配置参数参数
void LoraInit()
{
        GloraInitParemeter.HEAD = 0xC0;
        GloraInitParemeter.ADDH = 0x00;
        GloraInitParemeter.ADDL = 0x06;
        GloraInitParemeter.SPEED = 0x1A;
        GloraInitParemeter.CHAN = 0x19;
        GloraInitParemeter.OPTION = 0xC0;//0xc0定向传输,0x40透明传输

        LoraParameterSet(GloraInitParemeter,sizeof(GloraInitParemeter));
}

//lora 参数配置
void LoraParameterSet(ParameterData cmd,uint8_t length)
{
        //模块进入休眠模式
        HAL_GPIO_WritePin(MD0_GPIO_Port, MD0_Pin, GPIO_PIN_SET);
        HAL_GPIO_WritePin(MD1_GPIO_Port, MD1_Pin, GPIO_PIN_SET);
        userDelay(100);
        HAL_UART_Transmit_IT(&huart5, (uint8_t *)&cmd, length);
//        HAL_UART_Transmit_IT(&huart1, (uint8_t *)&cmd, length);
        userDelay(100);
        HAL_GPIO_WritePin(MD0_GPIO_Port, MD0_Pin, GPIO_PIN_RESET);
        HAL_GPIO_WritePin(MD1_GPIO_Port, MD1_Pin, GPIO_PIN_RESET);
        userDelay(100);
}

/*临时修改参数
*
*/
HAL_StatusTypeDef TemporarySetParameter(ParameterData parameter)
{
        ParameterData loraInitParemeter;

        loraInitParemeter.HEAD = 0xC2;//掉电不保存
        loraInitParemeter.ADDH = parameter.ADDH;
        loraInitParemeter.ADDL = parameter.ADDL;
        loraInitParemeter.SPEED = parameter.SPEED;
        loraInitParemeter.CHAN = parameter.CHAN;
        loraInitParemeter.OPTION = parameter.OPTION;

        LoraParameterSet(loraInitParemeter,sizeof(loraInitParemeter));

        return HAL_OK;
}


//透传发送函数
HAL_StatusTypeDef TT_LoraTransmit(uint8_t* data,uint8_t length )
{
        HAL_UART_Transmit_IT(&huart5, data, length);

        return HAL_OK;
}

//定向传输
HAL_StatusTypeDef BT_LoraTransmit(uint16_t addres,uint8_t chanel, uint8_t *data,uint8_t length )
{
        uint8_t leng = length;

        memset((uint8_t *)&bt_buff,0,sizeof(bt_buff));

        bt_buff.ADDH = (uint8_t)(addres>>8);
        bt_buff.ADDL = (uint8_t)addres;
        bt_buff.CHANEL = chanel;
       
        memcpy((uint8_t *)&bt_buff.tt_buff,(uint8_t *)data,leng);
        HAL_UART_Transmit_IT(&huart5, (uint8_t *)&bt_buff, leng + 3);

        return HAL_OK;




main.c中测试函数

void StartTask03(void const * argument)
{
  /* USER CODE BEGIN StartTask03 */

        uint8_t testArray[7] = "hello\r\n";
        uint8_t chanel = 0x17;
        uint16_t address = 0x0005;


  /* Infinite loop */
  for(;;)
  {
          HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);
          BT_LoraTransmit(address,chanel,(uint8_t *)&testArray,sizeof(testArray));
          osDelay(1500);
  }
  /* USER CODE END StartTask03 */
}


试验结果

5847668bfa9223c2fa.png

————————————————
版权声明:本文为CSDN博主「zhao1peng」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_33954661/article/details/128617248

您需要登录后才可以回帖 登录 | 注册

本版积分规则

101

主题

4362

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部