前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用GCC开发STM32入门一(使用官方库)

用GCC开发STM32入门一(使用官方库)

作者头像
杨永贞
发布2020-08-04 17:07:04
2.5K0
发布2020-08-04 17:07:04
举报

先说说为什么需要用GCC开发stm32吧,作为一名编程方面的爱好者,又是搞嵌入式的,总是用现成的IDE,感觉很不舒服,虽然IDE能很大提高咱们的工作效率,可是作为业余学习研究,还是越熟悉底层越好。比如如何搭建环境,如何使用编译器和编写makefile,这些搞过linux开发的都知道,而且 linux环境下没那么多IDE可用,而且也没必要用IDE.还有一个原因是,喜欢黑色的dos窗口下编程的感觉,IDE编辑环境太刺眼了,每次下班后都很累眼睛。

一、开发环境的搭建

在《一步步写嵌入式操作系统》一书中,讲到了如何搭建嵌入式开发环境,cygwin+arm-elf-gcc+make工具

1.首先从www.leeos.org网站中下载所需要的软件,可以用cygwin+skyeye+gcc

2.安装cygwin软件,安装步骤按照书上的进行,需要说明的是 :在进入cygwin setup-select packages界面时,必须选中devel包中的gcc4和make,我们还可以选中vim作为我们之后的编写环境, 就不用不停的在window界面下切换了。

3.安装编译环境arm-elf-gcc。 首先将leeos_tools_for_cygwin.tar.gz复制到D:\cygwin\usr中(我把cygwin装在了D盘,具体看自己情况),然后解压缩为leeos_tools_for_cygwin。打开cygwin,输入cd /usr命令,切换到usr目录下,进行环境变量的设置,一次输入以下三条命令: echo "PATH=\$PATH:/usr/leeos_tools_for_Cygwin/bin">>/etc/profile

echo "PATH=\$PATH:/usr/leeos_tools_for_Cygwin/libexec/gcc/arm-elf/4.4.2">>/etc/profile

echo "PATH=\$PATH:/usr/leeos_tools_for_Cygwin/arm-elf/bin">>/etc/profile 此时编译环境安装成功。我们可以打开看一下D:/cygwin/etc/profile文件,在该文件的最下边多了三句话 还要说明的一点是我们需要用chmod命令将三个目录下的所有exe文件设置一下权限,方法是chmod 777 *.exe 重启cygwin之后arm-elf-gcc就可以用了。

以上环境搭建的方法,摘自网络,百度一下有很多,我照着上面说的试了试,没有成功,再用arm-elf-gcc编译时出来了一堆提示汇编的错误,最后解决了,原来还是权限的问题。

二.编写makefile

上面的环境搭建好了,接下来就可以动手实验了。需要注意的是,下载的arm-elf-gcc编译器先看一下版本,听说只有4.2以上的才支持stm32.然后测试下编译器是否管用,随便写个c文件,用arm-elf-gcc -o2 -c hello.c -o hello.o测试下,成功生成hello.o说明环境搭建成功了。然后看一下make工具是否管用,make -v查看一下。

开始写makefile,其实这一步也不是必须的,完全可以手动的去编译,但是makefile的确很强大,写好一次,保存为模板,很好用,编辑时直接mske就可以了。

不用makefile,你需要写很长的东西,如:

arm-elf-gcc -g -mcpu=cortex-m3 -mthumb -c uart_helloworld.c -nostartfiles -o uart_helloworld.o

arm-elf-gcc -g -mcpu=cortex-m3 -mthumb -c isr.c -nostartfiles -o isr.o

arm-elf-ld -T stm32f103vet6.ld -o helloworld.out uart_helloworld.o isr.o

arm-elf-objcopy -O binary helloworld.out helloworld.bin

写成makefile就省事多了,简单的写法如:

PREFIX := arm-elf- .PHONY: all clean all: helloworld.bin uart_helloworld.o: uart_helloworld.c arm-elf-gcc -g -mcpu=cortex-m3 -mthumb -c uart_helloworld.c -nostartfiles -o uart_helloworld.o isr.o: isr.c arm-elf-gcc -g -mcpu=cortex-m3 -mthumb -c isr.c -nostartfiles -o isr.o helloworld.out: uart_helloworld.o isr.o stm32f103vet6.ld arm-elf-ld -T stm32f103vet6.ld -o helloworld.out uart_helloworld.o isr.o helloworld.bin: helloworld.out arm-elf-objcopy -O binary helloworld.out helloworld.bin clean: rm -f *.o *.out *.bin

这样写,虽然很清楚,文件的依赖关系等很明显,但是还是不够精简。这个就是一个简单的makefile,方便初学者学习和理解makefile原理。

以下是我整理了一份自己使用的模板:makefile

(LDSCRIPT) OBJS= main.o .PHONY: clean all:images images: (BINARY).hex (BINARY).bin (BINARY).srec (BINARY).list (OBJS):%.o:%.c(CC) -c (CFLAGS) < -o @ %.elf: (OBJS) (LDSCRIPT)(CC) (CFLAGS) -o start.o -c start.s(LD) -o (*).elf start.o (OBJS) (LDFLAGS) %.bin: %.elf(OBJCOPY) -Obinary (*).elf (*).bin %.hex:%.elf(OBJCOPY) -Oihex (*).elf (*).hex %.srec: %.elf(OBJCOPY) -Osrec (*).elf (*).srec %.list: %.elf(OBJDUMP) -S (*).elf >

接下来,开始用GCC开发stm32了,先从简单的点灯开始......

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2013-08-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档