这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 【雅特力|Zephyr】5、移植shell实现控制LED灯

共1条 1/1 1 跳转至

【雅特力|Zephyr】5、移植shell实现控制LED灯

高工
2026-03-01 14:17:02     打赏
 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  PA10USART1 接收,接 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, 8N14. 烧录固件
 5.2 验证步骤
 步骤 1:观察启动信息
复位后,终端应显示:

image.png
 步骤 2:查看帮助
输入 help 查看可用命令:
image.png
步骤 3:LED 控制测试
查询 LED 状态le
image.png
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 控制、定时器配置等)实现参数保存功能添加命令历史和自动补全






关键词: Zephyr     shell    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]