【lora模块调试:亿百特lora-型号E22-400T30D-V=代码调试-STM32H7xx/F4xx/F1xx-基础样例(2)】
- 1、概述
- 2、实验环境
- 3、实验说明
- 3-1调试开发板H7
- 1、先了解硬件H7
- 2、测试keil版本的H7软件代码
- (1)找到样例代码。
- (2)keil打开和安装H7软件包
- (3)初步改代码,测试串口
- (4)配置另一个lora
- (5)连接lora
- 3-2调试开发板F4
- (1)新建工程,cubeide运行编译。
- (2)修改代码,初步串口测试
- (3)连接Lora,进行测试
- 3-3调试开发板F1
- (1)新建工程,cubeide运行编译。
- (2)修改代码,初步串口测试
- (3)连接Lora,进行测试
- 4、代码连接
- 5、细节部分
- (1)按照keil相关软件支持包文件,如下图,安装软件包。
- (2)连接不通时,可尝试验证lora和验证串口
- (3)使用STM32F4时,发现只接收一次,后续发送也不收了。
- (3)使用STM32F4时,插在电脑PC的lora,忘记插M1跳线帽,导致错误
- 6、总结
1、概述
前篇文章:【lora模块调试:亿百特lora-型号E22-400T30D-V=初步调试踩坑-认识模块-了解协议(1)】
继续上文,本篇我们来调试代码,做了一个简单样例,来进行使用lora实验。
2、实验环境
(1)软件环境:PC环境WIN10,keil5,STM32cubeIDE1.8.0。
(2)硬件芯片:lora模块:E22-400T30D
(3)硬件开发板H7:
(4)硬件开发板F4:
(5)硬件开发板F1:
(6)其它硬件: TTL串口传usb模块,ST-link下周器,杜邦线若干。
(7)其它说明,本次没有距离相关实验,模块离得比较近,所以不使用天线也可以通信。
3、实验说明
本次实验说明,代码开始时,会通过改变IO,来控制M0和M1,然后发送相应数据,进行配置。配置后,在设置通信模式,收到特定指令,回复消息。
1、我们需要两个IO控制M0和M1.
2、我们需要一个串口来是收发数据
虽然说是调试lora实验,但更像是调试串口实验。
3-1调试开发板H7
我们接触使用新的开发板时,一般先是改它人代码,并不自己从头新建工程,所以这次我们先尝试改正点原子hal库代码,来实现我们的功能。
1、先了解硬件H7
之前只是刷过正点原子的教学视频,没有实际操作过H7,但是细节上有点差别,大方向应该差不多,在下载好的资料包内找到原理图。
(1)我们需要先看下原理图,一个是M0和M1进行控制,如下图所示,我们直接选择LED灯的两个控制引脚。
如下图,由此我们也知道,这两个引脚是PB1和PB0。
(2)串口我们也选择默认的uart1,这样我们直接在已有代码上改成我们需要功能就可以了。
2、测试keil版本的H7软件代码
(1)找到样例代码。
本次我们是在已有的代码实现我们需要功能,如下图,在给定的资料包内,我们找到本次使用的代码“实验3 串口通信实验”。
资料包可以去正点原子给到网站下载:http://www.openedv.com/docs/
(2)keil打开和安装H7软件包
然后我们使用keil打开,没有H7软件支持包的,需要按照下,详见下面“细节部分“内容。
安装好软件包后,打开工程就可以进行编译了,我们先不改变任何内容,将编译好的代码,直接烧录,确保ST-link与单片机和PC连接没有问题。
如下,下载好代码后,使用usb连接串口,没有任何问题的话,原代码会打印消息,并输入内容是,会返回内容。
(3)初步改代码,测试串口
我们先不连lora,直接连接会有问题,我们先写好反馈程序,如下,我发给单片机,固件数据:带{0x01,0x02…}开头数据,让单片机给我反馈数据。
串口发送数据:{0x01,0x02…}
设置配置lora数据:{0xc0,0x00,0x09,0x00,0x03,0x00,0x62,0x00,0x17,0x43,0x00,0x00}
单片机反馈数据:{0x00,0x01,0x17,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x01}
其实这个反馈数据,就是单片机定点发送的数据,给地址0x01,信道0x17,发送后面数据:0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x01,具体数据解析,可以看前篇。
在这其中出现两次不通情况,一次是波特率不对,一次貌似硬件连接不对,第二次有点神奇,如下图,第一次如下是波特率应该为9600。
第二次后来验证了循环发送数据,才通的,应该是哪块链接不对。
重试,发送成功了。
(4)配置另一个lora
使用之前提到的工具:TTL转usb模块,就会很方便,此模块是可以从商家那边买到,直接插在电脑上,想要更换模式,直接插拔M1,M0不需要动。
我们在配置模式(M1=1,M0=0)情况下,先恢复出厂参数,然后设置定点模式,和地址为0x01,如下图所示。
(5)连接lora
配置好后,单片机可以连接lora了,将跳线帽拔掉,引脚PA9和PA0交叉连接lora的RX和TX,如果不同,就对调下。
然后将另一个lora,在通信模式下(M1=0,M0=0)情况下,打开串口软件,发送数据:
0x00,0x03,0x17,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09
,可以看到收到了数据,证明连接成功了。
如下图,发送自己发送的数据也发回来,说明下边有发送代码,只能执行了,如下图所示。
注释后,就正常了。
3-2调试开发板F4
开发板F4之前使用过很多次了,并且也有串口相关实验,可以选择使用之前代码,进行修改测试。
之前串口文章:软件STM32cubeIDE下使用STM32F4xx配置uart4+DMA接收数据+空闲串口函数-基础样例
以上为DMA的形式,编写起来还是很麻烦的,注意点很多,我尝试过,觉得改的太多了,不如直接重新弄个,不用DMA,只是为了实现功能,当样例,所以新建个简单工程吧。
(1)新建工程,cubeide运行编译。
1、初始化RCC和SYS:具体这里直接放个大致截图,不了解可以看代码。
2、初始化串口和IO:串口9600,
PF9---M0
PF10--M1
uart1-PA9---uart1-TX
uart1-PA10-uart1-RX
其它默认,串口中断记得点上,IO如下,
3、时钟配置
(2)修改代码,初步串口测试
1、我们加入部分代码,先不插入lora,直接测试下uart1和LED的IO,看看灯和串口是否起作用,如下为IO控制和发送数组,是我们提取准备好的数据。
2、然后再while内加入接收函数,收到开头数组为0x01,0x01就会回消息,循环点亮开发板上的灯,如果不是开发板,可以直接测引脚也是可以的。
这里因为接收到数据后,没有清除,所以一直再重复发,我们每次收到后,清除一下,就可以了,如下
3、到这一步,准备就差不多了,可以进行下一步了。
(3)连接Lora,进行测试
1、可以将另一个lora链接电脑了,然后将lora开发板,串口连接开发板串口1,M0接PF9,M1接PF10,电源接5V.
M0----PF9---
M1----PF10--
RXD---uart1-PA9---uart1-TX
TXD---uart1-PA10-uart1-RX
AUX---空着
VCC---5V
GND---GND
2、修改成最后调试代码,
3、实际测试结果。
3-3调试开发板F1
F1开发板之前也是用过,主要是调试串口,进行调试,所以说是调试lora,更像调试串口实验。
与F4大相径庭,不能说非常像吧,几乎一模一样吧。
(1)新建工程,cubeide运行编译。
1、SYS和CRC
2、uar1的中断
波特率和控制IO
3、时钟配置
(2)修改代码,初步串口测试
1、重复步骤,能跳的就先跳了,有疑问,可以看代码。
//第一段加入内容
#define UART1_Buf_LEN 100
uint8_t UART1_SendBuf[UART1_Buf_LEN];
uint8_t UART1_ReceBuf[UART1_Buf_LEN];
uint8_t USART_Rx_send_lora_data[12]= {0x00,0x01,0x17,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x01};
uint8_t USART_Rx_send_lora_data_set_mode[12]={0xc0,0x00,0x09,0x00,0x03,0x00,0x62,0x00,0x17,0x43,0x00,0x00};
#define M0_set_0 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8,GPIO_PIN_RESET); //PC8 M0=0
#define M1_set_0 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_9,GPIO_PIN_RESET); //PC9 M1=0
#define M0_set_1 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8,GPIO_PIN_SET); //PC8 M0=1
#define M1_set_1 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_9,GPIO_PIN_SET); //PC9 M1=1
............
//第二段加入内容
/* USER CODE BEGIN 2 */
HAL_Delay(500);
M0_set_0;
M1_set_1;
HAL_Delay(500);
HAL_UART_Transmit(&huart1,(uint8_t*)USART_Rx_send_lora_data_set_mode,12,0x200);
HAL_Delay(500);
M0_set_0;
M1_set_0;
HAL_Delay(500);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
// if(HAL_UART_Receive(&huart1,UART1_ReceBuf,10,0xff)==HAL_OK)// 接收10个字符
// {
// if(UART1_ReceBuf[0]==0x01 && UART1_ReceBuf[1]==0x02)
// {
HAL_UART_Transmit(&huart1,(uint8_t*)USART_Rx_send_lora_data,12,0x200);
// memset(UART1_ReceBuf,0,UART1_Buf_LEN);
// }
HAL_Delay(1000);
// }
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
HAL_UART_Receive(&huart1,UART1_ReceBuf,10,0xff);// 接收10个字符
if(UART1_ReceBuf[0]==0x01 && UART1_ReceBuf[1]==0x02)
{
HAL_UART_Transmit(&huart1,(uint8_t*)USART_Rx_send_lora_data,12,0x200);
memset(UART1_ReceBuf,0,UART1_Buf_LEN);
}
HAL_Delay(1000);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
2、引脚连接如下
PA9---uart1_TX ---lora---RXD
PA10--uart1_RX ---lora---TXD
PC8---M0
PC9---M1
AUX---空着
VCC--5V
GND--GND
3、这里遇到了一个问题,就是单片机接收端口好像有问题呢,一直不通,反复尝试两个lora之间通信是没有问题如下
后来直接的单片机连接串口,发现有一定概率,单片机还回,看起啦单片机哪里配置不对,不过尝试上下拉,如下依旧没解决
尝试了很多次吧,都没很好解决,后来直接让单片的lora直接发送,也不判断了,感觉这块F103芯片有点菜啊,和F407确实不太一样。
(3)连接Lora,进行测试
具体硬件如下
如下图,是让单片机直接发送数据,就成功了,发送没有任何问题。
代码中,最后只是发送,不会判断了。
4、代码连接
(1)STM32H743IIxx改写正点原子代码,keil运行
代码链接:https://download.csdn.net/download/qq_22146161/88009530
(2)STM32F407xxx改写之前样例代码,STM32cubeIDE运行。
代码链接:https://download.csdn.net/download/qq_22146161/88009526
(2)STM32103xxx改写之前样例代码,STM32cubeIDE运行。
代码链接:https://download.csdn.net/download/qq_22146161/88009507
5、细节部分
(1)按照keil相关软件支持包文件,如下图,安装软件包。
(2)连接不通时,可尝试验证lora和验证串口
调试单片机本质是调试串口,所以可以直接usb转串口,直接连接电脑,来验证串口。
(3)使用STM32F4时,发现只接收一次,后续发送也不收了。
发现忘记加延时了,这块需要小心,如下图,发送一次后,确实收到了,但是后续发送,就没有。
实际更调试更复杂,我用DMA那个样例代码时,也是发现类似问题,同时觉得改动太多了,才重新弄了个样例,好在本样例,加入延时解决了。
(3)使用STM32F4时,插在电脑PC的lora,忘记插M1跳线帽,导致错误
刚刚配置完,忘记插M1跳线帽,这块实际上,是插了,但是插歪了,所以通信报告错误,如下图,还是要注意下的。
()
6、总结
3个单片机上,来回切换,确实有些难度,并且虽说实现功能相似,但是还是有差别的,不过也算完成了。