你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【STM32MP135-DK】裸机移植shell

[复制链接]
andey 发布时间:2024-1-30 18:34

简介

在开发调试过程中经常会需要触发某些测试函数来验证功能是否正常工作,这时候我们可以在代码中写死测试函数不过这样不是很灵活,我们可以在项目中实现个shell,通过shell命令触发对应的函数这样就会方便很多,可以在程序异常的时候通过命令查看特定的运行状态。我们基于上一个串口实验的基础上参考RT-thread 的shell 的实现逻辑创建shell

工程添加shell 文件

我们在原有工程基础上,向工程里添加shell的源代码,添加如下。

shell.png

shell 的实现是在flash 中定义一个FSymTab 的section,代码中在 FSymTab 起始地址和结束地址范围内进行检索查找输入的命令是否吻合,如果一致的话就执行绑定的函数,在工程的stm32mp13xx_a7_ddr.ld 文件中加入如下 FSymTab section 区间。修改链接脚本添加如下section定义。

微信截图_20240130201413.png

shell 依赖串口底层接收输出函数,输出使用printf接口,输入函数使用HAL库的接口对接下即可,对应代码如下:

uint8_t shell_uart_getchar(uint8_t* ch)
{
      /* Clear the Overrun flag just before receiving the first character */
      __HAL_UART_CLEAR_OREFLAG(&huart4);

    if(HAL_UART_Receive(&huart4, ch, 1, 0xFFFF) == HAL_OK)
    {
        return 1;
    }

    return 0;
}

在main函数内调用shell 入口函数即可,至此shell 已经编译通过移植适配完成。

下载验证

编写如下测试代码,添加led 测试命令通过shell 控制板卡点灯

#include "littleshell.h"


unsigned int led(char argc,char ** argv)
{
    if(argc == 2)
    {
        if(!strcmp(argv[1],"on"))
        {
            BSP_LED_On(LED_GREEN);
        }

        if(!strcmp(argv[1],"off"))
        {
            BSP_LED_Off(LED_GREEN);
        }
    }
    return 1;
}
LTSH_FUNCTION_EXPORT(led,"test led");

编译通过后按照该贴方法https://shequ.stmicroelectronics.cn/thread-642184-1-1.html 制作镜像包烧写到sd卡验证,输入led on命令可以按照预期的方式点亮led,输入 led off 熄灭led,至此基于STM32MP135裸机的方式shell 移植就告一段落。

d2084b76787f4f6515436d7c54ec7f6300-00-06--00-00-14.gif

shell 实现的细节再此就不展开了,可以查看代码,代码路径已上传如下路径:

https://gitee.com/andeyqi/stm32-mp135/tree/master/STM32Cube_FW_MP13_V1.0.0/Projects/STM32MP135C-DK/Examples/UART/UART_Receive_Transmit_Console

收藏 评论1 发布时间:2024-1-30 18:34

举报

1个回答
STMCU-管管 回答时间:2024-2-4 10:44:33

感谢分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版