STM32中的shell框架搭建

STM32和电脑的关系

  •     可以将上位机给下位机发送的信息当做是控制命令
  •     下位机给上位机发送的信息当做是硬件本身的状态 

初始化函数的优化

批量化调用同类型函数,有同样的数据类型,放一块 - 数组 

定义一个数组, 函数指针数组, 数组中包含的都是一个一个的函数指针, 就是函数的首地址 

|--LED_Init--|--BEEP_Init--|--UART_Init--|--...--|--....--|--0--|将近期所有的初始化函数放到一个数组里

回忆知识:函数指针:

C语言指针进阶(一)——深入详解“函数指针”与“指针函数”-CSDN博客

以下变量的类型:

int a; int
int* pa; int*
int a[5]; int [5]
int (*p)(void);
内置 "cmd-list" 命令获取所有命令列表 支持 tab 键补全命令 支持 backspace 回退,这个在 putty 上有 bug ,还没修复。在secureCRT正常。 支持上下箭头回溯历史,这个功能没有做的很好; 支持左右箭头编辑当前命令行输入; 提供 shell_cmdparam()函数转换命令后所跟的数字参数(字符串转整型),详见 demo 提供 shell_option_suport() 函数,使命令行支持 getopt()函数,详见 demo 系统共有9个文件,全部与硬件无关,编译语言要在 C99 以上(keil 在 project -> Options .. -> c/c++ -> C99 勾上) kernel.h // 一些必要的宏定义 shell.c,shell.h //具体的命令行解释的实现 ustdio.c,ustdio.h //非标准输出文件,重新链接 printf ,并提供一个小巧型的 printk 函数 avltree.c,avltree.h //平衡二叉树支持,shell 默认用链表建立查询机制,有必要可在shell.h 中开启二叉树 getopt.c,getopt.h //网上找的 getopt() 源码 除了 getopt.c,getopt.h 两个文件是我从网上找的源码,主要实现命令行的 getopt()解析,其他的都是笔者所写。 使用: 1,首先把 shell.c ustdio.c 加入工程,这两个文件是必须的。 如果不用 getopt()函数可以不添加getopt.c文件。 shell默认使用链表来构建查询系统,但也提供了平衡二叉树的方式,在shell.h中有开启的开关,如不需要可以不添加avltree.c。 include "shell.h" 2,先对硬件进行基本的初始化。 撰写串口发送函数,形如 void usart_puts(char * str , uint16_t len) ; 调用函数 shell_init("shell >",usart_puts); //初始化shell的输入标志和默认输出指向 串口接收以包为单位。 3,新建全局变量 struct shell_input serial_shell ; 并初始化 SHELL_INPUT_INIT(&serial;_shell ,usart_puts);初始化输入缓存和输出交互; 4,串口接收到一整包函数后,调用 shell_input(&serial;_shell , packet , pktlen) ;
<think>好的,用户想在VSCode中配置STM32开发环境,我需要整理一下步骤。首先,根据引用里的信息,用户可能需要安装必要的软件工具,比如ARM GCC、OpenOCD,还有VSCode的扩展插件。比如引用[1]提到VSCode + ARM GCC + OpenOCD的组合,而引用[2]和[3]提到了ST官方的VSCode扩展,可能这是关键步骤。 接下来,用户需要安装VSCode插件,比如Cortex-Debug和ST的扩展,这样能方便代码编辑和调试。然后,创建项目可能需要使用STM32CubeMX来生成初始化代码,再导入到VSCode中。引用[2]和[4]都提到创建项目的方法,可能涉及使用CubeMX生成代码结构,然后在VSCode中配置编译任务。 编译配置部分可能需要设置tasks.json来调用ARM GCC进行编译,而调试配置需要launch.json来连接OpenOCD。引用[1]和[4]提到这些工具链的配置步骤,需要确保路径正确,并且参数设置无误。可能还需要处理头文件路径和链接脚本,确保编译成功。 最后,用户可能需要测试代码,比如写一个简单的LED闪烁程序,并通过OpenOCD下载到开发板。如果遇到问题,检查路径和插件是否正确安装,或者参考引用中的教程进行排查。 需要确保回答步骤清晰,分点说明,并引用相关的资料来支持每个步骤。同时,生成的问题要围绕可能的后续疑问,比如性能优化、常见错误处理或者使用其他工具链等。</think>### 如何在 VSCode 中配置 STM32 开发环境 #### 一、软件工具准备 1. **安装 VSCode** 从官网下载并安装 [Visual Studio Code](https://code.visualstudio.com/),支持 Windows、Linux 和 macOS。 2. **安装 ARM GCC 工具链** 用于编译 STM32 代码,例如: - Windows: [GNU Arm Embedded Toolchain](https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm) - Linux: `sudo apt install gcc-arm-none-eabi`[^4] 3. **安装 OpenOCD** 用于调试和烧录程序: - Windows: 从 [OpenOCD 官网](http://openocd.org/) 下载预编译版本 - Linux: `sudo apt install openocd` 4. **安装 VSCode 插件** - **C/C++ 扩展**:提供代码智能提示和调试支持 - **Cortex-Debug**:支持 ARM Cortex-M 调试 - **ST官方扩展**(可选):通过 `STM32 for VSCode` 插件简化项目配置[^2] --- #### 二、项目配置步骤 1. **生成项目框架** 使用 **STM32CubeMX** 生成初始化代码(HAL 库配置),导出为 `Makefile` 项目[^3]。 2. **导入项目到 VSCode** ```bash code /path/to/your/stm32_project # 在终端中打开项目目录 ``` 3. **配置编译任务** 创建 `.vscode/tasks.json` 文件,调用 ARM GCC 编译: ```json { "version": "2.0.0", "tasks": [{ "label": "Build STM32", "type": "shell", "command": "make", "group": "build" }] } ``` 4. **配置调试环境** 创建 `.vscode/launch.json`,通过 OpenOCD 连接调试器(如 ST-Link): ```json { "version": "0.2.0", "configurations": [{ "name": "Cortex Debug", "type": "cortex-debug", "request": "launch", "servertype": "openocd", "device": "STM32F4xx", // 根据芯片型号修改 "configFiles": ["interface/stlink.cfg", "target/stm32f4x.cfg"] }] } ``` --- #### 三、编译与调试 1. **编译代码** 按 `Ctrl+Shift+B` 执行编译任务,生成 `.elf` 和 `.bin` 文件。 2. **烧录与调试** 按 `F5` 启动调试,OpenOCD 会自动连接开发板并下载程序[^1]。 --- #### 四、常见问题 1. **头文件路径错误** 在 `c_cpp_properties.json` 中指定 STM32 HAL 库路径: ```json "includePath": ["Drivers/CMSIS/Include", "Drivers/STM32F4xx_HAL_Driver/Inc"] ``` 2. **OpenOCD 连接失败** 检查调试器驱动是否安装(如 ST-Link/V2),或调整 `configFiles` 路径[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值