当前位置:网站首页>嵌入式IDE原理 OpenOCD介绍 以及stlink如何连接stm32板子
嵌入式IDE原理 OpenOCD介绍 以及stlink如何连接stm32板子
2022-07-22 04:05:00 【标biao】
引言
我们做单片机开发,用得比较多的stm32f1xx,stm32f4xx等等,基本上都是用keil(或者说称为mdk)这个集成开发环境IDE比较多,插上调试器,连接板子,编译,下载,调试,方便得很。大家有没有想过一个问题,如果没有IDE了,我们还能做单片机开发吗???大家难道就不想知道IDE到底干了啥吗???
IDE运行过程
一个现代IDE,大致可以分为如下几个功能:
- 代码编码:IDE使用的是QScitinal这样的编辑器库
- 代码智能提示:后台调用clang软件
- 代码语法错误动态检测:后台调用gcc或者clang都可以
- 工程源码组织:IDE使用的是makefile,后台调用make软件
- 编译:IDE后台调用gcc编译器
- 连接硬件调试器:IDE通过后台软件OpenOCD连接调试器和板子
- 下载:IDE给OpenOCD发命令
- 调试:IDE后台调用gdb,给gdb发命令,gdb再给OpenOCD发命令,OpenOCD再指挥调试器,控制板子。实现单步执行,查看变量值,寄存器等。
我们可以发现,IDE所做的事,都是由已有软件来完成,其实就是组织这些已有的软件,让他们协同工作起来,方便了我们开发者使用嘛。所以嘛,IDE叫做集成开发环境。看完后,是不是觉得自己也能做一个IDE啦,哈哈哈~,我最近就在做这个事情,如果有志同道合的兴趣,可以交流讨论喔 qq:2488890051
这里重点介绍 OpenOCD 是什么
OpenOCD 是什么
从上面IDE的步骤中可以看出,OpenOCD 就是一个连通gdb和硬件调试器的工具,linux,macos,windows都可用。OpenOCD 支持大量的硬件调试器,常见的比如stm32常用的stlink,jlink调试器等。OpenOCD是一个运行于PC上的开源调试软件,最初是由Dominic Rath同学还在大学期间发起的(2005年)项目。OpenOCD旨在提供针对嵌入式设备的调试、系统编程和边界扫描功能。
这里演示如何在windows系统上利用 OpenOCD 实现正点原子stm32f407单片机开发板的调试。
我们可以下载 OpenOCD 的源代码,自己编译成exe。还可以下载编译好的exe,我们选这个。
1. 下载OpenOCD
https://gnutoolchains.com/arm-eabi/openocd/ 下载最新版即可。解压即可,不用安装。然后把这个bin文件夹路径添加到系统环境变量即可。
文件夹内容介绍:
bin文件夹:openOCD.exe等可执行文件
drivers文件夹:常见的硬件调试器的驱动,这里要注意,硬件调试器第一步是需要安装驱动的,否则设备管理器识别不到的,那当然OpenOCD就压根没法驱动它了。硬件调试器插上电脑usb口,如果驱动安装的了,设备管理器会显示设备的,否则会有黄色感叹号。我这个就是驱动之前已经按照过了的。
share文件夹:OpenOCD连接硬件调试器的一些脚本协议文件,不同调试器,不同板子,选择对应的即可。
2. 运行OpenOCD
由于是gdb给OpenOCD发调试命令的,先确保自己安装了 arm-none-eabi-gcc 编译器工具链(而且把bin文件夹路径添加到系统环境变量),里面会有arm-none-eabi-gdb.exe。
- 打开powershell命令行窗口(因为cmd命令行窗口不太好用)输入 arm-none-eabi-gdb -v,有版本信息打印出来,说明gdb环境成功了。
- 继续输入 openocd.exe,如果显示如下则说明 OpenOCD 环境也成功了。
- 继续输入
openocd -f C:\Users\86132\Downloads\openocd-20211118\OpenOCD-20211118-0.11.0\share\openocd\scripts\interface\stlink.cfg -f C:\Users\86132\Downloads\openocd-20211118\OpenOCD-20211118-0.11.0\share\openocd\scripts\board\stm32f4discovery.cfg
意思是 通过 -f 选项 给 OpenOCD 指定硬件调试器的协议文件(虽然我的stlink调试器是v2版本,但是为什么这里命令是stlink.cfg文件,而不是stlink-v2.cfg呢,因为我打开stlink-v2.cfg看了,说已经摒弃了,都采用stlink.cfg文件了),第二个是板子信息(只要单片机名字相同就行了)。出现下面界面,说明 openocd 连结 硬件调试器stlink成功啦。正在等待gdb通过3333端口来连接它。
- 此时再打开一个 powershell命令行窗口,输入
arm-none-eabi-gdb C:\Users\86132\Desktop\file\stm32f407\beep_openOCD\OBJ\BEEP.axf
意思是gdb调试目标文件为 BEEP.axf,这个文件是我用keil编译生成的,网上有人生成的是xx.elf文件,都是一样的,都是包含了调试信息的目标文件。 - 再输入 target remote localhost:3333
也就是连接刚刚 openocd那边等待的那个端口。如下,说明程序已经通过成功下载到板子了,运行到delay_xms函数里了
3. 调试板子程序
OpenOCD中,gdb常见的输入命令:
- q:退出gdb调试环境
- n:下一步,会跳过函数
- finish:跳出当前函数
- 还有更多,查看相关文档
关于如何通过OpenOCD把程序下载到板子上,还没有研究,但是跟调试时候可能不一样了,猜测是不需要gdb了,直接命令行给OpenOCD发下载目标文件的命令即可。
参考文章:
使用GDB(二):调试程序常用命令_七妹要奈斯的博客-CSDN博客_gdb常用调试命令
gdb调试常用命令_Zbb的笔记的博客-CSDN博客_gdb调试命令大全
利用openocd 在windows环境下GDB调试(调试器 stlinkv2)STM32_春夜喜小雨的博客-CSDN博客_openocd windows
边栏推荐
- 内存管理面试问题
- C# ftp检测目录是否存在和创建文件夹
- Use of yarn
- C language pthread_ Join() function
- 什么是单片机?单片机的组成部分有哪些?
- Remember a composer dependency problem requires composer runtime API ^2.0.0 - > no matching package found
- Purchase instructions for pull-up device and waist cushion
- How does the red team play
- The LAAS solution of elephant swap has risen rapidly and built a new defi2.0 protocol
- SoC之Hello World
猜你喜欢
[elaborate] ES6's array expansion method, object expansion method, string expansion method Object level depth
[unity project practice] game architecture
【STK初探】创建一条奔月轨道
Matlab simulation of BER performance of BCH coding and decoding
盒马两大供应链中心启用 多业态商品创新研发“有后台”
Command line program test automation
JVM内存模型:运行时数据区及线程
SoC 自定义 IP 核--呼吸灯
一个15年ABAP老兵的建议:了解这些基础知识,对ABAP开发有百利而无一害
浅谈契约测试
随机推荐
傍晚的天空
Scala variables and data types (2)
RquestMapping的注解功能、注解使用范围、注解的属性详情
EasyCVR平台V2.5.0版本及以上如何配置WebRTC协议实现低延迟播放?
The principle of distributed transaction is simple, and it is full of holes
图计算-图简介
JMeter interface font size setting method
C#上传文件到共享文件夹
sftp创建
Rquestmapping's annotation function, annotation usage range, and attribute details of annotations
DOM browser rendering process and repaint reflow
The LAAS solution of elephant swap has risen rapidly and built a new defi2.0 protocol
自动化测试工程师面试简历参考
NFT 多样化的发行方式
Mask RCNN源码详解
Online RPC timeout troubleshooting and subsequent GC tuning ideas
NFT 交易所合约开发教程(Solidity & Hardhat)
数据平台数据管理实践
第三讲 shell语法
JVM内存模型:虚拟机栈