正点原子ATK-LORA-01无线串口代码移植+STM32F103C8T6(标准库)

目录

一、ATK-LORA-01无线串口资料

二、代码移植

1.分析

(1)usart3(也可以是其他的串口)用于接收数据的串口

usart.h

(2)time3(也可以是其他的定时器)用于时序的设置

(3)lora.c

三、演示

1.主机(发送方)

(1)主机接线

(2)主机代码(发送方)

(3)主机实物

 插上无线串口通电即可发送​

 2.从机(接收方)

(1)从机接线(LORA与主机相同)

 (2)从机代码(接收方)

(3)从机实物

接上TTL和LORA并通电即可用

 ​

 3.串口显示结果(从机串口1接的串口助手)

 4.注意

(1)接收数据的函数与发送数据的函数不能同时烧录,只能实现接收和发送二者之一的功能,若要在接收的基础上返送可以写一个按键扫描,当按键按下发送,没按下一直处于接收状态,此时就可以同时存在,但是不能连续发送(可能还得优化!)。

 (2)发送时必须有延时函数,不然接收会出现乱码!


一、ATK-LORA-01无线串口资料

该资料为正点原子提供的资料,也可以去正点原子的官网下载资料,这里只是方便大家资料提取

链接:https://pan.baidu.com/s/11WQbh1tCQIu54zZDEiqmew 
提取码:tsy6 
--来自百度网盘超级会员V4的分享

本人自己移植后的工程:

链接:https://pan.baidu.com/s/15S6a3le2xYR56GH5qRscDg 
提取码:tsy6 
--来自百度网盘超级会员V4的分享

二、代码移植

1.分析

移植前首先需要创建的片上外设为:

(1)usart3(也可以是其他的串口)用于接收数据的串口

usart3.c

/****************
1、串口时钟、GPIOA时钟使能
2、GPIOA端口模式设置
3、串口参数初始化
4、开启中断并且初始化NVIC
5、使能串口
6、编写中断处理函数
******************/
#include "sys.h"  //包含需要的头文件

extern u8 Lora_mode;
//串口接收缓存区 	
u8 USART3_RX_BUF[USART3_MAX_RECV_LEN]; 			//接收缓冲,最大USART3_MAX_RECV_LEN个字节.
u8 USART3_TX_BUF[USART3_MAX_SEND_LEN]; 			//发送缓冲,最大USART3_MAX_SEND_LEN字节

//通过判断接收连续2个字符之间的时间差不大于10ms来决定是不是一次连续的数据.
//如果2个字符接收间隔超过timer,则认为不是1次连续数据.也就是超过timer没有接收到
//任何数据,则表示此次接收完毕.
//接收到的数据状态
//[15]:0,没有接收到数据;1,接收到了一批数据.
//[14:0]:接收到的数据长度
vu16 USART3_RX_STA=0;   	

void USART3_IRQHandler(void)
{
	u8 res;	      
	if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)//接收到数据
	{	 
		res =USART_ReceiveData(USART3);		 
		if((USART3_RX_STA&(1<<15))==0)              //接收完的一批数据,还没有被处理,则不再接收其他数据
		{ 
			if(USART3_RX_STA

usart.h

#ifndef __USART3_H
#define __USART3_H
#include "sys.h"

#define USART3_MAX_RECV_LEN		1024			    //最大接收缓存字节数
#define USART3_MAX_SEND_LEN		600					//最大发送缓存字节数
#define USART3_RX_EN 			1					//0,不接收;1,接收.

extern u8  USART3_RX_BUF[USART3_MAX_RECV_LEN]; 		//接收缓冲,最大USART3_MAX_RECV_LEN字节
extern u8  USART3_TX_BUF[USART3_MAX_SEND_LEN]; 		//发送缓冲,最大USART3_MAX_SEND_LEN字节
extern vu16 USART3_RX_STA;   						//接收数据状态

void usart3_init(u32 bound);		//串口2初始化 
void usart3_set(u8 bps,u8 parity);    
void usart3_rx(u8 enable);
void u3_printf(char* fmt,...);

#endif

(2)time3(也可以是其他的定时器)用于时序的设置

time3的中断服务函数需要添加如下:

正点原子ATK-LORA-01无线串口代码移植+STM32F103C8T6(标准库)_第1张图片

(3)lora.c

发送数据(相当的简单

        发送什么数据调sprintf()就完了注意:这里的temp[100],是为sprintf()发送字符串创造一个空间,temp数组的长度可以根据发送数据的长度来定。

正点原子ATK-LORA-01无线串口代码移植+STM32F103C8T6(标准库)_第2张图片

接收数据(相当好用

正点原子ATK-LORA-01无线串口代码移植+STM32F103C8T6(标准库)_第3张图片

三、演示

1.主机(发送方)

(1)主机接线

正点原子ATK-LORA-01无线串口代码移植+STM32F103C8T6(标准库)_第4张图片

(2)主机代码(发送方

正点原子ATK-LORA-01无线串口代码移植+STM32F103C8T6(标准库)_第5张图片

(3)主机实物

 插上无线串口通电即可发送正点原子ATK-LORA-01无线串口代码移植+STM32F103C8T6(标准库)_第6张图片

 2.从机(接收方)

(1)从机接线(LORA与主机相同

TTL转USP接线

正点原子ATK-LORA-01无线串口代码移植+STM32F103C8T6(标准库)_第7张图片

 (2)从机代码(接收方

正点原子ATK-LORA-01无线串口代码移植+STM32F103C8T6(标准库)_第8张图片

(3)从机实物

接上TTL和LORA并通电即可用

 正点原子ATK-LORA-01无线串口代码移植+STM32F103C8T6(标准库)_第9张图片

 3.串口显示结果(从机串口1接的串口助手

正点原子ATK-LORA-01无线串口代码移植+STM32F103C8T6(标准库)_第10张图片

 4.注意

(1)接收数据的函数与发送数据的函数不能同时烧录,只能实现接收和发送二者之一的功能,若要在接收的基础上返送可以写一个按键扫描,当按键按下发送,没按下一直处于接收状态,此时就可以同时存在,但是不能连续发送(可能还得优化!)。

如下:

正点原子ATK-LORA-01无线串口代码移植+STM32F103C8T6(标准库)_第11张图片

 (2)发送时必须有延时函数,不然接收会出现乱码!

你可能感兴趣的:(STM32,stm32)