OpenOCD + ARM-USB-TINY-H 在ubuntu下

本文详细介绍了如何在Ubuntu10.04环境下安装OpenOCD、配置ARM-USB-TINY-H驱动、设置相关配置文件以及如何使用OpenOCD进行调试。

操作系统: Ubuntu 10.04

注:ARM-USB-TINY速度比 ARM-USB-TINY-H慢一些,配置方法相似。

一. 安装 OpenOCD

1. 安装一些准备工具

# sudo apt-get install git-core

# sudo apt-get install texinfo

# sudo apt-get install automake

# sudo apt-get install autoconf

# sudo apt-get install libtool

# sudo apt-get install libftdi1

# sudo apt-get install libftdi-dev  

2. 进入自己选择的目录

# cd <where you want to place openocd folder> 

3. 获取openocd 文件

# git clone git://openocd.git.sourceforge.net/gitroot/openocd/openocd

4. 进入openocd

# cd openocd

5. 配置openocd
# ./bootstrap

# ./configure --enable-maintainer-mode --enable-ft2232_ftd2xx 

如果报告没有ftdi头文件, 更改选项

# ./configure --enable-maintainer-mode  --enable-ft2232_libftdi 

6. 安装openocd

# sudo make $PARALLEL

# sudo make install



二. 安装ARM-USB-TINY-H驱动

1. 在Linux中创建一个文件夹

# mkdir <you name it>

2. 解压 ftdi_sio_olimex.tar.gz到这个文件夹

在命令行中进入这个文件夹,编译生成驱动模块

# make

这时会有一个 ftdi_sio.ko 的文件生成

3. 插入jtag,查看是否加载了ftdi模块 

# lsmod | grep ftdi

如果有,去掉默认加载的模块

# sudo rmmod ftdi_sio

4. 加载新编译的模块

# sudo insmod ftdi_sio.ko

检查一下, 看看有没有类似 ttyUSB0 的设备, 没有是没成功。

# ls /dev 

如果不想每次都加载新模块的话,可以吧旧的替换掉

# cp ftdi_sio.ko /lib/modules/$(uname ?r)/kernel/drivers/usb/serial

温馨提示: 旧的可以备份一下。



三. 一些配置文件

1. 在/etc/udev/rules.d下面 新建 45-ftdi2232-libftdi.rules文件

内容:

如果是ARM-USB-TINY-H

    SYSFS{idProduct}=="002a", SYSFS{idVendor}=="15ba", MODE="666", GROUP="plugdev"

如果是ARM-USB-TINY

    SYSFS{idProduct}=="0004", SYSFS{idVendor}=="15ba", MODE="666", GROUP="plugdev"

2. 在/usr/local/share/openocd/scripts/interface下面

内容:

如果是ARM-USB-TINY-H,编辑olimex-arm-usb-tiny-h.cfg


    interface ft2232
    ft2232_device_desc "Olimex OpenOCD JTAG ARM-USB-TINY-H"
    ft2232_layout olimex-jtag
    ft2232_vid_pid 0x15ba 0x002a
    adapter_khz 15000

如果是ARM-USB-TINY,编辑olimex-arm-usb-tiny.cfg
    interface ft2232
    ft2232_device_desc "Olimex OpenOCD JTAG TINY"
    ft2232_layout olimex-jtag
    ft2232_vid_pid 0x15ba 0x0004
    adapter_khz 3000



四. 使用openocd

# openocd -f interface/olimex-arm-usb-tiny.cfg -f board/crossbow_tech_imote2.cfg



五. telnet连接到openocd

再开一个终端输入

# telnet 127.0.0.1 4444

提示符是‘>’

openocd 常用的命令

> reset init

> halt

> flash protect 0 0 10 off

> flash sector_erase 0 0 10

> flash write_image erase /home/zImage 0x00040000

> reset run

资源里有驱动  Linux Drivers for FTDI Olimex devices.zip (35.46 KB) 

