在 STM32 实现命令行
内容提要
本文介绍了在工作中使用基于Linux命令行的开发环境,并分享了移植nr shell的过程。通过对比Finsh和nr_micro_shell两个项目,选择了资源占用较少的nr作为命令行交互工具。文章详细介绍了代码下载、STM32 CubeMX工程配置、代码修改和移植现象等步骤。最后提到了处理效率有待优化,并推荐关注公众号“良许Linux”获取更多Linux相关知识。
延伸解读
选型依据:资源占用对比
文章通过对比表展示了nr_micro_shell与Finsh的资源占用差异。在原始工程基础上,添加nr_micro_shell仅增加ROM 3832字节、RAM 1104字节,而添加Finsh则增加ROM 26908字节、RAM 1304字节。对于STM32L431这类资源有限的MCU,nr的ROM占用优势明显,更适合作为轻量级命令行交互方案。
移植关键步骤:串口重映射与中断接收
移植nr shell时,需将STM32 CubeMX的串口重映射到printf,并将输出关联到nr shell的打印函数。输入方面,创建信号量同步接收状态,开启空闲中断接收,在中断回调中释放信号并开启下次接收。这些步骤确保了命令行基本的收发交互功能。
当前局限:处理效率有待优化
文章提到,移植后nr shell的基本收发交互功能已完成,但处理效率马马虎虎,一条简单指令耗时约10ms。作者表示有空再优化。这表明当前移植版本在响应速度上可能无法满足对实时性要求较高的场景,读者若需高性能交互,需进一步优化代码或考虑其他方案。
Q&A
如何在STM32上实现命令行交互?
可以通过移植nr shell来实现命令行交互,具体步骤包括代码下载、STM32 CubeMX工程配置、代码修改等。
为什么选择nr而不是Finsh作为命令行工具?
nr占用的MCU资源较少,适合资源有限的环境,而Finsh功能丰富但资源占用较高。
如何配置STM32 CubeMX以支持nr shell?
需要配置STM32L431的UART外设中断数据收发,并开启FreeRTOS,生成Makefile工程。
移植nr shell的过程中需要注意哪些代码修改?
需要修改串口重映射,将输出关联到nr shell的打印函数,并创建信号量用于同步接收状态。
nr shell的处理效率如何?
nr shell的基本收发交互功能完成,但处理效率有待优化,一条简单指令的响应时间约为10毫秒。
在哪里可以找到nr_micro_shell的代码?
可以在GitHub上找到nr_micro_shell的代码,地址是github.com/Nrusher/nr_micro_shell。