历史上的今天
返回首页

历史上的今天

今天是:2025年07月31日(星期四)

正在发生

2019年07月31日 | 如何在linux环境下使用gcc进行stm32项目开发

2019-07-31 来源:eefocus

背景

我之前一直是从事单片机相关的开发工作,对于STM32平台的开发,都是在keil中进行的。后来转为搞linux相关的开发了,发现开发工具是大大的不同,linux下的开发都是makefile+gcc+gdb,写代码也是用sourceInsight,代码的编译也是在服务器上进行的,没有了集成开发环境,当对这样的开发模式逐渐熟悉之后才发现Makefile真的很强大,开发效率高,对底层细节也是掌握了很多,弥补了不少盲区。keil工具虽然十分方便,但对于开发人员来说,隐藏了太多的细节,灵活性不高,对于高级应用显得力不从心了。因此在习惯了linux平台的开发之后,我萌生了一个想法:在linux下进行stm32的开发,这里涉及到的开发环境的搭建和调试手段的介绍。本文希望能尽可能详尽的将我所学习到的方法分享给广大技术爱好者和从事stm32开发的工作人员。如有疑问,欢迎留言提问。


开发环境介绍

在linux上进行开发时,公司都会有专用的编译服务器,我们写好的代码都是使用编译服务器上的交叉编译工具链进行编译的,在家里,我使用一台闲置的电脑主机,在其上安装了centos 6.5操作系统,使用它作为编译服务器。编码和调试的开发工作是在一台安装有windows 7的机器上进行的。它们的分工和彼此之间的联系用下图可以表示。


我只是想尽可能详尽的将开发的框架图和涉及到的相关工具罗列清楚,希望不要觉得它们的关系很复杂。服务器是没有显示器可用的,开机以后就不用动它了,所有与服务器相关的操作都是在windows上通过远程登录之后进行的,远程登录使用的工具是SecureCRT,如果你习惯于其它的远程工具也是可以的。在服务器上,我配置并开启了samba服务,这样我就可以在windows上访问inux上的目录与文件,因为我的工程代码都是存放在Linux上的磁盘上的。关于如何配置samba服务,大家可以参考网络上的一些文章。我在windows上映射了一个网络驱动器Z盘,这样可以像访问本地磁盘一样访问linux上的文件。代码编写是在soure Insight中进行的,然后在SecureCRT中的命令行下执行make对工程进行编译,编译好之后再命令行下使用gdb进行调试。当然,这里只能使用远程调试,在Windows上安装了j-link工具,j-link工具安装好以后会找到一个gdbserver的软件,打开它,就可以与j-link调试器通过USB连接好。j-link调试器使用排线连接开发板的jtag接口。整个框架的大致介绍就是这样的,搭建完成以后,编码都是在source insight上进行,编译和调试都是在secureCRT上进行,习惯之后也是非常方便的。


开发环境的构建

1、linux环境搭建

samba服务器的搭建

参考网络文章Linux中samba服务器的搭建


安装好以后通过win+R,在运行输入框中输入\192.168.1.106public,即可访问linux中的文件系统,192.168.1.106是我的linux的IP地址。

开启SSH服务

参考网络文章Linux开启ssh服务


安装交叉编译工具链

我使用的工具是gcc-arm-none-eabi-4_6-2012q4,该工具可以直接在网上下载,然后解压,添加环境变量即可。


工具链下载路径:https://launchpad.net/gcc-arm-embedded/+download


添加环境变量:export PATH=/opt/gcc-arm-none-eabi-4_6-2012q4/bin:$PATH


2、Windows环境搭建

安装source insight

安装SecureCRT

安装j-Link

我使用的版本是v6.14,请不要使用低版本的j-link,我之前使用的低版本j-link,调试时下载bin文件的速度特别慢。


使用gdb调试代码

设备的连接

将jlink,开发板和PC机链接好,然后上电,打开gdbserver软件,然后进行相关配置。

点击OK按钮后,gdbserver就与j-link调试器建立了链接,但是gdbserver与gdb的链接还未建立。

代码的编译

先看一下我的工程目录


在src目录下存放的都是用户代码,包括main.c

在Libraries目录下存放了stm32的外设库源码,

ucosii下存放的是ucos源码

libs下存放的是.a的静态库,在编译成功后可看到。

build目录下存放的是Makefile文件,进入该目录执行命令make,即可完成编译,

bin目录下生成各种结果文件,包括elf文件。

进入build目录,执行make,结果如下:


[justin@localhost build]$  make


开始gdb调试

编译成功后进入bin目录


[justin@localhost build]$  cd ../bin

galieo.elf是我们要调试的程序文件。


在bin目录下执行:


[justin@localhost bin]$  arm-none-eabi-gdb galileo.elf


这里需要重点说明一下,之所以我能在执行完命令之后让gdb自动与gdbserver进行连接,并且启动程序,让程序停在main函数处。主要是利用了.gdbinit的初始化脚本。.gdbinit的初始化脚本存放在与elf文件相同的目录下,即bin目录。脚本的内容如下


target remote 192.168.1.104:2331

set mem inaccessible-by-default off

monitor speed auto

monitor endian little

monitor reset

monitor flash device = STM32F103ZE

monitor flash breakpoints = 1

monitor flash download = 1

load

monitor reg sp = (0x08000000)

monitor reg pc = (0x08000004)

break main

continue

在 /home目录下也创建一个.gdbinit文件,文件内容为:


set auto-load safe-path /

192.168.1.104是我的windows主机的IP。在gdb下使用monitor命令,可以让gdbserver给j-link发送命令,这里操作包括:设置速度、设置大小端模式、复位、设置flash大小、设置栈指针和pc指针等等。然后设置断点,最后使用continue让调试运行。

