提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、LORA是什么?
- 二、使用步骤
- 1.配置
- 2.其他
- 总结
前言
记录一下学习过程,这里是原子的ATK-LORA-01模块的使用,因为我是在看不懂demo,所以就写了一下,以便后续自己查看。
(这里是我的第一篇文章,写的不好。。。就写的不好吧)
提示:以下是本篇文章正文内容,下面案例可供参考
一、LORA是什么?
这里仅仅以原子的ATK-LORA-01模块来说明,可以这样认为,起就是一个无线串口。
具体的一些工作方式请参考原子官网吧。
二、使用步骤
1.配置
就像是使用单片机的串口一样,使用前需要进行相应的配置,这里的模块使用的是AT指令形式
(注意:指令结尾要加rn,指令结尾要加rn,指令结尾要加rn。!!!重要的事情说3遍)
开始配置吧
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50## 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.再写一下发送函数
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23static 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配置
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60static 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.验证
发送:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21int 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); } }
接收:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15void 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是什么?二、使用步骤总结的全部内容,更多相关原子内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复