STM32 LoRa无线数传模块 PC通过串口传输数据到单片机 您所在的位置:网站首页 gps模块与单片机之间的信息传输 STM32 LoRa无线数传模块 PC通过串口传输数据到单片机

STM32 LoRa无线数传模块 PC通过串口传输数据到单片机

2024-06-29 12:54| 来源: 网络整理| 查看: 265

STM32 PC通过串口助手无线传输数据到单片机

  之前学习了STM32单片机,使用正点原子的精英板、两个TTL 转LoRa 半双工无线数传模块,通过PC机串口助手,向32单片机传输数据,接收数据使用串口1。

无线数传模块

  模块的无线通讯部分基于Semtech Sx1276或Sx1278 的LoRa扩频调制技术,内部自动扩频计算和前导CRC 纠错处理。具有超高接收灵敏度和超强抗干扰能力,同等发射功率下比其他无线数传方案通讯距离更远,表现出更低的功耗。   无线数传模块采用STM8L低功耗单片机处理器,用户不需要对模块进行二次开发。支持广播透明传输模式和一对多星型协议组网模式。   引脚说明: 在这里插入图片描述

连线架构简图

在这里插入图片描述

串口调试助手发送数据

在这里插入图片描述

开发板LCD显示:

在这里插入图片描述

KEIL工程:

  串口初始化函数:

void uart_init(u32 bound){ //GPIO端口设置 GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE); //使能USART1,GPIOA时钟 //USART1_TX GPIOA.9 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出 GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.9 //USART1_RX GPIOA.10初始化 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//PA10 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入 GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.10 //Usart1 NVIC 配置 NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//抢占优先级3 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //子优先级3 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能 NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器 //USART 初始化设置 USART_InitStructure.USART_BaudRate = bound;//串口波特率 USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式 USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位 USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制 USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收发模式 USART_Init(USART1, &USART_InitStructure); //初始化串口1 USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启串口接受中断 USART_Cmd(USART1, ENABLE); //使能串口1 }

  串口1中断处理函数:

void USART1_IRQHandler(void) //串口1中断服务程序 { u8 Res; if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是0x0d 0x0a结尾) { Res =USART_ReceiveData(USART1); //读取接收到的数据 if((USART_RX_STA&0x8000)==0)//接收未完成 { if(USART_RX_STA&0x4000)//接收到了0x0d { if(Res!=0x0a)USART_RX_STA=0;//接收错误,重新开始 else USART_RX_STA|=0x8000; //接收完成了 } else //还没收到0X0D { if(Res==0x0d)USART_RX_STA|=0x4000; else { USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ; USART_RX_STA++; if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收数据错误,重新开始接收 } } } } }

  主函数:

#include "led.h" #include "delay.h" #include "key.h" #include "sys.h" #include "lcd.h" #include "usart.h" int main(void) { u16 t; u16 len; u8 lcd_id[12]; //存放LCD ID字符串 delay_init(); //延时函数初始化 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 uart_init(9600); //串口初始化为115200 LED_Init(); //LED端口初始化 LCD_Init(); //KEY_Init(); //初始化与按键连接的硬件接口 POINT_COLOR=RED; sprintf((char*)lcd_id,"LCD ID:%04X",lcddev.id);//将LCD ID打印到lcd_id数组。 LCD_Clear(WHITE); POINT_COLOR=RED; LCD_ShowString(30,40,210,24,24,"Elite STM32F1 ^_^"); LCD_ShowString(30,70,200,16,16,"LoRa"); //低耗远距数传模块 LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK"); LCD_ShowString(30,110,200,16,16,lcd_id); //显示LCD ID LCD_ShowString(30,130,200,12,12,"2020/08/06"); while(1) { if(USART_RX_STA&0x8000) { len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度 // printf("\r\n您发送的消息为:\r\n\r\n"); // for(t=0;t USART_RX_BUF[t]=' '; } } } }

很多人想要源码,其实用正点原子的LCD工程,再复制main函数就可以了,下面是云盘链接: 百度网盘链接:https://pan.baidu.com/s/1LtINpks_FGVjFcfQyLi_uQ 提取码:z2gb



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有