上述内容有不清楚、不正确的地方,欢迎指出指正。


<think>好的,我现在需要帮助用户解决在VSCode中配置gcc-arm工具链、STM32CubeMX生成的代码、OpenOCD调试环境以及结合CMake构建项目的问题。首先,我应该回顾用户提供的引用内容,看看有没有相关的步骤或解决方案。 根据引用[1],用户提到了使用VSCode、gcc-arm-none-eabi和OpenOCD开发STM32,并提到可以使用STM32CubeMX生成Makefile工程。引用[3]中详细说明了在Makefile中添加源文件的过程,以及编译时可能遇到的问题。引用[4]则涉及VSCode的配置,特别是cortex-debug插件的路径设置。而引用[2]提到使用CLion配置类似的环境,虽然工具不同,但可能有些步骤可以借鉴。 首先,用户的需求是结合CMake而不是Makefile,所以需要将STM32CubeMX生成的代码转换为CMake项目。可能需要手动编写CMakeLists.txt文件,指定编译器、包含路径、源文件等。此外,还需要配置VSCode的任务和调试环境,使用OpenOCD进行下载和调试。 接下来,我需要考虑步骤的顺序。首先安装必要的工具链,包括gcc-arm-none-eabi、OpenOCD、STM32CubeMX和CMake。然后配置VSCode的插件,比如C/C++、CMake Tools和Cortex-Debug。接着使用STM32CubeMX生成代码,并导出为适合CMake的结构。之后编写CMakeLists.txt,设置交叉编译选项,链接脚本,以及包含HAL库的路径。编译配置完成后,配置调试设置,指定OpenOCD的接口文件和设备型号。最后测试构建和调试流程,确保一切正常。 需要注意的潜在问题包括:CMakeLists.txt是否正确配置了交叉编译工具链,是否包含所有必要的源文件,OpenOCD的配置文件是否正确指向STM32设备,以及VSCode的调试配置是否正确引用工具链路径。此外,可能需要处理STM32的启动文件和链接脚本,确保生成的可执行文件能够正确烧录和运行。 需要检查用户的引用内容是否有遗漏的步骤,例如引用[3]中提到的在Makefile中添加源文件,类似地,在CMake中需要确保所有必要的源文件都被包含进来,特别是HAL库中的模块,如UART,否则会出现未定义函数的错误。此外,引用[4]提到的配置cortex-debug插件的路径,这也是关键步骤,确保VSCode能找到arm-none-eabi-gcc和OpenOCD的可执行文件。 可能还需要指导用户如何将STM32CubeMX生成的项目结构适配到CMake,比如处理HAL库的源文件和头文件路径,以及指定正确的芯片型号和编译选项。此外,调试配置中的OpenOCD可能需要特定的配置文件,如stm32f1x.cfg,这需要根据具体的STM32型号进行调整。 最后,生成相关问题时要考虑用户可能遇到的后续问题,比如如何优化CMake配置、处理依赖库、进行调试或性能分析,以及集成其他RTOS系统等。这些都需要基于引用中的信息,如引用[1]提到的移植FreeRTOS和RT-Thread的工程,可能作为相关问题之一。</think>### 在VSCode中配置STM32开发环境的完整步骤 #### 一、准备工作 1. **安装必要工具**: - **gcc-arm-none-eabi工具链**:从[ARM官网](https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads)下载并安装[^1]。 - **OpenOCD**:通过包管理器(如`apt`)或从[OpenOCD官网](http://openocd.org/)安装[^4]。 - **STM32CubeMX**:从ST官网下载,用于生成初始化代码[^1]。 - **CMake**:安装最新版本并配置系统环境变量[^3]。 2. **VSCode插件安装**: - **C/C++**:提供代码智能提示。 - **CMake Tools**:支持CMake项目构建。 - **Cortex-Debug**:专用于ARM Cortex-M调试的插件[^4]。 --- #### 二、生成STM32CubeMX工程 1. 在STM32CubeMX中: - 选择目标芯片型号(如STM32F103C8)。 - 配置时钟、外设(如GPIO、UART)。 - 在`Project Manager`中: - **工具链/IDE**:选择`SW4STM32`(生成兼容CMake的目录结构)。 - 勾选`Generate peripheral initialization as a pair of .c/.h files`[^1]。 2. 生成代码后,手动添加`CMakeLists.txt`到项目根目录。 --- #### 三、配置CMake构建系统 1. **编写CMakeLists.txt**(关键部分): ```cmake cmake_minimum_required(VERSION 3.12) project(STM32_Project C ASM) # 工具链配置 set(CMAKE_SYSTEM_NAME Generic) set(CMAKE_C_COMPILER arm-none-eabi-gcc) set(CMAKE_ASM_COMPILER arm-none-eabi-gcc) # 芯片参数 set(CPU_PARAMS "-mcpu=cortex-m3 -mthumb") # 包含路径 include_directories( Core/Inc Drivers/STM32F1xx_HAL_Driver/Inc Drivers/CMSIS/Include ) # 源文件(需手动添加HAL库文件,如stm32f1xx_hal_uart.c) file(GLOB_RECURSE SOURCES "startup/*.s" "Core/Src/*.c" "Drivers/STM32F1xx_HAL_Driver/Src/*.c" ) # 编译选项 add_compile_options( ${CPU_PARAMS} -DUSE_HAL_DRIVER -DSTM32F103xB -Og -Wall ) # 链接配置 add_link_options( ${CPU_PARAMS} -specs=nosys.specs -T${CMAKE_SOURCE_DIR}/STM32F103C8Tx_FLASH.ld -Wl,--gc-sections ) add_executable(${PROJECT_NAME} ${SOURCES}) ``` 2. **验证CMake配置**: - 在VSCode中按`Ctrl+Shift+P`,运行`CMake: Configure`。 - 检查输出是否包含`Generating done`且无报错[^3]。 --- #### 四、配置调试环境 1. **Cortex-Debug设置**: - 修改`.vscode/settings.json`: ```json { "cortex-debug.armToolchainPath": "C:/gcc-arm/bin", "cortex-debug.openocdPath": "C:/openocd/bin" } ``` - 路径需指向实际安装位置(注意Windows使用正斜杠)[^4]。 2. **调试配置文件**(`.vscode/launch.json`): ```json { "configurations": [ { "name": "Cortex Debug", "type": "cortex-debug", "request": "launch", "servertype": "openocd", "device": "STM32F1x", "configFiles": [ "interface/stlink-v2.cfg", "target/stm32f1x.cfg" ], "program": "${workspaceFolder}/build/${buildArtifact}", "preLaunchTask": "CMake: Build" } ] } ``` --- #### 五、构建与调试流程 1. **编译项目**: - 使用`CMake: Build`任务或终端执行: ```bash mkdir build && cd build cmake .. -DCMAKE_BUILD_TYPE=Debug make -j4 ``` 2. **烧录与调试**: - 连接ST-Link调试器,点击VSCode调试侧边栏的`Start Debugging`按钮。 - 若出现`HAL_UART_Init未定义`错误,检查CMakeLists中是否遗漏HAL库文件(如`stm32f1xx_hal_uart.c`)[^3]。 --- #### 六、常见问题解决 1. **HAL库函数未定义**: - 在`CMakeLists.txt`的`SOURCES`中添加缺失的HAL库文件路径,例如: ```cmake file(GLOB_RECURSE SOURCES ... "Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.c" ) ``` 2. **OpenOCD连接失败**: - 检查ST-Link驱动是否安装(Windows需安装[STSW-LINK009](https://www.st.com/en/development-tools/stsw-link009.html))。 - 确认`launch.json`中的`configFiles`路径是否匹配OpenOCD安装目录下的脚本[^4]。 ---
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值