Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread Nano
基于串口裸机工程实现 shell 功能
发布于 2019-02-15 13:53:34 浏览:3675
订阅该版
* 本帖最后由 Ernest 于 2019-2-15 14:25 编辑 * [align=center]**基于串口裸机工程实现 shell 功能** RT-Thread nano 从 3.1.2 版本开始,在 nano 中新增串口驱动框架,方便实现串口输入与输出功能,进而实现 shell 功能。针对 RT-Thread nano 软件包提供的 Keil 版本和 CubeMX 版本,本文分别使用 CubeMX 5.0 与 Keil 5.26 实现 shell 功能。**1. shell 简介** RT-Thread 的命令行组件(shell)提供一套供用户在命令行调用的操作接口,主要用于调试或查看系统信息,它可以使用串口 / 以太网 / USB 等与 PC 机进行通信,用于调试或查看系统信息。shell 作用相当于在开发者和计算机之间架起了一座沟通的桥梁,开发者能很方便的获取系统的运行情况,并通过命令控制程序的运行,包括利用 shell 调用测试函数,改变测试函数的参数等等功能。**2. 实现 shell 功能概述** 针对 Keil 版本和 CubeMX 版本的 RT-Thread nano 软件包,均以 STM32F411 Nucleo 为例,选择其串口 USART2(st - link 所带的虚拟串口与之交互),从**实现了串口驱动的裸机工程**开始,按照以下步骤实现 shell 功能:* 添加 nano 软件包 * 添加 RT-Thread 串口驱动 * 问题修正 * 修改配置 * 程序检验 **3. 添加 nano 软件包** 在裸机工程基础上,Keil 和 CubeMX 的不同点在于添加 nano 软件包,后面的步骤基本上相同。**3.1 CubeMX **使用 CubeMX 打开创建的裸机工程,然后添加 RT-Thread Nano:初次添加参考[《基于 Cube MX 5.0 的 RT-Thread Nano 使用指南》](https://www.rt-thread.org/document/site/tutorial/nano/cube/gd0005-nano-mx5/),熟练的直接进行添加。与使用指南不同的是选择 RT-Thread 组件,需要将 nano 软件包的三个组件全部选中,如下图所示![serial_component_select.png](/uploads/201902/15/140847q6nz0uthhjngn664.png)添加完成后,为了方便与 Keil 一同介绍,这里生成 Keil 工程,然后打开工程,展开 RT-Thread 组件,如下图所示![serial_project.png](/uploads/201902/15/140847os0hwz1ybjaad9oy.png)![FastAdmin](file://D:/work_relative/temp/nano_finsh/figures/serial_project.png?lastModify=1550210903)**3.2 Keil ** 使用 Keil 打开创建的裸机工程,然后添加 RT-Thread Nano:初次添加参考[《基于 keil 的 RT-Thread Nano 使用指南》](https://www.rt-thread.org/document/site/tutorial/nano/mdk/gd0004-nano-mdk/),熟练的直接进行添加。与使用指南不同的是选择 RT-Thread 组件,需要将 nano 软件包的三个组件全部选中,如下图所示![mdk_component_select.png](/uploads/201902/15/140847v96zxn8agpxxpv6j.png)选择完成,点击 OK 按钮,回到工程界面,展开 RTOS,刚才添加组件对应的文件如下图所示![mdk_project.png](/uploads/201902/15/140847tboh85hhb1cad8oa.png)![FastAdmin](file://D:/work_relative/temp/nano_finsh/figures/mdk_project.png?lastModify=1550210903) **4. 添加 RT-Thread 串口驱动** 在添加 nano 软件包的工程中,添加串口驱动,例程将驱动放置在 Application/User 目录(也可以放置在其他目录)。RT-Thread 驱动地址放置在 [https://github.com/RT-Thread/rt-thread/tree/master/bsp](https://github.com/RT-Thread/rt-thread/tree/master/bsp) 下,而相应的串口驱动则放置在各个 BSP 目录的 drivers 文件夹中,名称为 drv_usart.c 或者 usart.c ,但注意下载具体型号芯片串口驱动。也就是说下载目录为rt-thread/bsp/XXX芯片型号/drivers/串口驱动,例程下载的驱动为 [https://github.com/RT-Thread/rt-thread/blob/master/bsp/stm32f4xx-HAL/drivers/drv_usart.c](https://github.com/RT-Thread/rt-thread/blob/master/bsp/stm32f4xx-HAL/drivers/drv_usart.c) ,并且添加至工程中,如下图所示![serial_driver.png](/uploads/201902/15/140847gk9t4ggj0u99s904.png)![FastAdmin](file://D:/work_relative/temp/nano_finsh/figures/serial_driver.png?lastModify=1550210903) **5. 问题修正** 添加完驱动之后,编译会出现错误,包括头文件找不到、UART_HandleTypeDef 未定义、函数重复定义等等问题,示例中针对以下三个问题修正。(a) 删除串口驱动中头文件如下#include "drv_usart.h" #include "board.h"(b) 下载的串口驱动文件中需要包含头文件如下 #include "stm32f4xx_hal.h"(c) 解决重复定义函数,删除或者注释串口驱动中相关函数的定义,具体函数名称如下void HAL_UART_MspInit(UART_HandleTypeDef* huart) void HAL_UART_MspDeInit(UART_HandleTypeDef* huart)**注意**:如果不是删除或者注释下载的驱动中的相关函数的定义,需要核对串口驱动引脚与实际串口引脚一致。**6. 修改配置** 针对问题进行修正后,基本上解决了编译出错的问题,但是编译会出现警告,如下图所示![serial_warning.png](/uploads/201902/15/141941jpshahvp97ssj954.png)这样的警告,是为了提醒注意核对实际使用的串口,控制使用某一串口的宏定义名称为 BSP_USING_UARTx 或者 RT_USING_UARTx 。进入例程查看警告的位置,名称显示如下图所示![using_uart.png](/uploads/201902/15/141941q70ryy0yo6ir6esa.png)![FastAdmin](file://D:/work_relative/temp/nano_finsh/figures/using_uart.png?lastModify=1550210903)例程中使用的是 BSP_USING_UART2,要将 UART2 注册到 RT-Thread 中,还需要同时修改 RT_CONSOLE_DEVICE_NAME 的值,这个值用来表示在多个串口工作的情况下,选择使用 shell 功能的串口,例程中修改如下图所示![serial_modify_config.png](/uploads/201902/15/140847y3uf3fu33f3ymv1q.png)![FastAdmin](file://D:/work_relative/temp/nano_finsh/figures/serial_modify_config.png?lastModify=1550210903) **7. 程序检验** 修改配置后,将工程进行编译,确认无误后,下载至开发板,复位后正常启动日志如下![serial_log.png](/uploads/201902/15/140847mstrups6tz0cxbe8.png)![FastAdmin](file://D:/work_relative/temp/nano_finsh/figures/serial_log.png?lastModify=1550210903)如果打开定义 FINSH_USING_SYMTAB,按下键盘 Tab 键,可以查看 nano 内置的命令。命令以空格隔开,分别如下图所示![serial_command.png](/uploads/201902/15/140847l5qaknggzrr6bqno.png)![FastAdmin](file://D:/work_relative/temp/nano_finsh/figures/serial_command.png?lastModify=1550210903)命令具体说明,参考[《FinSH 控制台》](https://www.rt-thread.org/document/site/programming-manual/finsh/finsh/)中内置命令介绍。**8. 注意事项*** 注意对应使用指南中注意事项,减少错误发生 * 注意 nano 软件包版本 * 裸机工程实现的串口功能与实际使用对应,例程中选择的 USART2,即裸机工程中实现了 USART2 的驱动 * 使用 USART 串口或者 USART 串口,保证串口驱动中 USART_IT_RXNE 或者 UART_IT_RXNE 与实际使用串口相符,避免出现未定义 * 更多完整功能,请使用完整 RT-Thread OS
查看更多
4
个回答
默认排序
按发布时间排序
Ernest
2019-02-15
这家伙很懒,什么也没写!
基于nano 内核工程参考官网文档介绍
Tiv
2019-04-17
这家伙很懒,什么也没写!
顶一个,学习了好几个教程nano shell,有标准库的,也有hal库,就陈老师这个我是真正成功了的:D:D感谢陈老师的帮助!!
Ernest
2019-04-18
这家伙很懒,什么也没写!
>顶一个,学习了好几个教程nano shell,有标准库的,也有hal库,就陈老师这个我是真正成功了的感谢陈老 ... --- 不客气,注意官方文档中提到的驱动下载路径、注意事项,也能够正常实现功能。不按照文档要求做,必然出问题,出了问题自行解决,经验总结
zhs_sky
2019-04-19
这家伙很懒,什么也没写!
MARK
撰写答案
登录
注册新账号
关注者
0
被浏览
3.7k
关于作者
Ernest
这家伙很懒,什么也没写!
提问
5
回答
145
被采纳
3
关注TA
发私信
相关问题
1
求高手指点,RTThread下nanosleep()函数功能如何实现?在线等啊
2
RTT1.2.2在新塘Nano130KE3BN的移植中始终出现栈溢出的问题
3
官方能否出一个nano在mdk下移植finsh到stm32的教程
4
从裸机开始,创建一个RT-Thread Nano系统工程
5
Nano版如何启用shell
6
项目从RTT 2.x NANO移植到 RTT 3.x ENV 环境
7
nano 版本有没有集成到 IAR 中啊?
8
关于MDK5的RT-THREAD NANO中添加MSH组件的例程
9
rtt_nano版本,源代码在哪里下载啊?
10
RTT Nano 在keil 使用C++11 的问题
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
GD32F450 片内 flash驱动适配
2
STM32H7R7运行CherryUSB
3
RT-Smart首次线下培训,锁定2024 RT-Thread开发者大会!
4
使用RC522软件包驱动FM1722
5
常量数据类型和表达式陷阱分享
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
freemodbus
PWM
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
中断
编译报错
Debug
SFUD
rt_mq_消息队列_msg_queue
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
a1012112796
10
个答案
1
次被采纳
踩姑娘的小蘑菇
4
个答案
1
次被采纳
红枫
4
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
Ryan_CW
4
个答案
1
次被采纳
本月文章贡献
catcatbing
3
篇文章
5
次点赞
YZRD
2
篇文章
5
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
Woshizhapuren
1
篇文章
5
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部