目录
1 使用的芯片和引脚说明
使用的芯片:STM32F407VET6
串口调试引脚:USART1 PA9 PA10
单片机与AIR724连接的RX和TX引脚:USART2 PD5 PD6
air724电源引脚:PE0
2 cubeMX配置
先把设备时钟和串口调试方式配置好。
随后使能串口1和串口2.
然后把时钟树也根据自己的板子配置好。
3 RT-Thread setting配置
添加AT_device软件包,打开所需的组件。
配置软件包,打开配置项,将串口更改成自己设备的串口。比如我的设备是串口2和AIR724连接,我就把串口配置项的串口改成uart2.
4 board.h 配置
由于我们使用了串口2 ,所以我们需要到board.h文件中进行声明。
接下来我们将程序下载到设备,发现调试出现错误。
说我们的lte引脚是低,还有AIR724栈溢出。
我们打开at_device_air720.c
将这个if判断改成一直为真即可。栈溢出的问题我们可以通过改变栈大小来解决,同样的在at_device_air720.c文件。
将栈大小改大成2048即可,再次下载程序。发现程序正常运行,同时4G模块的指示灯快闪表示连网成功。
5 模块断电再次连网
由于我使用的AIR724是AT固件,模块单独断电(整个设备还是上电状态)在上电后设备不会自动连网,需要再次将设备初始化。所以我们可以模拟设备断电在重连网的过程。AIR724模块初始化的过程是在at_device_air720.c的air720_init_thread_entry中进行的.
我们可以把static 关键字去掉,同时在at_device_air720.h中声明该函数。
这样我们就可以在main函数中模拟模块断电重连的过程了。
/*
* Copyright (c) 2006-2023, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2023-07-15 RT-Thread first version
*/
#include <rtthread.h>
#include <board.h>
#define DBG_TAG "main"
#define DBG_LVL DBG_LOG
#include <rtdbg.h>
#include <at_device_air720.h>//包含AIR724 初始化函数air720_init_thread_entry
#define AIR724POWER GET_PIN(E, 0) //AIR724电源控制引脚
//打开4G电源
void open_4GPower(void)
{
rt_pin_mode(AIR724POWER, PIN_MODE_OUTPUT);
rt_pin_write(AIR724POWER, PIN_HIGH);//打开4G电源
}
//关闭4G电源
void close_4GPower(void)
{
rt_pin_mode(AIR724POWER, PIN_MODE_OUTPUT);
rt_pin_write(AIR724POWER, PIN_LOW);
}
int main(void)
{
struct at_device *device = RT_NULL;
struct netdev *airnetdev = RT_NULL;
airnetdev = netdev_get_first_by_flags(NETDEV_FLAG_LINK_UP);
device = at_device_get_by_name(AT_DEVICE_NAMETYPE_NETDEV, airnetdev->name);
LOG_D("is test\n");
rt_thread_delay(40000);
close_4GPower();
rt_thread_delay(5000);
open_4GPower();
air720_init_thread_entry(device);
}
将程序下载到设备,可以发现设备在一开始的时候连网,模块指示灯快闪,过了40s后,将模块电源关闭,过10秒后打开电源,再次进行模块初始化,模块指示灯快闪,表示模块断电后再次上电重连网络成功!