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

Ubuntu下开发STM32---2.灯,等灯等灯  

[复制链接]
qianfan 发布时间:2015-10-25 16:01
本帖最后由 QianFan 于 2015-10-25 20:40 编辑
6 ^) U+ M7 u( U" K3 o$ q
- F1 b# _8 r0 |$ v& U0 N, R    在Ubuntu下开发STM32并不简单。这里说的不简单是上手困难。不太适合新手。对一个刚开始学习STM32的人来说,如果一开始就使用Ubuntu开发,我觉得并不是一个好的注意。对于初学者来说,如果你的代码出现问题,你既要考虑是不是固件库的问题,又要考虑是不是Makefile的问题。还要考虑newlib(arm-none-eabi-gcc使用的库)系统调用的问题。这么多的问题加在一块,足够你想放弃学习了。
' p* I" W* U2 d    因此,对于初学者来说,就不要瞎折腾了。还是老老实实的使用keil mdk,iar等一些IDE,从0开始学习固件库。等你的固件库学习到一定的水平之后,在来折腾一下也是不错的。对于那些老手来说,编译器什么的已经不重要了。可以尝试一下。当你学会了使用Ubuntu开发STM32的时候,你自己做一个包,放到Arduino IDE下面。就可以尽情的使用Arduino来开发STM32了。7 j9 l3 _* L8 V- X: R. v- L
    若是你一直使用盗版的keil,由于商业使用导致的版权问题,那么也可以考虑一下使用arm-none-eabi-gcc。使用arm-none-eabi-gcc并不要求你的系统是linux,是Ubuntu。而在windows平台下,也有arm-none-eabi-gcc。和Ubuntu下的是同一个公司开发的。一样好用。
7 N% |6 S' w6 i9 N" [: p
, E; B/ L) s* U1 ~% S- @- c7 B固件库准备:9 V! H  x% I2 t
    对于ST的固件库来说,大部分是使用C进行编写的。不管是用什么环境开发,都是没有问题的。有问题的是汇编文件。armcc和gcc对于汇编的语法要求不同。因此之前使用mdk的汇编文件在这里就不要使用了。我们应该使用TrueStudio(在固件库的模板文件中)下的汇编文件。这个文件在ST的固件库中有。
; n; _6 s4 _5 H2 n8 d) t, k    除了汇编文件,armgcc还需要一份链接文件(*.ld)。这个文件在固件库中也可以找到。同样,还是需要使用TrueSTUDIO文件夹下的版本。如果你足够熟悉固件库的话。这些文件还是很容易找到的。. X2 q1 n& k+ N  n
    如果你找不到或者懒得找的话,也没关系。我会上传一个压缩包。里面会有我们这次使用的所有文件。
( ~* B8 O3 K/ b6 O    这次我们使用Makefile进行集中处理。8 N, R$ E- F0 P
9 U6 ^2 g5 D! Y6 }- n
源代码结构:/ H0 ?' h: g" n3 ?* }& i1 E
    Screenshot from 2015-10-25 15:37:55.png 0 }6 M3 a; m2 Y; E
其中,; G+ h" K8 T6 A. J0 S! o( m* p
  • flash.ld是从TrueStudio文件夹下拷贝的。我把它改名为flash.ld。
  • 将启动文件的后缀从*.s改为*.S。
    + f: T. Y( O  o) z; _
$ [9 n& ?+ z9 b6 s% V2 R) m
编写Makefile5 y# ]+ x& U* ^6 b
  • 由于Makefile文件和其他的源文件,头文件不再同一个文件夹中。为了能让make找到这些文件,需要使用vpath。  A* N9 x8 C# `" y
        vpath %.S stlib
' X+ I5 N6 {& v2 H        vpath %.c stlib stlib/src, _, w, L& T# k, M
        vpath %.h stlib stlib/cminc stlib/inc
