ESP32向Quectel BG95模块发送AT测试指令无响应问题问询
ESP32连接Quectel BG95模块AT指令无响应故障排查
正在尝试发送AT测试指令确认ESP32与蜂窝模块的连接正常,所用蜂窝模块为Quectel BG95,ESP32型号为ESP-WROOM-32UE,指令格式参考调制解调器官方手册。
初始测试代码
通过Arduino IDE上传C++代码,ESP使用RXD引脚GPIO 16、TXD引脚GPIO 17建立UART连接,代码如下:
#include <HardwareSerial.h> int greenpower = 32; int led = 33; void setup() { Serial.begin(115200); // 打开串口通信并等待端口打开 Serial2.begin(115200,SERIAL_8N1,16,17); pinMode(led, OUTPUT); // 验证板级供电正常 pinMode(greenpower, OUTPUT); // 控制外设供电 digitalWrite(greenpower, HIGH); // 给外设上电 digitalWrite(led, HIGH); // 供电验证电路上电 delay(1000); } void loop() { Serial.println("Started"); Serial2.write("AT\r"); while (!Serial2.available()) continue; while (Serial2.available()) { int g = Serial2.read(); Serial.write(g); Serial.println(g); } delay(1000); }
代码迭代及异常表现
针对反馈的问题已对代码做修改:在发送AT测试指令Serial2.write("AT\r");后添加了延时,且在指令末尾补充了回车符。上传程序后查看串口监视器,仅能看到“Started”输出,Serial.println(g);仅返回0,每个执行周期耗时长达15s。
后续尝试将Serial2.write("AT\r");替换为Serial2.println("AT\r")或Serial2.write("AT\r\n");,适配调制解调器AT指令的换行符要求。第一种替换无效果,第二种替换后触发MCU报错,错误日志如下:
19:48:21.715 -> Started 19:48:36.692 -> Guru Meditation Error: Core 1 panic'ed (IllegalInstruction). Exception was unhandled. 19:48:36.692 -> Memory dump at 0x400d1c6c: b41f6520 92f01a64 a0a20022 19:48:36.692 -> Core 1 register dump: 19:48:36.692 -> PC : 0x400d1c70 PS : 0x00060530 A0 : 0x800d0db4 A1 : 0x3ffb1f50 19:48:36.692 -> A2 : 0x3ffbdc5c A3 : 0x00000000 A4 : 0x3f40012c A5 : 0x00000010 19:48:36.692 -> A6 : 0xffffffff A7 : 0x00000008 A8 : 0x800d1c70 A9 : 0x3ffb1f10 19:48:36.692 -> A10 : 0x00000001 A11 : 0x00000000 A12 : 0x3ffb8218 A13 : 0x00000000 19:48:36.744 -> A14 : 0x00000000 A15 : 0xff000000 SAR : 0x00000018 EXCCAUSE: 0x00000000 19:48:36.744 -> EXCVADDR: 0x00000000 LBEG : 0x4000c28c LEND : 0x4000c296 LCOUNT : 0x00000000 19:48:36.744 -> ELF file SHA256: 0000000000000000 19:48:36.744 -> Backtrace: 0x400d1c70:0x3ffb1f50 0x400d0db1:0x3ffb1f70 0x400d0c94:0x3ffb1f90 0x400d1499:0x3ffb1fb0 0x40086155:0x3ffb1fd0 19:48:36.744 -> Rebooting... 19:48:36.744 -> ets Jul 29 2019 12:21:46 19:48:36.744 -> rst:0xc (SW_CPU_RESET),boot:0x36 (SPI_FAST_FLASH_BOOT) 19:48:36.744 -> configsip: 0, SPIWP:0xee 19:48:36.744 -> clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00 19:48:36.744 -> mode:DIO, clock div:1 19:48:36.791 -> load:0x3fff0018,len:4 19:48:36.791 -> load:0x3fff001c,len:1044 19:48:36.791 -> load:0x40078000,len:10124 19:48:36.791 -> load:0x40080400,len:5856 19:48:36.791 -> entry 0x400806a8 19:48:37.869 -> Started
硬件验证结果
已确认UART物理连接正常,ESP的UART引脚需经过逻辑电平转换器将3.3V转换为1.8V后再连接蜂窝模块。
PCB上共焊接4根连接线:2根接ESP的RXD、TXD焊盘,另外2根接电平转换器1.8V侧通往调制解调器TXD、RXD的线路。示波器采集结果显示:
- ESP TXD焊盘信号为0-2.7V波动,电平转换后信号为0-1.8V波动,发送通道电平转换功能正常
- ESP RXD线路无有效波形,电平转换器MCU侧电平为3.3V,调制解调器侧电平为1.8V,基于发送通道的表现推断电平转换接收通道硬件无故障
波形采集所用测试代码如下(为适配示波器采集将发送频率调整为10ms):
#include <HardwareSerial.h> int greenpower = 32; int led = 33; void setup() { Serial.begin(115200); // 打开串口通信并等待端口打开 Serial2.begin(115200,SERIAL_8N1,16,17); pinMode(led, OUTPUT); // 验证板级供电正常 pinMode(greenpower, OUTPUT); // 控制外设供电 digitalWrite(greenpower, HIGH); // 给外设上电 digitalWrite(led, HIGH); // 供电验证电路上电 delay(1000); } void loop() { Serial.println("Started"); Serial2.write(1); delay(10); }
内容的提问来源于stack exchange,提问作者Feynman137
相关产品推荐
相关产品推荐

