前言

玩8位、16位、32位单片机之类的开发国内基本上都是用windows操作系统,用的是keil、iar之类的开发工具。以stm32为例,开发有stm32官方提供的标准库,就是类似于STM32Fxxx_StdPeriph_Lib_Vx.x.x这种,配合keil用起来也是相当顺手,而且在这种环境下开发资源丰富,遇到的问题也容易解决。

前段时间公司开发stm32项目,由于有国外现成的开源方案,只是不凑巧国外的大牛开发stm32的项目用的是linux开发环境,用的是libopencm3库,好在以前是在linux下做嵌入式开发的,不然真的抓瞎,这些问题倒腾倒腾整理一下分享给大家。

一、开发环境搭建

这里用的操作系统是ubuntu14.04
1、下载必要的工具
sudo apt-get install git libusb-1.0.0-dev(libusb是st-link要的底层驱动)

2、添加gcc-arm-embedded源,初始化编译器
sudo add-apt-repository ppa:terry.guo/gcc-arm-embedded
sudo apt-get update
sudo apt-get install gcc-arm-none-eabi

3、初始化ST-LINK调试与烧写器驱动(有人喜欢用J-LINK,在Linux下也可以,不过安装驱动就是稍微麻烦一点,有兴趣的可以自己研究)
git clone https://github.com/texane/stlink.git
cd stlink/
./autogen.sh
./configure
make && make install
此时连接st-link 这时用lsusb命令就可以查看到相关的设备已经连接上,如下图
这里写图片描述

4、此时整个编译环境与下载环境搭建好了,做STM32开发还有一个重要的东西,那就是开发库,用开发库可以帮我们省不少时间嘛。这里我用项目中使用开源的libopencm3库来演示,当然stm32的官库也可以在linux下使用,只是要自己写Makefile来编译,这个有兴趣的可以自己动手编译一下。
git clone git://github.com/libopencm3/libopencm3.git
cd libopencm3
make
在lib目录下面编译出来会有相关的xxx.a文件,这里针对你的芯片来做链接,比如你是stm32f1xx系列芯片,项目里面的连接就使用libopencm3_stm32f1.a

二、构建项目

1、现在整个开发库与开发环境都构建完成了,那我们要开始写代码,编译,调试、下载到开发板啊,这里由于涉及到Makefile的编写,这里就直接用我STM32F205项目中的dfu demo做为示例,项目源代码请参考:
https://github.com/ykevin/blog/tree/master/embedded/dfu
2、关于src目录下面,里面有一个memory.ld、Makefile.include文件,其中memory.ld文件是芯片的连接脚本文件,这个根据你的芯片来选择,Makefile.include是用来编译项目的文件,具体的请看Makefile相关手册。
3、进入src目录,直接make就可以编译完成项目(记得要先编译libopencm3库)。
4、下程序,只需要在src目录make flash就可以(当然前提是你的st-link已经正确连接并识别)

三、调试

1、对于linux下的嵌入调试,这里使用的是强大的gdb工具,对于gdb的使用我就不做说明,这里我只演示怎么用gdb调试stm32
2、终端上执行以下命令
sudo st-util
arm-none-eabi-gdb
tar extended-remote :4242
load dfu.elf
3、到上面一步后就跟在x86下面gdb调试一样。

四、资源

1、关于libopencm3的使用网上有一个libopencm3-example的合集里面有各种国外经典开发板的各个模块的小demo,有兴趣的可以自己研究。
https://github.com/libopencm3/libopencm3-examples

Logo

更多推荐