Linux 下开发 stm32 的方法与步骤

2026-02-07 0 469

嵌入式开发中,许多新手常会碰到这样的困惑:明明是在Linux环境下用C语言编程,但在开发stm32时,为何编译工具链要用gccarm-none-eabi,而非看起来更熟悉的gcc?这正是我们今天要深入探讨的问题所在。

Linux下的交叉编译需求

Linux 下开发 stm32 的方法与步骤

嵌入式开发领域,我们的目标是让程序在PC上编译后,能在ARM架构上运行。然而,若采用gcc编译,生成的程序却只能在PC上运行,这显然不符合我们的初衷。比如在某个开发项目中,目标设备是ARM架构的小型设备,比如智能手表等,它们的运行环境与PC截然不同。这就需要使用特定的工具进行交叉编译,以适应不同架构的需求。这也是与传统编译相比,实现跨平台运行的关键所在。

Linux 下开发 stm32 的方法与步骤

嵌入式系统通常资源有限,与配置较高的PC相比差距很大。若直接用gcc编译的程序想在ARM设备上运行,首先在性能上就无法达标,还可能遇到兼容性问题。因此,必须使用专门的工具链来应对这些挑战。

Linux 下开发 stm32 的方法与步骤

gcc-arm-none-eabi工具链简介

gcc-arm-none-eabi是一款开源的ARM开发工具,非常实用。它主要适用于Arm-M和-A系列处理器。其功能非常全面,不仅包括GNU编译器(GCC),还有GDB。这套工具链在Linux和MacOS上的交叉编译活动中有着广泛的应用。例如,在企业开发基于ARM-M的工业控制小型设备时,这套工具链就能发挥重要作用。

Linux 下开发 stm32 的方法与步骤

这个工具链是以tar.ba2格式的包来存储的。我们得用tar-jxf这个命令来解压它,目标目录是我们打算安装的地方。解压后,bin目录里存放的就是我们后续编译时需要用到的工具链。看似简单的这一步,却是开启后续开发流程的关键。

环境变量的配置

为了方便地运用这个工具链,环境变量的设置是关键。当需要为当前用户设置环境变量时,我们会用vim编辑当前用户的配置文件。在文件末尾加上这一行:PATH=$PATH:/home//gcc-arm-none-eabi/bin。在开发日常工作中,若不配置环境变量,系统就无法识别我们所需的工具。

Linux 下开发 stm32 的方法与步骤

配置一旦成功,系统便会提示,那时便可轻松使用arm-none-eabi工具链。配置成功后,其便利性在开发过程中将不断显现。若每次使用工具都要费心寻找其具体位置,那确实会带来不少麻烦。

开发板及下载器相关

Linux 下开发 stm32 的方法与步骤

采用的是野火霸道开发板,板子上搭载的是某些特定的芯片(具体型号可依据实际情况确定)。下载器选用的是e-link,功能十分齐全。它通过CMSIS-DAP进行程序下载,并且还配备了一个串口。在硬件调试或数据交换时,这一点尤为便利,比如在进行温度监测设备开发时,串口便可以用来传输温度数据等。

在整个开发过程中,开发板与下载器扮演着士兵手中武器的角色。它们的性能优劣,直接关系到开发效率的高低以及产品的最终效果。

编译参数相关

Linux 下开发 stm32 的方法与步骤

编译文件时必须指定相应参数。通常,文件的编制采用汇编语言,在此特别提醒,汇编文件存在格式差异,分为.S和.s两种。过去,我们用小写.s格式的启动文件即可直接编译。但若使用大写.S格式的文件,则需额外添加参数-x-with-cpp。

Linux 下开发 stm32 的方法与步骤

汇编文件的gcc编译器对参数有严格规定。这些参数的正确性往往在编译过程中起着决定性的作用。因为不同的参数会直接影响到编译结果的优劣。比如,在时间敏感或空间敏感的编译场景中,参数的不同可能会导致程序功能缺失或运行效率降低。

链接相关

#include \"stm32f10x.h\"

int main()
{
    /* 开启GPIOB时钟 */
    *(unsigned int*)(0x40021000+0x18) |= 1<<3;

    /* 配置PB0为推挽输出 */
    *(unsigned int*)(0x40010c00+0x00) |= 1<<(4*0);

    /* PB0输出低电平,点亮绿色LED */
    *(unsigned int*)(0x40010c00+0x0c) &= ~(1<<0);

    while(1);
}
void SystemInit(void)
{

}

ld文件是链接文件,它在使用不同芯片时可能需要被修改。修改后,需要将它复制到工程里。链接器会依据这个ld文件来链接.o和main.o这两个文件,最终产出含有调试信息的elf文件。同时,在这一过程中,还需向链接器提供一些必要的参数。

之后,通过使用arm-none-eabi-工具,我们可以将elf文件转换成适用于单片机的bin文件和hex文件。在这个转换过程中,参数-O(大写O)是用来设定输出文件格式的,它的默认值是bin格式。这些步骤在嵌入式开发的全过程中,就像链条上的一个个小环节,彼此紧密相连。任何一个环节出现问题,都可能对最终的成品造成影响。

在进行嵌入式开发的过程中,你是否在编译阶段遭遇过一些难题?不妨点赞、转发,并在评论区留下你的想法。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

左子网 开发教程 Linux 下开发 stm32 的方法与步骤 https://www.zuozi.net/60594.html

常见问题
  • 1、自动:拍下后,点击(下载)链接即可下载;2、手动:拍下后,联系卖家发放即可或者联系官方找开发者发货。
查看详情
  • 1、源码默认交易周期:手动发货商品为1-3天,并且用户付款金额将会进入平台担保直到交易完成或者3-7天即可发放,如遇纠纷无限期延长收款金额直至纠纷解决或者退款!;
查看详情
  • 1、描述:源码描述(含标题)与实际源码不一致的(例:货不对板); 2、演示:有演示站时,与实际源码小于95%一致的(但描述中有”不保证完全一样、有变化的可能性”类似显著声明的除外); 3、发货:不发货可无理由退款; 4、安装:免费提供安装服务的源码但卖家不履行的; 5、收费:价格虚标,额外收取其他费用的(但描述中有显著声明或双方交易前有商定的除外); 6、其他:如质量方面的硬性常规问题BUG等。 注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。
查看详情
  • 1、左子会对双方交易的过程及交易商品的快照进行永久存档,以确保交易的真实、有效、安全! 2、左子无法对如“永久包更新”、“永久技术支持”等类似交易之后的商家承诺做担保,请买家自行鉴别; 3、在源码同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外); 4、在没有”无任何正当退款依据”的前提下,商品写有”一旦售出,概不支持退款”等类似的声明,视为无效声明; 5、在未拍下前,双方在QQ上所商定的交易内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准); 6、因聊天记录可作为纠纷评判依据,故双方联系时,只与对方在左子上所留的QQ、手机号沟通,以防对方不承认自我承诺。 7、虽然交易产生纠纷的几率很小,但一定要保留如聊天记录、手机短信等这样的重要信息,以防产生纠纷时便于左子介入快速处理。
查看详情

相关文章

猜你喜欢
发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务