星闪 / Wi-Fi(WS63 模组)
星闪是可选硬件。不焊时可配置 SCI0 为普通 UART 口;
焊了星闪后需要配置 SCI0 归 AT 指令专用 —— 此时不要接 USB-TTL,否则 AT 指令发不出去。
一、硬件连接
| WS63 | LT7589 | 说明 |
|---|---|---|
| TX | RXD0(EPORT2_1) | 模块发 → MCU 收 |
| RX | TXD0(EPORT2_0) | MCU 发 → 模块收 |
| VCC / GND | 3.3V / GND | 峰值电流较大,注意电源 |
AT 指令必须大写,且以 CRLF 结尾。
二、快速上手
#include "wifi.h"
UartTFT_SCI0_Init(115200);
WiFi_Start(); // 一次性调用,立即返回
while (1) {
WDT_FeedDog();
UART0_PollRx();
WiFi_Task(); // 每帧推进一小步
UI_Frame(); // UI、触摸、串口业务照常调用,否则会阻塞UI
}改 SSID / 密码(量产必改):User/wifi.c 里的 WIFI_SSID / WIFI_PASSWORD 宏。
查连接状态:
if (WiFi_QueryStatus() == 0) {
LTPrintf("SSID=%s RSSI=%d IP=%s\r\n",
g_wifi_status.ssid, g_wifi_status.rssi, g_wifi_status.ip);
}三、API
生产用:
| 函数 | 说明 |
|---|---|
WiFi_Start() |
启动状态机,一次性调用 |
WiFi_Task() |
每帧推进,完成停在 WIFI_ST_DONE |
调试用(阻塞,会卡住主循环,生产代码别用):
| 函数 | 说明 |
|---|---|
WiFi_Init() |
AT → STARTSTA → DHCP |
WiFi_Connect(ssid, pwd) |
连接 AP |
WiFi_QueryStatus() |
综合查询,返回 0 = 就绪 |
WiFi_AT(cmd, ms) |
发一条 AT 并等待应答 |
WiFi_SendCommandNoWait(cmd) |
发 AT 不等应答 |
四、本工程用到的 AT 指令
| 指令 | 说明 |
|---|---|
AT |
握手,回 OK |
AT+STARTSTA |
启 STA |
AT+DHCP=wlan0,1 |
开 DHCP |
AT+CONN="<ssid>",,"<pwd>" |
连 AP(非阻塞,OK 只表示下发成功) |
AT+STASTAT |
查连接状态,status 0=未连 1=已连 |
AT+DHCP=wlan0,2 |
取 IP(本工程用它拿地址) |
AT+PING=<IP> |
Ping,IP 不带引号 |
完整指令集见
开发文档/星闪/WS63V100 AT命令 使用指南_07.pdf。
从 ESP8266 移植时注意:WS63 没有CWMODE/CWJAP/GMR/CIFSR,
对应换成AT+STARTSTA/AT+CONN/AT+SYSINFO/AT+IFCFG。
五、两个必踩的坑
1. 不能用 +NOTICE:CONNECTED 判断连上了
WS63 上电会往 SCI0 倒 1~3KB boot log,而 SCI0 RX FIFO 只有 8 字节深,
溢出时整批 flush 会把这条短消息一起冲掉。
改为主动轮询 AT+STASTAT(1 秒一次,最多 30 次)—— wifi.c 就是这么做的。
2. ping 解析必须等 "X received" 到齐
模组分包吐出,先到 "4 packets transmitted,",后半个短句还没到。
这时解析会把 received 读成 0,出现「4/4 全通却判 FAIL」的假失败。wifi_ping_check() 已处理,自己写解析时要等完整的两句话。
六、排障
| 现象 | 原因 / 处理 |
|---|---|
AT 无应答 |
没上电 / TX-RX 没交叉 / 固件不对;状态机重试 8 次后报 No AT response |
| 收到乱码 | 波特率不匹配(常见 921600),改 UartTFT_SCI0_Init() 参数 |
AT+CONN 回 OK 但连不上 |
AT+CONN 是非阻塞的,要轮询 AT+STASTAT |
| 连上拿不到 IP | 路由器 DHCP 未开 / IP 池满 / AP 隔离 |
| 网关通外网不通 | 路由器无上行 / 防火墙拦 ICMP |
| 网关都不通 | AP 隔离 / 网段不对(实机常见 errno 113,外网正常则不影响业务) |
Host can't be resolved |
AT+PING 参数带了引号,去掉 |
七、注意事项
| 项 | 说明 |
|---|---|
| 指令格式 | 大写 + CRLF 结尾 |
| 引号 | SSID / 密码用双引号;AT+PING 的 IP 不用引号 |
| 转义 | SSID / 密码含 , 或 " 要加 \ |
| RX FIFO | 仅 8 字节,必须 RXWATER=1 且主循环及时处理 |
| 缓冲 | wifi_rx_buf 1024 字节,boot log 可达 1~3KB,溢出是常态(靠轮询兜底) |
| PIT0 | 已被 WiFi 占作毫秒时钟,另用定时器要避开 |
| 不焊星闪 | 注释 main.c 里的 WiFi_Start(),并去掉循环里的 WiFi_Task() |
| 量产 | 改 WIFI_SSID / WIFI_PASSWORD |
作者:罗珍雪 创建时间:2026-10-20 10:27
最后编辑:罗珍雪 更新时间:2026-11-02 20:02
最后编辑:罗珍雪 更新时间:2026-11-02 20:02