1. 概述本文档介绍如何在 AT32F423 微控制器上移植 Zephyr RTOS 的 Shell(命令行接口),实现通过串口终端交互控制硬件外设。
2. 移植背景与意义 2.1 为什么需要 Shell在嵌入式开发中,Shell 提供了以下优势:
交互式调试:无需重新烧录固件即可动态控制硬件
功能测试:快速验证外设工作状态
生产维护:现场可通过串口调试和分析问题
用户界面:为设备提供命令行配置界面
2.2 本次移植目标通过 DAPLink 的 USART1 实现串口 Shell支持 LED 的开关、状态查询、Toggle 控制与 Zephyr 标准接口兼容
3. 硬件连接| 信号 | MCU 引脚 | 说明 |
| TX | PA9 | USART1 发送,接 DAPLink RX |
| RX | PA10 | USART1 接收,接 DAPLink TX |
串口参数: 波特率:115200数据位:8停止位:1校验位:无
4. 软件实现4.1 配置修改在
`prj.conf` 中添加以下配置:
# Shell 支持
CONFIG_SHELL=y
CONFIG_SHELL_BACKEND_SERIAL=y
CONFIG_SHELL_BACKEND_SERIAL_API_POLLING=y
CONFIG_SHELL_BACKEND_SERIAL_RX_POLL_PERIOD=10
4.2 UART 驱动修改在
`src/drivers/uart_at32.c` 中添加 RX 引脚配置:
/* Configure RX pin (PA10) */
temp = GPIOA_MODE;
temp &= ~0x00300000;
temp |= 0x00200000;
GPIOA_MODE = temp;
temp = GPIOA_MUXH;
temp &= ~0x00000F00;
temp |= 0x00000700;
GPIOA_MUXH = temp;
/* Enable RX */
usart->CTRL1 = CTRL1_UEN | CTRL1_TEN | CTRL1_REN;
4.3 Shell 命令实现在
`main.c` 中实现 LED 控制命令:
/* LED 控制命令:led <on|off|status|toggle> <2|3|4> */
static int cmd_led(const struct shell *sh, size_t argc, char **argv)
{
// 处理 status/toggle/on/off
}
SHELL_CMD_REGISTER(led, NULL, "LED control", cmd_led); 5. 测试与验证5.1 准备工作1. 使用 DAPLink 连接 AT32F423 开发板
2. 打开串口终端软件(如 PuTTY、MobaXterm)
3. 配置串口:115200, 8N1
4. 烧录固件
5.2 验证步骤 步骤 1:观察启动信息复位后,终端应显示:
步骤 2:查看帮助输入 help 查看可用命令:
步骤 3:LED 控制测试查询 LED 状态le:

uart:~$ led status
LED2: ON
LED3: ON
LED4: ON
uart:~$ led off 2
LED2 OFF
uart:~$ led on 2
LED2 ON
uart:~$ led off 3
LED3 OFF
uart:~$ led off 4
LED4 OFF
uart:~$ led status
LED2: ON
LED3: OFF
LED4: OFF
程序正常运行
6. 扩展应用基于本文档的实现,可以继续扩展:添加更多 Shell 命令(如 GPIO 控制、定时器配置等)实现参数保存功能添加命令历史和自动补全