【STM32开发环境】Linux下开发stm32(⼀)使⽤gcc-arm-none-eab。。。
现在⼈⼯智能⾮常⽕爆,⼀般的教程都是为博硕⽣准备的,太难看懂了,分享⼀个⾮常适合⼩⽩⼊门的教程,不仅通俗易懂⽽且还很风趣幽默,点☞☜进⼊传送门~
1.为什么不是gcc
之前我们花了三篇⽂章介绍Linux下如何进⾏C语⾔编程:
这是为了给接下来的Linux下嵌⼊式开发打好基础,尽快熟悉Linux下c编程,但是在开发stm32的时候,编译⼯具链要使⽤gcc-arm-none-eabi,为什么不是gcc呢?这就要说到linux下的交叉编译了,因为我们要在PC机上编译出可以运⾏在ARM上的程序,使⽤gcc编译出的是在PC上运⾏的程序,所以我们要使⽤gcc-arm-none-eabi进⾏交叉编译~
<-arm-none-eabi toolchain 介绍及安装
是⼀个开源的ARM开发⼯具链,适⽤于Arm Cortex-M和Coretex-A系列处理器,包括GNU编译器(GCC),以及GDB,可⽤于Windows,Linux,MacOS上的交叉编译。
gcc-arm-none-eabi在ubuntu软件源仓库中就有,但是版本⽐较陈旧:
在此我们从选择合适的版本下载(这⾥我选择Linux64):
解压下来是tar.ba2格式包,使⽤命令tar -jxf <;要解压的⽂件>解压到我们要安装的⽬录:
为了以后使⽤⽅便,将⽂件夹重命名:
它下⾯的bin⽬录就是我们要使⽤的编译⼯具链:
share⽬录的doc下包含了⼤量的使⽤帮助⽂档,可以先略读⼀⼆,特别是:
接下来我们要将bin⽬录添加到环境变量,这样可以直接在命令⾏输⼊要使⽤的⼯具名,然后系统就可以到该⼯具,在此我们仅为当前⽤户添加环境变量,使⽤vim ~/.bashrc编辑当前⽤户配置⽂件,在最后添加export PATH=$PATH:/home/mculover666/gcc-arm-none-eabi/bin:
然后使⽤命令source ~/.bashrc更新系统路径,使添加的环境变量⽴即⽣效:
然后输⼊命令arm-none,然后按三下Tab(⼀定不要输⼊全部),检查系统是否可以⾃动补全:
如果系统可以提⽰,说明环境变量配置成功,可以开⼼的使⽤arm-none-eabi⼯具链啦~
3.从裸机⼯程开始
3.1.硬件说明
这⾥我使⽤的是野⽕霸道开发板,板载芯⽚为STM32F103ZET6,下载器使⽤e-link,这个下载器使⽤CMSIS-DAP下载程序,同时并带有⼀个串⼝,⾮常好⽤~
板载RGB-LED的原理图如图所⽰:
3.2.新建空的裸机⼯程
⾸先新建⼀个⽂件夹mkdir 00-template-reg⽤来存放整个⼯程,然后整个⼯程包含三个⽂件:
startup_stm32f10x_hd.s:从固件库中拷贝,注意不是arm⽂件夹下的,因为truestudio使⽤的是gcc编
译器,所以我们选择truestudio⽂件夹下的启动⽂件;
stm32f10x.h:空⽂件;
main.c:代码如下:
#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);
linux下gcc编译的四个步骤}
void SystemInit(void)
{
}
4.编译
接下来就是激动⼈⼼的编译步骤了~编译的时候有两种⽂件,⼀种是汇编启动⽂件,⼀种是c源⽂件,接下来分别编译:
⾸先需要说明⼀些编译任何⼀个⽂件都需要带上的参数:
参数说明
-mthumb表明使⽤的指令集(必需)
-mcpu=cortex-m3表明芯⽚内核(必需)
-g产⽣调试信息
参数说明
4.1.启动⽂件编译
启动⽂件⼀般是由汇编写成,此处需要注意的是,汇编⽂件的格式有.S和.s之分:
.S:表明⽂件中含有预处理指令(⽐如#define),需要先进⾏处理;
.s:表明⽂件不需要处理,可以直接编译;
之前我们添加的启动⽂件是⼩写.s,所以直接进⾏编译,另外说⼀下,如果使⽤的是.S⽂件,那么需要带上-x assembler-with-cpp参数。接下来说明⼀些汇编⽂件gcc编译器使⽤的参数
参数说明
-x assembler-with-cpp先对⽂件进⾏预处理
-Wa,option向汇编器Assembler传递参数
注:可以向汇编器传递的参数
参数说明
-W或–no-warn关闭所有告警
–fatal-warnings将所有的警告提⽰为错误
–warn正常提⽰告警信息
所以,接下来我们可以使⽤如下的参数组合来编译启动⽂件(不进⾏预处理,并且正常提⽰告警信息):
arm-none-eabi-gcc -c -mthumb -mcpu=cortex-m3 -g -Wa,--warn -o startup_stm32f10x_hd.o startup_stm32f10x_hd.s
4.2.C⽂件编译
因为main.c中没有特殊的东西,只是两个函数,所以简单的编译⼀下就可以了:
参数描述
-Wall允许输出所有警告
arm-none-eabi-gcc -c -mthumb -mcpu=cortex-m3 -g -Wall -o main.o main.c
5.链接
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论