
本帖最后由 QianFan 于 2015-12-5 16:45 编辑 / x2 h( m& V. ?9 M1 V 许久没来论坛发帖了。从今天开始,写Ubuntu下使用Makefile开发STM32,来水一下经验,希望大家不要见怪。几天一篇。这个帖子作为一个合集,以后新出教程(或许叫做笔记更好吧)的网址就贴在这个地方。方便大家阅读。1 B; o& r" e/ U4 ^# Q& ]" l9 m2 a * R& K+ |& a# d( O2 x' z* T, t! D 鉴于篇幅的原因,有些东西不能够写的太细,比如什么软件的安装啊,或者设置PATH路径啊。还请大家自行谷歌。当然了,谷歌已经挂了,还是用镜像吧。这个镜像我用过几个月了,很稳定,一直没有出现什么问题。, ^6 k& M- X4 d1 U$ Y% s" a( v( d Ubuntu不同与windows。可以你会说在Ubuntu下开发是瞎折腾。当然,如果你在windows下开发会有许多优秀的IDE。有付费的,有免费的。但是在Ubuntu下却不同。虽然你可以使用Eclipse装插件的方式来编写,但我看来那并不是一个好方法。特别是对刚开始进行Linux下开发的人来说。那个插件给你做了太多的东西。在他的基础上,你不会深入的理解newlib库的系统调用。出了问题之后,甚至不知道从何下手。所以,对新手来说,最好的方法就是不使用IDE,虽然这可能有些困难。 说这么多并不是为了黑IDE,也不是为了体现命令行下的编译多厉害。只是想说IDE,让我们变笨。一旦习惯了IDE之后,我们甚至忘了程序是如何链接的,甚至不知道为什么需要将多个源文件一股脑的加进工程中。或许有人还会在main.c文件里面写几千行代码,而不是将他们分文件组织。刚开始在Ubuntu下开发STM32的时候,我也曾怀念Windows下IDE的日子。有那些熟悉的Keil,IAR,CoIDE。我也曾想将window下的IDE搬到Ubuntu上面。于是开始安装wine。可是事情并不像想象中的那样发展。于是我给Eclipse装插件,一步一步的摸索。然而网上陈旧的资料并不总是有效。特别是在软件版本更新这么快的时代。无论如何,最后还是如愿的装上了。但是里面的文件太过繁杂,并不适合。4 L5 n) v1 j6 h3 J Eclipse行不通之后,我又对CodeBlocks动手。用它开发STM32,经过若干天的失败之后,终于能够用它编译程序,点亮一个LED灯了。只是成功的一小步。用着用着,发现如果我想改一个编译参数,比如用C99吧,却要动那么多次鼠标。想加一个头文件路径,还要使用鼠标进行繁杂的操作。终于想通,告别IDE,拥抱Makefile。8 e8 t" e, T) f& H+ m8 D7 ?; O2 b- t 下面的几篇教程会讲解如何在Ubuntu下用命令行开发STM32。敬请期待! 1 U2 G% a G4 c+ d9 y0 F6 {8 c 以下的所有帖子都是在Nucleo303(之前在社区兑换的)的基础上编写的。如果你想更换其他的板子,请更改固件库中的所有文件,以及链接文件。# w: n( w7 _5 x! L 0.工欲善其事 https://www.stmcu.org.cn/module/forum/thread-603768-1-1.html
1.我叫Makefile https://www.stmcu.org.cn/module/forum/thread-603780-1-1.html% {6 \! w' C% J( j; U) e
2.灯,等灯等灯~ https://www.stmcu.org.cn/module/forum/thread-603787-1-1.html
3.优化程序大小 https://www.stmcu.org.cn/module/forum/thread-603791-1-1.html
4.在SRAM中运行程序 https://www.stmcu.org.cn/module/forum/thread-603793-1-1.html
5.使用串口Part1 https://www.stmcu.org.cn/module/forum/thread-603881-1-1.html# t# T3 v0 R5 q9 H% o
6.使用串口Part2 https://www.stmcu.org.cn/module/forum/thread-603909-1-1.html# Q3 ?9 Y- Y" z2 A9 E5 @3 z A
7.使用printf https://www.stmcu.org.cn/module/forum/thread-603927-1-1.html
8. 使用硬浮点计算 https://www.stmcu.org.cn/module/forum/thread-603940-1-1.html
9.再谈_exit https://www.stmcu.org.cn/module/forum/thread-603942-1-1.html
10.使用malloc https://www.stmcu.org.cn/module/forum/thread-603945-1-1.html 。. U+ ?1 _" r, d2 b3 J( @
11.使用gdb找出因除0导致的HardFault。https://www.stmcu.org.cn/module/forum/thread-604503-1-1.html2 }1 i3 y* Z' {5 O8 j r - R/ }3 B- Q! V+ s) V3 x2 r: g . v1 |/ j7 Z& O# h: B1 t# m 完结7 {' c7 H) ^7 B ! x: j* g4 l) V* W6 g 发一个最终版本的文件end.zip。里面包含Makefile,syscalls,以及串口的源代码。1 W- e4 }& e7 t3 c f6 r! X5 x% W' U 串口中添加__io_gets,__io_puts。用于从串口中读入一行数据(考虑backspace的情况)或者发送一个字符串。6 ^, w6 \$ r, b; x! A & f) ]8 Q6 D6 ~7 R, H, h |
end.zip
下载401.67 KB, 下载次数: 433
cc: stlib/startup_stm32f30x.S
cc1: error: bad value (cortex-m4) for -mcpu= switch% u: B& s. }: U. k" @
cc1: error: invalid floating point option: -mfpu=fpv4-sp-d161 [% g1 \. M$ e% d: E! W" P6 i
Makefile:63: recipe for target 'stlib/startup_stm32f30x.o' failed" v1 H; y2 P( o
make: *** [stlib/startup_stm32f30x.o] Error 18 y2 `4 s7 v( Z1 u% l- W& V: C
thanks
这个系列的帖子不是为了讲解标准库如何使用,而是为了讲解如何使用linux下的相关工具进行开发。因此,使用标准库还是使用HAL是不重要的。
http://www.guge.click/
无法显示网页。
n4 A% E/ V2 h; E2 T
还好我能直接使用google.com
难道你打不开镜像吗?
好久不见啊