我是靠谱客的博主 怕孤独白云,最近开发中收集的这篇文章主要介绍原子的ATK-LORA-01模块的使用前言一、LORA是什么?二、使用步骤总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、LORA是什么?
  • 二、使用步骤
    • 1.配置
    • 2.其他
  • 总结


前言

记录一下学习过程,这里是原子的ATK-LORA-01模块的使用,因为我是在看不懂demo,所以就写了一下,以便后续自己查看。
(这里是我的第一篇文章,写的不好。。。就写的不好吧)

提示:以下是本篇文章正文内容,下面案例可供参考

一、LORA是什么?

这里仅仅以原子的ATK-LORA-01模块来说明,可以这样认为,起就是一个无线串口。
具体的一些工作方式请参考原子官网吧。

二、使用步骤

1.配置

就像是使用单片机的串口一样,使用前需要进行相应的配置,这里的模块使用的是AT指令形式
(注意:指令结尾要加rn,指令结尾要加rn,指令结尾要加rn。!!!重要的事情说3遍)
开始配置吧


## 1.设置一下串口

***
static void NVIC_Configuration(void)
{
    NVIC_InitTypeDef NVIC_InitStructure;

    NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

    NVIC_Init(&NVIC_InitStructure);
}

static void LoRa_USART_Config(u32 bound)
{
	GPIO_InitTypeDef GPIO_InitStructure;
  	USART_InitTypeDef USART_InitStructure;
	
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
	
	GPIO_PinAFConfig(GPIOB,GPIO_PinSource11,GPIO_AF_USART3);
	GPIO_PinAFConfig(GPIOB,GPIO_PinSource10,GPIO_AF_USART3);
	
	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
 	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
 	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
 	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_10;
	
	GPIO_Init(GPIOB, &GPIO_InitStructure);
	
	USART_InitStructure.USART_BaudRate = bound;
	USART_InitStructure.USART_WordLength = USART_WordLength_8b;
	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(USART3, &USART_InitStructure);
	
	NVIC_Configuration();
	
	USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);
	USART_Cmd(USART3, ENABLE);
}

2.再写一下发送函数

static void LoRa_Usart_SendByte(u8 byte)
{
	USART_SendData(USART3,byte);
	while (USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);
}
//因为AT指令都是一些字符,所以我打算整一个单独的sendstring
static void LoRa_SendString(char *c)
{
	while(*c != 0 )
	{
		LoRa_Usart_SendByte(*c++);
	}
}
void LoRa_Usart_Send(u8 *byte,uint16_t len)
{
	int i;
	for(i=0;i<len;i++)
	{
		LoRa_Usart_SendByte(byte[i]);
	}
	while (USART_GetFlagStatus(USART3,USART_FLAG_TC)==RESET);
}

3.lora配置

static void LoRa_GPIO_Init(void)
{
	GPIO_InitTypeDef  GPIO_InitStructure;
	
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC|RCC_AHB1Periph_GPIOF, ENABLE);
	//MD0
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
	GPIO_Init(GPIOC, &GPIO_InitStructure);
	//AUX
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; 
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
	GPIO_Init(GPIOF, &GPIO_InitStructure);
	
}
void LoRa_Set(void)
{	
	LoRa_GPIO_Init();
	
	LoRa_USART_Config(115200);
	
	while(LORA_AUX);//等稳定
	LORA_MD0=1;//进配置
	
	SysTick_Delay_Ms(100);
	LoRa_SendString("AT+WLRATE=23,5rn");//信道23,空速19.2
	
	SysTick_Delay_Ms(100);
	LoRa_SendString("AT+UART=3,0rn");//9600-8N-1
	
	SysTick_Delay_Ms(100);
	LoRa_SendString("AT+WLTIME=0rn");//休眠时间1
	
	SysTick_Delay_Ms(100);
	LoRa_SendString("AT+TPOWER=3rn");//发射功率20dbm
	
	SysTick_Delay_Ms(100);
	LoRa_SendString("AT+CWMODE=0rn");//一般模式
	
	SysTick_Delay_Ms(100);
	LoRa_SendString("AT+TMODE=0rn");//透传
	
	SysTick_Delay_Ms(100);
	LoRa_SendString(LORA_SET_ADDR);//地址00 00
	
	SysTick_Delay_Ms(100);
	
	LORA_MD0=0;//退配置
	
	SysTick_Delay_Ms(100);
	
	LoRa_USART_Config(9600);

}

4.验证
发送:

int main(void)
{
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	
	LED_Init();
	
	uart_init(115200);
	
	printf("这是一个串口lora实验n");
	printf("n");
	
	LoRa_Set();

	while(1)
	{
		DS1_TOGGLE
		SysTick_Delay_Ms(1000);
		LoRa_Usart_Send(num,2);
	}
}

接收:

void USART3_IRQHandler(void)
{

    uint8_t Temp;
	
    if (USART_GetITStatus(USART3,USART_IT_RXNE)!=RESET) 
	{
        Temp = USART_ReceiveData( USART3 );
		//简单粗暴,直接打印,我就是想看看有没有配置成功返回ok就行
		//平时要是用的画就是放进数组中即可
		printf("%c",Temp);			
    }
	USART_ClearITPendingBit(USART3,USART_IT_RXNE);
}

2.其他

这篇文章没有其他,哈哈哈哈哈哈,我下楼买盒饭了

总结

真是能分层就分层、能分模块就分模块啊,乱七八糟。
ps:以后就以这种形式学习了,爽啊

最后

以上就是怕孤独白云为你收集整理的原子的ATK-LORA-01模块的使用前言一、LORA是什么?二、使用步骤总结的全部内容,希望文章能够帮你解决原子的ATK-LORA-01模块的使用前言一、LORA是什么?二、使用步骤总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(64)

评论列表共有 0 条评论

立即
投稿
返回
顶部