/ @9 \; b9 [) ?5 A$ X9 Q& o  [$ O3 q
  • 使用vpath只是为了让make程序能够找到头文件。为了能够让arm-none-eabi-gcc找到头文件,需要在编译的时候使用-Ixxx指定头文件。
  • 在编译的时候,由于使用assert_param的原因,需要定义宏USE_STDPERIPH_DRIVER。使用-Dxxx指定宏。
  • 为了让arm gcc知道我们使用的是什么类型的单片机,需要指定参数-mcpu=cortex-m4 -mthumb。
  • 链接完成之后,生成的文件是*.elf格式的。而我们使用st-flash下载使用的文件是bin格式的。因此我们需要使用arm-none-eabi-objcopy来将elf转换成为bin格式。
  • st-flash下载的时候需要指定下载的地址。我们使用0x0800_0000这个地址。(在flash.ld中,作为flash的起始地址)5 F8 m( b4 G! H! ]/ E0 j, @5 U
   完整的Makefile如下:  J3 F  y: u; e
    Screenshot from 2015-10-25 16:04:31.png . E+ h3 t2 m) ]+ S! w: u( T8 p" y
   
( |! _+ h/ {: X1 n* O! V
/ F7 {' \5 x& z$ ?& m3 I& `9 S编写main函数& R7 j1 P  b0 B) p' V" P1 S
    我们在main函数中,写点代码来点亮一个led灯。关于_exit会在以后讲到的。6 B3 U$ ]& D# B0 G
    Screenshot from 2015-10-25 16:06:14.png    
8 T/ D" T' s2 B& m! w% h9 A
8 r! M: |% `/ d8 R( a编译,下载:5 N5 k5 L! R; A0 Q0 t( H6 R3 W6 m
  • 使用make all进行编译,链接。在完成之后,可以看见Makefile的目录中,多了blink.elf和blink.bin两个文件。
  • 使用sudo make burn进行下载。由于st-flash需要superuser权限,所以需要在前面加上sudo。
  • 在下载成功之后,可以看到灯以一定的频率闪烁。+ T& Z$ s- S$ ~' m1 Q3 n% W* l

+ l  w* n6 H) t. r8 k# K2 hmake all之后可以看到程序的大小:
0 g/ n/ Q# |! ?7 a( l1 t$ B    Screenshot from 2015-10-25 16:09:08.png ! j6 e) I) R' D* d) \: @9 r
(这个6372是代码的字节数。点亮一个led灯却占用了6K的代码。如果你和keil mdk相比的话会发现这个数大的多。这并不是说明arm gcc比armcc弱。只是我们没有对代码进行优化。会在下面几篇中讲解如何优化): x8 {) ^+ c; l- X
, H; ?0 b# H- K7 c4 H
make burn进行下载:
/ S/ u6 N! _) m& c7 `9 i6 g. `    Screenshot from 2015-10-25 16:11:00.png

blink.zip

下载

390.42 KB, 下载次数: 692

收藏 7 评论27 发布时间:2015-10-25 16:01

举报

27个回答
qianfan 回答时间:2016-9-23 08:43:05
hemammmmm 发表于 2016-9-22 17:07, B- |6 m0 z2 Z; E8 y; _" p
们应该使用TrueStudio(在固件库的模板文件中)下的汇编文件,i cannot find it,can you give some imformat ...
6 A6 S8 M1 h( p) t
直接用我上传的压缩包的文件就行
hemammmmm 回答时间:2016-9-22 17:07:47
们应该使用TrueStudio(在固件库的模板文件中)下的汇编文件,i cannot find it,can you give some imformation,thank you very much
qianfan 回答时间:2015-10-25 21:25:03
netlhx 发表于 2015-10-25 21:24# p! D+ m# U, C6 F- M. U/ x8 I
研究得比较深入,赞
- w5 ~9 C) K4 P# y+ {. q0 r
赚点金币好过年啊
yanhaijian 回答时间:2015-10-25 16:39:41
楼主挺专研的。
肽宰1 回答时间:2015-10-25 18:24:08
不错
samsamhoo 回答时间:2015-10-25 18:41:26
学习了,谢谢分享。
netlhx 回答时间:2015-10-25 21:24:08
研究得比较深入,赞
aoxiangwode2008 回答时间:2015-10-25 21:38:52
很不错的资料,学习了,谢谢楼主。
那就地方 回答时间:2015-10-25 22:00:21
楼主技术强
jinzhifeng 回答时间:2015-10-25 23:29:14
不错 第一次看到有人在linux下面写stm32
风子 回答时间:2015-10-26 00:19:39
qiangdadelouzhu
pandyele 回答时间:2015-10-26 07:56:38
太专业了 顶起
黑皮男 回答时间:2015-10-26 08:13:37
不错,楼主讲的很透彻
hooke 回答时间:2015-10-28 13:46:58
好厉害   
拼命三郎 回答时间:2015-11-9 09:03:53
不错不错啊  慢慢学习
逍遥李 回答时间:2015-11-9 09:08:39
又见大神神贴~
12下一页

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版