你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

Ubuntu下使用Makefile开发STM32(合集) 精华  

[复制链接]
qianfan 发布时间:2015-10-22 20:52
本帖最后由 QianFan 于 2015-12-5 16:45 编辑
, l' d0 a, l+ u% a) O& r' c, b0 e. P- H7 I  F! O" K' i0 _
    许久没来论坛发帖了。从今天开始,写Ubuntu下使用Makefile开发STM32,来水一下经验,希望大家不要见怪。几天一篇。这个帖子作为一个合集,以后新出教程(或许叫做笔记更好吧)的网址就贴在这个地方。方便大家阅读。
9 M( c; {8 R" t, s5 Q( H. m! H; Z2 k3 A
    鉴于篇幅的原因,有些东西不能够写的太细,比如什么软件的安装啊,或者设置PATH路径啊。还请大家自行谷歌。当然了,谷歌已经挂了,还是用镜像吧。这个镜像我用过几个月了,很稳定,一直没有出现什么问题。& c' _5 _- j2 s/ B
, y! K5 m% p* `% ~. E5 B% e' U! ]
    Ubuntu不同与windows。可以你会说在Ubuntu下开发是瞎折腾。当然,如果你在windows下开发会有许多优秀的IDE。有付费的,有免费的。但是在Ubuntu下却不同。虽然你可以使用Eclipse装插件的方式来编写,但我看来那并不是一个好方法。特别是对刚开始进行Linux下开发的人来说。那个插件给你做了太多的东西。在他的基础上,你不会深入的理解newlib库的系统调用。出了问题之后,甚至不知道从何下手。所以,对新手来说,最好的方法就是不使用IDE,虽然这可能有些困难。; v- s8 ]7 R1 D) p5 n! ~* v. t- u1 ^
0 w4 a' ?  K& C6 k
    说这么多并不是为了黑IDE,也不是为了体现命令行下的编译多厉害。只是想说IDE,让我们变笨。一旦习惯了IDE之后,我们甚至忘了程序是如何链接的,甚至不知道为什么需要将多个源文件一股脑的加进工程中。或许有人还会在main.c文件里面写几千行代码,而不是将他们分文件组织。刚开始在Ubuntu下开发STM32的时候,我也曾怀念Windows下IDE的日子。有那些熟悉的Keil,IAR,CoIDE。我也曾想将window下的IDE搬到Ubuntu上面。于是开始安装wine。可是事情并不像想象中的那样发展。于是我给Eclipse装插件,一步一步的摸索。然而网上陈旧的资料并不总是有效。特别是在软件版本更新这么快的时代。无论如何,最后还是如愿的装上了。但是里面的文件太过繁杂,并不适合。
, c7 X7 a3 N0 Y* J: p$ J$ F5 b$ n    Eclipse行不通之后,我又对CodeBlocks动手。用它开发STM32,经过若干天的失败之后,终于能够用它编译程序,点亮一个LED灯了。只是成功的一小步。用着用着,发现如果我想改一个编译参数,比如用C99吧,却要动那么多次鼠标。想加一个头文件路径,还要使用鼠标进行繁杂的操作。终于想通,告别IDE,拥抱Makefile。
1 H. x" g, }% a2 e# k; U8 p6 a# @- f* v, C  H' M
    下面的几篇教程会讲解如何在Ubuntu下用命令行开发STM32。敬请期待!
+ x! j  d- u! a. b3 x5 ~7 \
$ C9 l7 z- o& r
以下的所有帖子都是在Nucleo303(之前在社区兑换的)的基础上编写的。如果你想更换其他的板子,请更改固件库中的所有文件,以及链接文件。
: E1 ?* J! H9 e" K

+ V4 o  C. ], y$ z5 C
0.工欲善其事  https://www.stmcu.org.cn/module/forum/thread-603768-1-1.html
  • 在Ubuntu下寻找Nucleo的串口号。
  • 安装常用的串口软件。minicom,putty。
  • 安装st-link在Ubuntu下的驱动程序。包括下载用的st-flash,调试用的st-util。
  • 安装arm-none-eabi-xxx。% d: Y) y" ^' y" |4 N5 O

) Z. r, T0 Z5 C, k$ d1.我叫Makefile  https://www.stmcu.org.cn/module/forum/thread-603780-1-1.html' F; F9 m' s; _& H% ^
  • 使用Makefile进行简单的工程管理。/ I% S; d. \0 w8 n6 d: L
0 B& s  [/ e$ q  s  c
2.灯,等灯等灯~ https://www.stmcu.org.cn/module/forum/thread-603787-1-1.html1 Q" X4 F. \' a) O0 ^; T9 U9 }1 |9 z! l
  • 固件库准备
  • 编写Makefile
  • 编写main函数。
  • 编译,链接,下载/ ]1 `7 p1 L; {% S1 H' ]* W
2 N5 J7 k5 l0 |: L* j
3.优化程序大小 https://www.stmcu.org.cn/module/forum/thread-603791-1-1.html
! z* `# c: o# Y2 T" f* g
  • 未优化(6372Bytes)
  • -Os优化(3780Bytes)
  • -ffunction-sections,-fdata-sections,-Wl,--gc-sections优化(1680Bytes)
  • -ffunction-sections,-fdata-sections,-Wl,--gc-sections,-Os优化(1348Bytes)8 H5 J9 x6 L  p6 r7 V

& l: L" ?  m+ a, Q: t% S+ E4.在SRAM中运行程序 https://www.stmcu.org.cn/module/forum/thread-603793-1-1.html
  • 反汇编代码
  • 分析flash.ld链接文件
  • 修改flash.ld,将代码区域更改到RAM中
  • 修改Makefile,生成SRAM中运行的代码。
  • 下载,反汇编验证。
  • 隐含的巨大bug。(中断向量表的问题)
    ( u& G) r! M9 t& y

1 V' i- e7 F+ m' D  M/ m5.使用串口Part1 https://www.stmcu.org.cn/module/forum/thread-603881-1-1.html
" ~9 I7 o2 ?0 P9 e, d7 s' j4 w- v
  • ringbuffer
  • 在中断中使用ringbuffer
  • 使用gdb调试
  • 添加volatile修正代码
  • 修正ringbuffer的无锁实现。
    & F' i8 y; ^: a* V+ ]; {
  • 隐含的bug。(中断向量表的问题。下节讲述)% Y% B) r$ c! |* X7 Q

! _# q9 H* B: A, q5 n6.使用串口Part2  https://www.stmcu.org.cn/module/forum/thread-603909-1-1.html
4 u% i$ v) ]2 t6 z. C
  • SCB->VTOR
  • 更改Makefile进行版本控制
  • 修改__io_getchar适用backspace
  • _exit系统调用+ _% [! e6 U# w! T% P
3 R& h: k; I! x% M& Q8 c
7.使用printf  https://www.stmcu.org.cn/module/forum/thread-603927-1-1.html
  • syscalls
  • 使用Newlib-nano减小代码大小
  • 为Newlib-nano添加printf的浮点输出支持。
    0 @% K9 D1 a- B) o. T: l, A
- l3 w7 J2 W, }5 i( \
8. 使用硬浮点计算 https://www.stmcu.org.cn/module/forum/thread-603940-1-1.html
  • 反汇编相关软浮点代码
  • 添加硬浮点运算的参数
  • 反汇编相关硬浮点代码
    5 n) x$ X4 _7 g

  D+ J0 l9 i' G, D9.再谈_exit  https://www.stmcu.org.cn/module/forum/thread-603942-1-1.html
  • 返回值和参数的传递规则
  • 将main的返回值传递给_exit
    $ p6 D. ?; X/ `/ w/ j' o
- v' ?: {( \0 z. Q5 A4 z
10.使用malloc https://www.stmcu.org.cn/module/forum/thread-603945-1-1.html
. u( C& n( ]. }' e- m  p/ g/ p
  • 动态内存分配机制
  • malloc内存分配测试
  • 为栈保留安全域量
  • 内存布局9 m$ l! L! `( t+ c, e$ C2 W
- k# ?0 h& P: F* W$ n! Q
11.使用gdb找出因除0导致的HardFault。https://www.stmcu.org.cn/module/forum/thread-604503-1-1.html+ v/ `* Z! C/ k6 ^

2 ~  I+ i' m# W: X" Y3 b3 k8 {* m
完结
6 a! ^8 K4 X, S
: Q, e" N2 q6 Y; v! G& }发一个最终版本的文件end.zip。里面包含Makefile,syscalls,以及串口的源代码。
7 ]& V$ Z, W* i6 G串口中添加__io_gets,__io_puts。用于从串口中读入一行数据(考虑backspace的情况)或者发送一个字符串。" ]5 }' f9 L9 n' {# r0 }
5 g& _- \) f0 i2 j; z* ?2 ?

end.zip

下载

401.67 KB, 下载次数: 426

评分

参与人数 1 ST金币 +30 收起 理由
zero99 + 30

查看全部评分

1 收藏 52 评论89 发布时间:2015-10-22 20:52

举报

89个回答
johnlees 回答时间:2021-5-30 20:24:24
when i use make all to the file of "end" ,the terminal show:. D1 @& B" C8 f; c) \1 }
cc: stlib/startup_stm32f30x.S
4 E9 h; R8 V2 V8 K! x. xcc1: error: bad value (cortex-m4) for -mcpu= switch
+ ]! x/ j5 v& C" }: Dcc1: error: invalid floating point option: -mfpu=fpv4-sp-d16% h9 r& ^4 Q# n* a/ A5 Q) ]
Makefile:63: recipe for target 'stlib/startup_stm32f30x.o' failed4 X3 d" _3 k9 _6 {6 {2 |5 U  N
make: *** [stlib/startup_stm32f30x.o] Error 1
! @8 ~( R$ ~4 U% l8 p+ }1 Qthanks
" V5 j# Y! Y3 c+ J# y" t7 y3 z5 p- M9 A- }2 J0 S0 y, z
# z4 ~1 W+ ?0 I4 ^, I( z  F  d: C
qianfan 回答时间:2015-11-8 21:07:50
pythonworld 发表于 2015-11-6 12:44/ D8 J( n- z- x+ h9 N' W% b
谢谢楼主。能否再写写怎么用HAL在Linux开发。

9 A( B# D& v; D这个系列的帖子不是为了讲解标准库如何使用,而是为了讲解如何使用linux下的相关工具进行开发。因此,使用标准库还是使用HAL是不重要的。
你好我好大家好! 回答时间:2015-10-23 08:57:48
帮顶                                 
qianfan 回答时间:2015-10-22 20:57:26
自私的打上一个版主推荐
creep 回答时间:2015-10-22 22:12:57
自私的抢个版主的板凳,这帖子必须得加精啊!
风子 回答时间:2015-10-23 00:52:32
地板留给我,坐等更新
yanhaijian 回答时间:2015-10-23 08:22:09
坐等更新啊。
ataudio 回答时间:2015-10-23 08:22:11
太自私了,楼主连google的镜像都自己私用了。。/ e% I) |7 G6 |& E4 q: Q
http://www.guge.click/
% y" I. n  B% }9 r# ?! t; Z无法显示网页。
0 p' V2 N/ g* }  m8 }0 m7 ?
! k7 y- V0 \& x- |& [3 k- }, m7 r9 o还好我能直接使用google.com0 A" c0 E$ @( e% K# z! [
MouseCat 回答时间:2015-10-23 09:22:32
又有大作推出哈,围观
watershade 回答时间:2015-10-23 09:28:36
linux上配置st-link海挺复杂,openOCD试了一下,没连通。回头也在试试
eshui 回答时间:2015-10-23 10:04:24
牛                     
无线传感器啊 回答时间:2015-10-23 10:18:17
qianfan 回答时间:2015-10-23 12:59:27
creep 发表于 2015-10-22 22:12
5 T- p& K! y3 D, s' k3 r1 e+ M# K( w自私的抢个版主的板凳,这帖子必须得加精啊!
; {' O* `  O8 s8 w3 {9 @6 T
那天脸皮厚了,自己加一个。。。
qianfan 回答时间:2015-10-23 13:01:41
风子 发表于 2015-10-23 00:52
- N+ m$ o. D1 H: ]3 ?' J. F9 ~地板留给我,坐等更新

3 n$ ^9 A; R2 K% |7 t
qianfan 回答时间:2015-10-23 13:01:59
ataudio 发表于 2015-10-23 08:22& c3 r5 M* Q! N" R/ s
太自私了,楼主连google的镜像都自己私用了。。* H% [5 D" y' Q* W2 g5 q- o
http://www.guge.click/3 ~9 q7 Z% c8 F) W) E  e
无法显示网页。

$ C; I+ E- ]% a. C8 L( R难道你打不开镜像吗?
qianfan 回答时间:2015-10-23 13:02:14
MouseCat 发表于 2015-10-23 09:22
% v& h8 v1 U" d$ ~又有大作推出哈,围观
7 C- m( I' f5 O( x8 T
好久不见啊

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版