这时候,可以看到gdbserver软件与运行在linux上的arm-none-eabi-gdb建立了网络连接。


 在gdb下执行命令continue(或者直接使用c快捷命令),即可继续运行程序。


可看到串口上已有相关字符的输出,说明程序已经在跑了。

推荐阅读

史海拾趣

Hendon Semiconductors公司的发展小趣事

随着全球化进程的加速和国际贸易的不断发展,Hendon Semiconductors积极实施全球化战略,不断拓展国际市场。公司加强与国际客户的合作与交流,了解他们的需求和期望,并根据市场变化调整产品结构和市场策略。同时,Hendon Semiconductors还积极参与国际展会和技术交流活动,展示其最新的技术和产品成果,提升品牌知名度和影响力。通过一系列有效的市场拓展措施和全球化战略的实施,Hendon Semiconductors在国际市场上取得了显著的成绩和突破。

Esterline Power Systems公司的发展小趣事

在质量管理方面,Esterline Power Systems始终坚持以客户为中心,追求卓越品质。公司引入了先进的质量管理体系,并通过了ISO 9001等国际标准认证。同时,公司还建立了严格的质量检测机制,确保每一件产品都符合高标准的质量要求。此外,公司还鼓励员工提出改进建议,通过持续改进来不断提升产品质量和客户满意度。

Dearborn Electronics Inc公司的发展小趣事

随着技术的不断进步,Dearborn Electronics Inc.不断投入研发,推出了一系列具有创新性的产品,如钽电容、陶瓷电容器等。这些产品以其卓越的性能和可靠性赢得了市场的广泛认可。同时,公司也积极拓展市场,将产品销售到全球各地,特别是医疗、石油、交通、工业等严苛应用领域。

Global Specialties公司的发展小趣事

随着电子技术的快速发展,教育和培训成为了Global Specialties的另一个重要领域。公司敏锐地捕捉到这一市场需求,推出了一系列针对教育的试验板和套件。这些产品不仅帮助学生更好地理解电子原理,还激发了他们的创造力和实践能力。通过与多所高校和职业院校的合作,Global Specialties成功地将自己的品牌深入到教育市场的每一个角落。

Crane Connectors公司的发展小趣事

Crane Connectors公司自创立之初,便致力于电子连接器技术的研发与创新。面对激烈的市场竞争,公司不断投入研发资源,推出了一系列具有自主知识产权的新型连接器产品。这些产品凭借出色的性能、稳定性和可靠性,迅速获得了市场的认可,为公司赢得了大量订单。随着技术的不断升级和产品的持续优化,Crane Connectors逐渐在电子连接器领域树立了良好的品牌形象,实现了市场的快速扩张。

Don Connex Electronics Co Ltd公司的发展小趣事

近年来,随着环保意识的提高,Don Connex Electronics积极响应绿色发展的号召,将环保理念融入产品设计和生产过程中。公司采用环保材料、节能减排的生产工艺,确保产品在使用过程中对环境的影响降到最低。同时,公司还积极参与环保公益活动,推动电子行业的绿色发展。

问答坊 | AI 解惑

开关电源专用集成电路在同步发电机励磁控制中的运用

  摘要 详细叙述了集成控制电路TL494 的基本原理及三相同步发电机自动电压调节器应具备的功能, 展示了 TL494 集成控制电路在实际应用中的优点。…

查看全部问答>

偶又来晒板了,感觉每次来水平都有点提高.

感觉自己不像某些天才,刚开始就能做出很票票的LAYOUT作品来.. 2008的第一次晒板比以往来得都晚一些, 大家一笑了之啊! …

查看全部问答>

Wince6 有个程序过不去,麻烦大侠们帮帮忙

#include \"stdafx.h\" #include #include int _tmain(int argc, _TCHAR* argv[]) {         UINT bufIndex = 0;         BYTE buf[262];         DWORD c;   &nb ...…

查看全部问答>

有采用STM32v3.1.0固件库的FreeRTOS的移植吗?

                                 FreeRTOS 6.0.1也是基于STM32 2.0.3固件库…

查看全部问答>

毕业论文急需资料

谁买了lm3s6432的开发板啊?能发点资料给偶不?要写毕业论文啊  都不知道怎么写  先谢谢各位了啊  …

查看全部问答>

高功率因数电源

本帖最后由 paulhyde 于 2014-9-15 09:34 编辑  …

查看全部问答>

招聘资深应用工程师-上海

猎头公司为某外资企业招聘招聘资深应用工程师(工作地点:上海) 职责: 售前售后技术支持。 技术培训等。 要求: 熟悉通信、电子、安防等行业; 熟悉嵌入式系统开发、FPGA、HDL编码和验证、DSP数字信号处理、通讯算法等相关知识。 如果有兴 ...…

查看全部问答>

求助各位大神 耽误你们时间了 谢谢

设计制作一个高效LED驱动电路,驱动一个由5只白光LED(现场统一提供)串联组成的发光装置,要求点亮的LED无明显闪烁。整体电路必须采用3.3V单路直流稳压电源供电,不得采用额外供电方式。限定采用TI公司TPS61040作为DC-DC变换器核心芯片。整个电路 ...…

查看全部问答>

请教一问题,am3359 通过GPMC 连接fpga

请教一问题,am3359 通过GPMC 连接fpga,读取速率上不来,有人遇到过没?…

查看全部问答>

EEWORLD大学堂----TI微控制器硬件驱动支持

TI微控制器硬件驱动支持:https://training.eeworld.com.cn/course/402…

查看全部问答>