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

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

[复制链接]
QianFan 发布时间:2015-10-25 16:01
本帖最后由 QianFan 于 2015-10-25 20:40 编辑

    在Ubuntu下开发STM32并不简单。这里说的不简单是上手困难。不太适合新手。对一个刚开始学习STM32的人来说,如果一开始就使用Ubuntu开发,我觉得并不是一个好的注意。对于初学者来说,如果你的代码出现问题,你既要考虑是不是固件库的问题,又要考虑是不是Makefile的问题。还要考虑newlib(arm-none-eabi-gcc使用的库)系统调用的问题。这么多的问题加在一块,足够你想放弃学习了。
    因此,对于初学者来说,就不要瞎折腾了。还是老老实实的使用keil mdk,iar等一些IDE,从0开始学习固件库。等你的固件库学习到一定的水平之后,在来折腾一下也是不错的。对于那些老手来说,编译器什么的已经不重要了。可以尝试一下。当你学会了使用Ubuntu开发STM32的时候,你自己做一个包,放到Arduino IDE下面。就可以尽情的使用Arduino来开发STM32了。
    若是你一直使用盗版的keil,由于商业使用导致的版权问题,那么也可以考虑一下使用arm-none-eabi-gcc。使用arm-none-eabi-gcc并不要求你的系统是linux,是Ubuntu。而在windows平台下,也有arm-none-eabi-gcc。和Ubuntu下的是同一个公司开发的。一样好用。

固件库准备:
    对于ST的固件库来说,大部分是使用C进行编写的。不管是用什么环境开发,都是没有问题的。有问题的是汇编文件。armcc和gcc对于汇编的语法要求不同。因此之前使用mdk的汇编文件在这里就不要使用了。我们应该使用TrueStudio(在固件库的模板文件中)下的汇编文件。这个文件在ST的固件库中有。
    除了汇编文件,armgcc还需要一份链接文件(*.ld)。这个文件在固件库中也可以找到。同样,还是需要使用TrueSTUDIO文件夹下的版本。如果你足够熟悉固件库的话。这些文件还是很容易找到的。
    如果你找不到或者懒得找的话,也没关系。我会上传一个压缩包。里面会有我们这次使用的所有文件。
    这次我们使用Makefile进行集中处理。

源代码结构:
    Screenshot from 2015-10-25 15:37:55.png
其中,
  • flash.ld是从TrueStudio文件夹下拷贝的。我把它改名为flash.ld。
  • 将启动文件的后缀从*.s改为*.S。

编写Makefile
  • 由于Makefile文件和其他的源文件,头文件不再同一个文件夹中。为了能让make找到这些文件,需要使用vpath。
        vpath %.S stlib
        vpath %.c stlib stlib/src
        vpath %.h stlib stlib/cminc stlib/inc

  • 使用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的起始地址)
   完整的Makefile如下:
    Screenshot from 2015-10-25 16:04:31.png
   

编写main函数
    我们在main函数中,写点代码来点亮一个led灯。关于_exit会在以后讲到的。
    Screenshot from 2015-10-25 16:06:14.png    

编译,下载:
  • 使用make all进行编译,链接。在完成之后,可以看见Makefile的目录中,多了blink.elf和blink.bin两个文件。
  • 使用sudo make burn进行下载。由于st-flash需要superuser权限,所以需要在前面加上sudo。
  • 在下载成功之后,可以看到灯以一定的频率闪烁。

make all之后可以看到程序的大小:
    Screenshot from 2015-10-25 16:09:08.png
(这个6372是代码的字节数。点亮一个led灯却占用了6K的代码。如果你和keil mdk相比的话会发现这个数大的多。这并不是说明arm gcc比armcc弱。只是我们没有对代码进行优化。会在下面几篇中讲解如何优化)

make burn进行下载:
    Screenshot from 2015-10-25 16:11:00.png

blink.zip

下载

390.42 KB, 下载次数: 646

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

举报

27个回答
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
研究得比较深入,赞
QianFan 回答时间:2015-10-25 21:25:03
netlhx 发表于 2015-10-25 21:24
研究得比较深入,赞

赚点金币好过年啊
aoxiangwode2008 回答时间:2015-10-25 21:38:52
很不错的资料,学习了,谢谢楼主。
那就地方iv 回答时间:2015-10-25 22:00:21
楼主技术强
金志峰 回答时间:2015-10-25 23:29:14
不错 第一次看到有人在linux下面写stm32
风子 回答时间:2015-10-26 00:19:39
qiangdadelouzhu
123下一页

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似技术帖

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