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

2023-05-16

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<len;t++)
//			{
//				USART_SendData(USART1, USART_RX_BUF[t]);//向串口1发送数据
//				while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
//			}
//			printf("\r\n\r\n");//插入换行
			LCD_ShowString(30,150,200,16,16,USART_RX_BUF);	  
			
			USART_RX_STA=0;
			for(t=0;t<len;t++)
			{
				USART_RX_BUF[t]=' ';
			}
		}

	}	 
}

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32 LoRa无线数传模块 PC通过串口传输数据到单片机 的相关文章

  • 一、ROS的五个特点

    一 ROS的五个特点 xff1a 1 点对点设计 点对点的设计通俗的讲就是一个大的工程项目 xff0c 每个动能相互是独立的 xff0c 或者耦合比较低 有一个大脑负责总的任务调度 xff0c 为服务和客户建立连接充当媒介 各个功能之间可以

随机推荐

  • LINK1104 无法打开文件“libboost_atomic-vc142-mt-gd-x64-1_76.lib”

    问题描述 LNK1104 无法打开文件 libboost atomic vc142 mt gd x64 1 76 lib 可能原因 xff1a 相应的包没有安装 xff0c 可以再电脑上搜一下 xff0c 是否搜索到 xff0c 如果搜索到
  • 2021-08-10

    LEGO loam第一次测试运行数据包nsh indoor outdoor成功 xff1a 记录以下 xff0c 以免自己忘记步骤 在第一个终端里 xff1a 1 source catkin ws devel setup bash xff0
  • 趣味GPS

    简介 GPS的全称是全球定位系统 the Global Positioning System 它属于美国政府 xff0c 并由洛杉矶的联合项目办公室 JPO Joint Program Office 管理 1957年 xff0c 苏联发射第
  • 如何访问西门子S1500PLC的IO系统

    提示 xff1a 本文仅代表个人在项目中的使用看法 xff0c 不参与任何真理的辩驳 文章目录 前言一 硬件配置二 访问方式1 S1500与ET200MP1 ET200MP的组态2 ET200MP的IO调用 2 S1500与ET200AL1
  • CubeMX配合PlatformIO开发STM32(STorM32),配置双MPU6050(板载与外置),并使用gui显示数据

    本人使用的设备 驱动 xff1a Windows10串口助手 4 3 25 其实啥都行 桃饱随处可买的usb ttl xff08 ch340G xff09 桃饱随处可买的stlinkmpu6050 xff08 一个板载 xff0c 一个通过
  • ros学习心得(九)ros之Topic通讯机制及发送与接收节点的编码与调试

    节点间需要有数据交互 xff0c 而ros所要解决的问题就是数据该如何交互 一 通讯原理图 ros在设计Node间通讯机制的时候 xff0c 考虑的是很周全的 Publisher 发送消息的 xff0c Subscriber 接收消息的 T
  • 硬石开发板STM32F407IGT6 (HAL库)学习笔记

    硬石开发板STM32F407IGT6 xff08 HAL库 xff09 学习笔记 2020 06 21 2020 06 22 2020 06 23 2020 06 24 该笔记为学习时遇到的问题与解决方法等内容的记录 xff0c 可能有错
  • Ubuntu20/视觉SLAM十四讲踩坑记录

    Ubuntu 视觉SLAM十四讲踩坑记录 Ubuntu xff08 20 xff09 视觉SLAM十四讲踩坑记录 xff1a 共性问题 xff1a 1 安装OpenCV后 xff0c 例程仍无法找到OpenCV文件 ch3 visualiz
  • AMESim2020.1仿真编译失败解决方法之一

    AMESim2020 1仿真编译失败解决方法之一 问题描述 xff1a 软件安装正确 xff0c 在准备和matlab联合仿真时 xff0c 换用VC2015以上版本编译器编译失败 解决方法 xff1a 到AMESim安装路径下 xff0c
  • Linux/Ubuntu20.04下载安装Geant4及B1示例测试

    Linux Ubuntu20 04下载安装Geant4及B1示例测试 0 参考内容1 下载geant4软件包2 geant4安装准备内容3 geant4文件编译4 安装数据包4 1 安装方式14 2安装方式2 5 添加文件路径6 B1示例测
  • Ubuntu20.04进行CUDA11.0及对应CUDNN安装

    Ubuntu20 04进行CUDA11 0及对应CUDNN安装 xff1a 基本步骤 xff1a 1 安装nvidia显卡驱动 可直接通过 xff1a 软件和更新 gt 附加驱动 选择满足CUDA版本的nvidia专有驱动 gt 应用更改
  • git分离头指针处理

    文章目录 1 什么是git分离头指针2 将git 分离头指针所指向的代码 xff08 commit id xff09 保存下来总结 本文将主要介绍一下git分离头指针状态 xff0c 并记录如何将分离头指针状态的代码合并到分支中 1 什么是
  • Docker使用系列——Docker安装(Ubuntu20.04)

    Docker使用系列 Docker安装 xff08 Ubuntu20 04 xff09 卸载安装测试问题 直接按官方安装教程即可 xff1a Install Docker Engine on Ubuntu 卸载 安装过老版本的Docker则
  • Docker使用系列——生成一个Ubuntu20.04+Pyqt5的容器

    由于在自己的电脑中安装Pyqt5不成功 xff0c 原因是与其他环境中的qt版本不兼容 因此 xff0c 了解到了docker xff0c 这里记录一下在docker中安装pyqt5过程 1 安装Docker并从官方仓库拉取Ubuntu 2
  • C语言实现链表(链式存储结构)

    链表 xff08 链式存储结构 xff09 及创建 链表 xff0c 别名链式存储结构或单链表 xff0c 用于存储逻辑关系为 一对一 的数据 与顺序表不同 xff0c 链表不限制数据的物理存储状态 xff0c 换句话说 xff0c 使用链
  • cmake与make的区别及CMakeLists.txt文件编写

    一 cmake与make的区别 make工具是一个自动化编译工具 xff0c 它会根据Makefile中的规则进行批处理编译 当需要编译的文件较多时 xff0c 使用make工具会大大提高效率 但是 xff0c 当项目较大时 xff0c 编
  • 接口测试学习必看 - 实现简易接口测试

    前言 终于整理到了接口测试部分的内容 xff0c 接口测试可以说是软件测试入门到初级软件测试的一个必备进阶技巧 很多挂着 灰盒测试 的标识 xff0c 其实就是对接口测试的另外一层理解 何为 灰盒 xff0c 能够看到一部分本质的东西 xf
  • roscpp 底层通讯协议更改

    ROS为机器人开发者们提供了不同语言的编程接口 xff0c 其中C 43 43 接口叫做roscpp xff0c 用来创建topic service param xff0c 实现ROS的通信功能 roscpp is a C 43 43 im
  • c++学习心得:STL初学(基础篇)

    标准函数库 xff08 STL xff09 学习心得 基础篇 STL主要由两种组件构成 xff1a 一是容器 xff0c 包括vector list set map等类 xff1b 另一种组件是用以操作这些容器的所谓的泛型算法包括find
  • STM32 LoRa无线数传模块 PC通过串口传输数据到单片机

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