linux stm32_linux stm32开发 - CSDN
精华内容
参与话题
  • stm32linux下开发(一)

    万次阅读 多人点赞 2018-03-08 17:28:12
    说到STM32,大家不陌生,mdk环境+开发板+jlink即可搞定,但对于mdk开发环境,大部分人并不能说清楚。对于一个工程的编译,链接,烧写,调试过程完完全全集成在一个软件里,一键即可实现,这当然方便开发,但我们想要...

           说到STM32,大家不陌生,mdk环境+开发板+jlink即可搞定,但对于mdk开发环境,大部分人并不能说清楚。对于一个工程的编译,链接,烧写,调试过程完完全全集成在一个软件里,一键即可实现,这当然方便开发,但我们想要了解的编译、链接规则,调试原理等,却一无所知,所以当MDK出现一些奇怪的BUG时无从下手,明明是软件问题我们却查找代码错误。本文介绍一种原始的stm32开发方式,在linux操作系统下,所有的编译,链接,调试工作都是由你自己去决定完成,包括makefile的编写,以后对于高级嵌入式开发有需求的开发者可以先用stm32这种易上手的系统试试水,了解这种linux下的嵌入式开发的一般流程,这样,以后不管遇到任何平台的任何芯片,都有一个大体开发思路可以遵循,不至于一头雾水。进入正题,直接开始操作吧。

    一.linux系统安装

        建议安装ubuntu虚拟机,教程百度。

    二.gcc-arm-none-eabi交叉编译器的安装

        对于交叉编译这一概念,很多人陌生,在windows下几乎没有这一概念(实际就是交叉编译),所谓交叉即为pc端编译好的工程拿去嵌入式端直接运行,因为嵌入式系统资源有限,没有能力自己编译自己的工程再运行,试想以下MDK不就是这样吗,实际上MDK也用类似的编译器,功能完全一样。ps:pc端编译pc端运行的程序叫做本机编译,例如vs,vc等工具。所以,让我们先在linux下安装交叉编译工具链吧。

        打开下载页面 https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads/5-2016-q3-update

    这是一个嵌入式交叉编译开发者项目团队的官网,如下有几个下载链接


    顾名思义,我们选linux下的download(Source为工具链的源码,需要经过编译后才能生成交叉编译工具链,捋一捋关系),而我们选择下载现成工具链,有兴趣的可以查阅相关资料自己编译Source生成工具链。

    下载到Windows上之后我们可以将其拷贝到linux下的/opt/gcc-arm-none-eabi/下(自建文件夹),解压。

    进入bin:       cd  /opt/gcc-arm-none-eabi/gcc-arm-none-eabi-5_4-2016q3/bin/

    可以看到我们已经安装的工具了。其中后缀为gcc的为C编译器,后缀为g++的为c++编译器,ld为链接器,gdb为debug等

    设置环境变量:export PATH=$PATH:/opt/gcc-arm-none-eabi/gcc-arm-none-eabi-5_4-2016q3/bin  

    这样你只需要以后键入gcc-arm然后按Tab键系统就会按照此路径寻找到bin下的各个工具,然后自动补齐为

    gcc-arm-none-eabi-

    到此我们的交叉编译工具链已经安装好(包括编译器和链接器)。

    三.openocd安装

       openecd是一个集成了stlink,ulink,jlink等多种协议的调试软件,相当于mdk的烧写和debug功能,因此不用问为什么,想要烧程序,必须安装。

    下载地址:https://sourceforge.net/projects/openocd/

    同样下载完成后拷贝至linux下,路径随意,我的是/opt/openocd/

    解压,进入openocd-0.10.0,cd  /opt/openocd/openocd-0.10.0/

    因为下载的是源码工程,所以要先后经过配置(主要配置调试器的类型),编译,安装流程

    配置之前安装两个包:sudo  apt-get  install  libusb++-dev  libusb-1.0.0-dev

    配置:  ./configure

    稍等片刻即可列出调试器,如果你想要的调试器处于关闭状态,比如我这里想要配置jlink,则重新配置加上参数:  

    ./configure --enable-jlink

    稍等片刻即可,如图:

    可以看到已经配置好了segger的jlink

    编译:   make

    安装:   make install

    至此调试器安装完成,默认安装路径是/usr/local/share下的openocd

    四.调试器的驱动安装(jlink)

    我使用的是jlink,所以介绍jlink的安装,其他调试器可以自行查找资料。

    下载jlink驱动的官网地址:http://www.segger.com/cms/jlink-software.html

    选择downloadJ-Link Software and Documentation pack for Linux, TGZ archive, 32-bit

    拷贝至linux下的/opt/jlink_driver/

    解压,进入文件夹后执行 cat README.txt查看安装说明,按照要求执行命令后重启系统。

    然后执行以下命令:

    cp libjlinkarm.so.* /usr/lib

    cp JLinkGDBServer* /usr/bin/

    cp JLinkExe /usr/bin/

    usermod -a -G plugdev <Username>

    至此jlink的驱动安装完毕。


    所有准备工作以完成,下一节开始应用实践。


    展开全文
  • [转]LinuxSTM32开发环境的搭建

    千次阅读 2017-05-03 15:55:07
    LinuxSTM32开发环境的搭建 目录 一、概述  1.目的  2、开发环境描述  3、Eclipse构建的STM32集成开发环境结构  4、GDB / GDB Server 调试模型 二、搭建步骤  三、详细的搭建过程  1、

    [转]原文地址: http://www.cnblogs.com/amanlikethis/p/3803736.html


    目录

    一、概述

      1.目的

      2、开发环境描述

      3、Eclipse构建的STM32集成开发环境结构

      4、GDB / GDB Server 调试模型

    二、搭建步骤 

    三、详细的搭建过程

      1、安装eclipse IDE for C/C++ developers

      2、安装交叉编译链arm-none-eabi-gcc 

      3、安装JLink驱动

      4、安装GNU ARM Eclipse插件包 

      5、新建一个LED_Test工程并配置、编译

    四、使用C/C++ GDB HardWare Debugging进行硬件调试

          1、安装GDB调试插件--C/C++ GDB HardWare Debugging

      2、设置Eclipse调试环境并调试

      3、 另一种调试的方法

    五、使用arm-none-eabi-gdb直接进行硬件调试

     

    一、概述

    1、目的

      MDK+Jlink的开发环境集编译、下载、调试为一体,配合上友好的操作界面,给用户者提供了很Happy的开发工具。但是,曾经玩过Linux系统的人总想尝试对开发环境的一次搬移,转战到Linux下看有什么事情发生。

      在Linux下,搭建STM32的开发环境是一种具有挑战性的任务,从中我们能学到如何创造一个集成开发环境,或者说我们知道集成开发环境的构成元素。不得不提出“Eclipse”绝对是一个好东西,它就像一个开发环境框架,在这个框架中我们添加STM32专用的编译器、调试工具,就构造出一个STM32集成开发环境。

      开源给电子行业工作者提供了一种向技术更深处进发的机遇,开源在技术垄断的商业模式中开辟了一块属于世界的自由的知识财富。

    2、开发环境描述

    硬件开发板:野火STM32开发板

    Cortex-M3型号:STM32F103VET6

    下载器与调试接口:Jlink + JTAG

    操作系统:虚拟机VMware6.5 + Ubuntu12.0.4

    集成开发环境平台:eclipse IDE for C/C++ developers

    交叉编译链:arm-none-eabi-gcc

    调试服务器:JLink GDB Server

    3、Eclipse构建的STM32集成开发环境结构

    4、GDB / GDB Server 调试模型

      The GNU Project Debugger (GDB) is a freely available debugger, distributed under the terms of the GPL. It connects to an em ulator via a TCP/IP connection. It can con-nect to every emulator for which a GDB Server software is available.

      GDB Server is a remote server for GDB. When you run GDB in the GDB source direc-tory, it will read a .gdb file. The GDB .gdb file contains default setting informationand additional monitor commands. GDB and GDB Server communicate via a TCP/IP connection, using the standard GDB remote serial protocol. The GDB Server trans-lates the GDB monitor commands into J-Link commands.

    二、搭建步骤

    1、安装eclipse IDE for C/C++ developers

    2、安装交叉编译链arm-none-eabi-gcc

    3、安装JLink驱动

    4、安装GNU ARM Eclipse插件包

    5、新建一个LED_Test工程并配置、编译

    6、安装GDB调试插件--C/C++ GDB HardWare Debugging

    7、设置Eclipse调试环境并调试

    说明:

      本文需要用到的Eclipse插件的下载地址不能确保读者从该网址上就能找到可用的资源,因为Eclipse的插件下载地址会经常更新,而且更改了下载地址。所以如果出现找不到资源的情况,需要读者自己从Google上搜索出当前Eclipse提供的可用的资源。

    三、详细的搭建过程

    1、安装eclipse IDE for C/C++ developers

      参考ubuntu安装eclipse IDE for C/C++ developers,安装到这一步就可以像VC6.0一样进行C/C++的开发,但是编译的代码只能在X86平台上运行,不支持ARM。

      为了能进行交叉编译,我们需要安装交叉编译链arm-none-eabi-gcc,但是次编译链不属于Eclipse的一部分,也不是Eclipse的可安装插件。Eclipse只是来调用交叉编译链,再调用之前还需要安装“GNU ARM Eclipse插件”,有了这个插件便可以调用arm-none-eabi-gcc来编译我们的源程序。倘若没有安装GNU ARM Eclipse插件,打开工程的属性,情况是这样的:

      仅仅安装了“eclipse IDE for C/C++ developers”,只能进行X86平台上的程序调试,却不能进行ARM平台的硬件调试。为了能进行硬件调试,我们需要安装交叉编译链arm-none-eabi-gcc中的工具arm-none-eabi-gdb,同样此工具不属于Eclipse的一部分,也不是Eclipse的可安装插件。Eclipse只是来调用此调试器,再调用之前还需要安装“GDB调试插件”,有了这个插件便可以调用arm-none-eabi-gdb来硬件调试我们的源程序。倘若没有安装“GDB调试插件”,打开“Debug Configurations”,情况是这样的:

      仅仅安装了“eclipse IDE for C/C++ developers”,是可以调用外部的硬件调试服务器--JLinkGDBServer,只是这个时候由于无法连接到GDB调试客户端而无法进行调试。

    2、安装交叉编译链arm-none-eabi-gcc

    1> 编译器下载,地址为https://launchpad.net/gcc-arm-embedded/+download

    2> 解压安装 tar  

    3> 修改/etc/profile

    4> 使/etc/profile的修改生效

    5> 测试

    #arm-none-eabi-gcc -v

      成功的界面如下

    3、安装JLink驱动

      Jlink驱动包含四个工具:JLinkExe、JLinkGDBServer、JLinkRemoteServer、JLinkSWOViewer。  

    1> 驱动下载,地址为 http://www.segger.com/jlink-software.html

    注意选择安装包:“Software and documentation pack for Linux V4.86a, DEB Installer 32-bit version”

    2> 利用dpkg -i命令进行安装,安装位置在/usr/bin目录下

    3> 测试版本

      首先将硬件Jlink连接在电脑上,再将Jlink从物理PC机转移映射到虚拟机下,输入测试命令

    #JLinkExe

      成功的界面如下

    4> 下载测试

    命令序列

    ① h   --停止程序的运行

    ②  exec device=STM32F103ZE   --选择芯片型号

      这里选择的是STM32F103ZE,而不是STM32F103VET6,原因是由于此版本的JLink驱动不支持STM32F103VET6,所以用一个与之接近的型号代替。

    ③ loadbin Led_Test.bin 0x8000000   --下载

    4、安装GNU ARM Eclipse插件包

      此插件包包含了6个插件,可以手动下载安装,不过这种方法只能安装其中的4个插件;如果采用自动下载安装则可以完整的安装所有的插件。

    方法一:手动下载安装

    1> 下载插件,地址:http://sourceforge.net/projects/gnuarmeclipse/files/Current%20Releases/2.x/

      插件名:ilg.gnuarmeclipse.repository-2.2.2-201404240550.zip

    2> 拷贝到Linux的某一目录下,假设为/source

    3> 安装该插件 

      打开Eclipse-->help-->Install New Software-->Add-->Archive-->选择该插件-->选中“√”-->一路Next-->等待

    方法二:自动下载安装

    The recommended way to install these plug-ins is to use the Eclipse standard install/update mechanism: In the Eclipse menu: Help → Install New Software…

    • in the Install window, click the Add… button (on future updates, just select the URL in theWork with: combo)
    • fill in Name: with GNU ARM Eclipse Plug-ins
    • fill in Location: with http://gnuarmeclipse.sourceforge.net/updates
    • click the OK button
    • normally the main window should list a group named CDT GNU Cross Development Tools; expand it
    • (in case the main window will list There are no categorized items, you are probably using a very old version; disable the Group items by category option)
    • select all the plug-ins (the one marked End of life is needed only for compatibility with previous version, normally can be safely skipped)
    • click the Next button and follow the usual installation procedure

    Once you define the update site URL, further updates are greatly simplified (Help → Check For Updates).                            摘自:Plug-ins install

    ☆ 测试

    测试一:Eclipse-->help-->Install New Software-->already installed查看已经安装的插件:

    测试二:此插件安装成功后,在新建C工程的时候,界面也发生了变化

    5、新建一个LED_Test工程并配置、编译

    1> 新建一个工程

      File-->Project-->C Project-->Project name-->Cross ARM GCC-->Tools chain path-->Finsh

      此时在工作目录下(笔者的为/root/workspace)就多了一个子目录LED_Test

    2> 将源码拷贝到该目录下

      把曾经在MDK做LED实验的源码拷贝到Linux系统中,放进/root/workspace/LED_Test目录下

    3> 添加源码到工程中

      在工程浏览器(Project Explorer)中,点击“F5”刷新,就可以添加所有的源码目录和其中的文件。

    4> 更改需要的文件

    ① 启动文件

      另外,注意将TureSTUDIO/startup_stm32f10x_hd.s 的后缀"s"改成大写的"S",原因是由于编译器对应S的文件会先进行预处理操作然后是汇编操作,而s的只进行汇编操作,详细原因参考gcc编译 .s文件和.S文件有什么区别

    ② 连接脚本

    ③ 其他文件与在MDK上的需要文件类似,把需要的文件保留,不需要的文件从工程中移除

    5> 开始配置工程

      在工程浏览器中选中工程,右键单击选择Properties,再选择C/C++ Build-->Settings,跳出如下界面

    6> 配置汇编器Cross ARM GNU Assembler

      主要是添加预处理宏

    7> 配置编译器Cross ARM C Compiler

    ① 添加预处理宏

    ② 添加头文件搜索目录

    • /root/workspace/LED_Test/STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/CMSIS/CM3/CoreSupport
    • /root/workspace/LED_Test/STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x
    • /root/workspace/LED_Test/STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/STM32F10x_StdPeriph_Driver/inc
    • /root/workspace/LED_Test/STM32F10x_StdPeriph_Lib_V3.5.0/Project/STM32F10x_StdPeriph_Template
    • /root/workspace/LED_Test/User

    8> 配置连接器 Cross ARM C Linker

      主要是选择连接脚本文件

    • /root/workspace/LED_Test/STM32F10x_StdPeriph_Lib_V3.5.0/Project/STM32F10x_StdPeriph_Template/TrueSTUDIO/STM3210E-EVAL/stm32_flash.ld

    9> 配置生成的镜像文件 Cross ARM GNU Creat Flash Image

      选择生成二进制的镜像文件

    10> 编译

      Project-> Build Project

      在/root/workspace/LED_Test/Debug目录中就可以看到生成的目标文件

    四、使用C/C++ GDB HardWare Debugging进行硬件调试

    1、安装GDB调试插件--C/C++ GDB HardWare Debugging

    1> 安装

      此种方法是Eclipse自动在用户提供的网络地址上进行搜索,然后下载安装,所以确保虚拟机能上网。

    2> 验证  

      成功以后,就可以在Run-->Debug Configurations中看到如下界面

      需要说明的是倘若Run菜单下没有找到“Debug Configurations”选项,那是由于之前工程处于编译环境,还没有切换到调试环境,只有切换到调试环境才能在Run菜单下找到该选项。切换方法是:

    2、设置Eclipse调试环境并调试

    1> 配置Eclipse调试选项

    ① Debugger

      Run-->Debug Configurations-->GDB Hardware Debugging -->Debugger

    ② Startup

      在Initialization Commands中输入检测参数

    复制代码
        monitor flash device = STM32F103ZE
        monitor flash download = 1
        monitor flash breakpoints = 1
        monitor clrbp
        monitor endian little
        monitor speed 5
        monitor reset
        monitor sleep 100
        monitor speed auto
        monitor writeu32 0xE000ED08 = 0x00000000
    复制代码

      再在Run Commands中输入命令

    monitor reg r13 = (0x00000000)
    monitor reg pc = (0x00000004)
    break ResetHandler
    break main
    continue

    2> 配置Eclipse调试选项

      Run-->External Toos-->External Toos Configurations-->New _configuration

    3> 调试

      Run -->Debug

    3、 另一种调试的方法

    1>  配置

      配置还是步骤7中的1>和2>

    2> 启动JLinkGDBServer

      在终端上启动JLinkGDBServer

    3> GDB调试

      Run -->Debug

      如果连接成功,此时在终端上打印出如下界面

    五、使用arm-none-eabi-gdb直接进行硬件调试

    1、安装Jlink驱动 

    2、安装交叉编译链arm-none-eabi-gcc

    3、编译工程以生成elf文件 

    4、在当前用户目录下创建.gdbinit文件

      笔者的当前用户是root,所以在root目录下创建.gdbinit初始化文件

    #gedit ~/.gdbinit 

      内容为:

    set auto-load safe-path /

    5、在工程文件夹下的Debug目录中创建.gdbinit文件

      在工程的Debug目录下创建.gdbinit文件,内容为:

    复制代码
    target remote :2331
    set mem inaccessible-by-default off
    monitor speed auto
    monitor endian little
    monitor reset
    monitor flash device = STM32F103ZE
    monitor flash breakpoints = 1
    monitor flash download = 1
    load
    monitor reg sp = (0x08000000)
    monitor reg pc = (0x08000004)
    break ResetHandler
    break main
    continue
    复制代码

      需要说明的是:由于当前版本的Jlink驱动不支持STM32F103VET6,所以选择STM32F103ZE来代替。

    6、启动JLinkGDBServer

      打开一个终端输入命令

    root@daneiqi:~# JLinkGDBServer

    7、启动调试

      再打开一个终端,在工程的Debug目录下输入命令:

    root@daneiqi:~/workspace/LED_Test/Debug# arm-none-eabi-gdb LED_Test.elf 

      调试界面如下

    本章参考资料: GNU ARM Eclipse (for STM32) 

              STM32 Discovery Development On Linux

     

    全文参考资料:  J-Link GDB Server User Guide - Segger

                      GNU ARM Eclipse (for STM32)

             linux下配置ARM开发环境笔记(STM32系列/Kinetis系列)

               ubuntu下安装stm32开发环境 秒杀keil和IAR

             Jlink 命令行 下载bin文件

             Eclipse配合GDB和jlinkGDBServer仿真调试STM32


    展开全文
  • Linux环境开发STM32,从环境到调试

    千次阅读 2015-02-14 11:39:36
    原本在windows下开发STM32,现在要改用在linux上开发。  首先简单地描述一下软硬件开发环境。 宿主机:  操作系统:CentOS7 x86_64 ( grome桌面版 )  IDE:Eclipse Luna  JLink驱动:JLink_Linux_V434a...
        最近因为某些原因,工作环境从windows向linux迁移了。原本在windows下开发STM32,现在要改用在linux上开发。
    
        首先简单地描述一下软硬件开发环境。

    宿主机:
        操作系统:CentOS7 x86_64 ( grome桌面版 )
        IDE:Eclipse Luna
        JLink驱动:JLink_Linux_V434a
        工具链:GNU-ARM-Toolchains-4.9-2014q4
        GDB:arm-linux-gdb V7.8.1

    硬件平台:
        CPU:STM32F103C8T6
        JLink:V8
        USB转串口:Silicon Labs CP2101

        环境的搭配都是比较简单的,编译工具链都比较容易装。这里就不再介绍了。下面就只附上工具链的下载链接。
        IDE环境Eclipse Luna,可以直接在官网上下载。还有CDT,也可以在Eclipse官网上下载。
        有一个比较重要的 GNU ARM Eclipse开发插件,附上个链接。
        还有一个Eclipse插件,用于GDB调试的,叫Zylin-embedded CDT。下载网址如下:
        另外,是JLink的驱动,当中包含GDBServer,我用的是V434a的版本,是买其它教学视频的时候附上的。Segger官网上好像已经找不到这个下载链接了,可以百度一下,也可以在Segger官网上下载其它版本的。(只要有正版JLink的其实啥版本都没问题,不过用D版的就要注意一下了,不建议用那么高的版本,不然会用不了)这里就不附链接了。
        最后还有Arm-linux-GDB,可以从下面的官网上下载。编译和安装只要按照README去做就ok了。非常简单。

        说了这么久的环境,一开始自己摸索的时候觉得配环境很麻烦,而且也装了很多不必要的东西,后来发现其实只要装上述的就够了,非常简单。希望能帮助大家少走点弯路。下面就用一个简单的示例程序来说一下怎么编译、下载、调试。在原来的windows环境中,我是用Keil uVision5进行开发的,也留了一些代码,所以就直接拿了个串口的发送程序作为这一次的示例,代码如下。

    /*=====================================
    Include headers
    =====================================*/
    #include "stm32f10x.h"
    
    
    /*=====================================
    Functions definition
    =====================================*/
    void UART_DefaultConfiguration( void );
    
    
    /*=====================================
    Implementation of functions
    =====================================*/
    
    /**
      * @brief  
     *	 Main program.
      * @parameter  
     *	 None
      * @returnvalue
     *	 None
      */
    int main(void)
    {
     UART_DefaultConfiguration();
     
      while(1)
      {
      if( USART_GetFlagStatus( USART1, USART_FLAG_TC ) == SET )
      {
       USART_SendData( USART1, 'A' );
      }
      }  
    }
    
    
    /**
      * @brief  
     *	 Initialize the UART with the default configuration.
      * @parameter  
     *	 None
      * @returnvalue
     *	 None
      */
    void UART_DefaultConfiguration( void )
    {
     GPIO_InitTypeDef GPIO_InitStruct;
     USART_InitTypeDef USART_InitStruct;
     
     
     /* Turn on the Clock for the UART and GPIO. */
     RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA
                | RCC_APB2Periph_AFIO
                | RCC_APB2Periph_USART1, ENABLE );
     
     
     /* Configure the UART1. */
     GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
     GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;	 /* TX */
     GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;
     GPIO_Init( GPIOA, &GPIO_InitStruct );
     
     GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;
     GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10;	 /* RX */
     GPIO_Init( GPIOA, &GPIO_InitStruct );
     
     USART_InitStruct.USART_BaudRate = 115200;
     USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
     USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
     USART_InitStruct.USART_Parity = USART_Parity_No;
     USART_InitStruct.USART_StopBits = USART_StopBits_1;
     USART_InitStruct.USART_WordLength = USART_WordLength_8b;
     USART_Init( USART1, &USART_InitStruct );
     
     USART_Cmd( USART1, ENABLE );
    }

       代码很短,也就八十来行。整个工程的结构如下:

        说明整个工程在windows下是能编译通过的。至于在开发板上的测试就不贴出来了,测试的结果就是在串口上可以看到不断地有字母‘A'输出。

        下面说一下整个工程怎么搬到Linux的开发平台上。
        首先,在Linux上打开Eclipse。新建一个C Project.如果环境搭建成功的话,可以看到有如下选项,在Executable中选择STM32F10x C/C++ Project,工具链就选Cross ARM GCC,填写好工程名字TestSTM32后点击下一步:

        由于我的CPU是STM32F103C8T6,所以Chip family是选STM32f10x Medium Density,Flash大小是64KB,RAM大小是20KB。可以根据自己的硬件实际情况进行填写。其它的可以按图配置。点击下一步:


        其实之后两页都可以按下一步,直到最后这一页,一定要选好工具链是GN Tools for ARM Embedded Processors ( arm-none-eabi-gcc ),并且填好工具链位置。最后点击完成。


       工程建立后,可以看到Eclipse已经将工程建好在Project Explorer中了。


        然后把工程中的src、system、include三个文件夹去掉,只剩下ldscripts文件夹。把我们示例程序的代码复制过来。如下图所示:


        其实为什么要把之前说的三个文件夹删去而不是直接在模板上把代码复制过去呢?其实直接在模板上添代码也行,模板用的也是3.5版本的固件库,但是要是以后固件库升级了或者不想用固件库呢?删去的目的就是为了可以让我们构建的工程更具有自由性。所以我选择直接把原来的工程代码复制过来。
        接下来是比较重要的一步,把启动文件startup_stm32f10x_md.s替换掉,从ST官网上下载的固件库包中,把STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/startup/gcc_ride7/startup_stm32f10x_md.s复制到工程中,并把启动文件的后缀s改为大写的S。如下图所示:

        要这样替换的原因是在windows中,所用的启动文件是针对Keil MDK这个IDE环境的,而现在我们要用GNU的工具链,所以应该要用回针对GNU启动文件。不然链接的时候会有问题。

        接下来就要开始配置一些东西了,右键工程打开属性。首先在C/C++ Build->Settings->Tool Settings标签中,找到Target Processor,在右边找到Instruction set,选择Thumb。找到Endianness,选择Little endian。如下图所示。

        然后,在Cross ARM GNU Assembler、Cross ARM C Compiler和Cross ARM C++ Compiler中的Preprocessor中定义两个宏:STM32F10X_MD和USE_STDPERIPH_DRIVER。其它的全部删去,这一个很重要,关系到后面的编译问题。一开始Eclipse会帮你定义好多宏,但都不需要,只留这两个就行了。


        然后,还是在Cross ARM GNU Assembler、Cross ARM C Compiler和Cross ARM C++ Compiler中的Includes修改为你包含有头文件的路径。如下图所示。


        接下来,是在Cross ARM C++ Linker和General中,把原本工程里的链接脚本路径补全。如下图所示:


        好了,这些设置好了之后,可以编译了吗?理论上是可以的,不过还有些代码要修改。这是由于固件库写的地方有些问题,参考文章如下:
        修改如下:
        在core_cm3.c中,找到uint32_t __STREXB(uint8_t value, uint8_t *addr)和uint32_t __STREXH(uint16_t value, uint16_t *addr)。把这两个函数中的"=r"改为"=&r",如下图所示:

        好,现在编译可以编译了。


        可以看到最后是编译成功了,而且对比于在Keil MDK里编译的文件大小,代码段所占的大小更小。这个编译效率还是令人满意的。
        编译了程序之后,怎么样才能下载到板子里并且进行调试呢?下面开始说明一下。

        在调试按钮旁边有个下拉箭头,点击箭头后点击Debug Configurations。然后双击Zylin Embedded debug( Native )。这样就会生成一个名称和工程名字相同的调试配置界面。如下图所示。


        在界面中点击Debugger标签。找到GDB debugger的文本框,通过浏览定位到上面提到要安装的arm-linux-gdb,然后点击应用。如下图所示。


        接着点击Commands标签。在'Initalize' commands里输入对JLink的初始化命令。点击应用。如下图所示。


        好了,问题就来了,这个初始化命令是怎么呢?究竟要怎么写呢?在这里我先给出我自己的初始化命令脚本。大家可以根据自己的实际情况进行修改。

    target remote localhost:2331
    monitor halt
    monitor interface JTAG
    monitor speed 1000
    monitor endian little
    monitor flash cpuclock = 72000000
    monitor flash device = STM32F103C8
    monitor flash download = 1
    monitor flash breakpoints = 1
    load Debug/TestSTM32.elf
    monitor reg r13 = (0x00000000)
    monitor reg pc = (0x00000004)

        这个脚本做了些什么呢?首先定义了gdb server的端口,接下来不断地往stm32和jlink下达命令:让stm32停机、设置使用JTAG接口,速度设置为1000kHz等等。最后下载程序并复位stm32。
        一开始的时候我也不知道要写怎么样的初始化脚本以及初始化命令。后来在Segger官网上找到了关于JLinkGDBServer的用户手册,其官网页面及下载地址如下:
       重点参考3.4 Debugging on Cortex-M Devices和3.5 Supported remote commands这两节,脚本模板和命令解析都在这里了。
       设置好了这个页面之后不要急着关掉,一会调试就从这个页面开始的。插上JLink,连接好硬件到PC里。现在要手动启动gdb server。在JLink的驱动包里面,有一个可执行文件叫JLinkGDBServer。通过命令行启动它(最好就直接用root用户启动)。如下图所示。如果你硬件已经连接好了,驱动什么的都连接好了之后,就会提示你找到了Cortex-M3的设备。这样就正常了。注意,在调试的过程中不能关闭JLinkGDBServer,就让它这样开着就ok了。不然会调试不了的。

        接下来,在刚才Eclipse的Debug Configurations页面里,点击Debug。开始调试。这样就会跳到Eclipse的调试视图里,并且调试停留在启动文件的第一行汇编指令里。这样就说明调试已经成功了,之后怎么样调试程序就和在eclipse里调试其它pc程序一样。这里就不多说了。


        好了,在Linux环境里开发STM32的整个流程就已经介绍完了。写这一篇文章的目的只是为了记录一下过程,方便日后忘了步骤的时候进行查看,也希望能够帮助其他想在linux环境下开发stm32的人少走些弯路。

    展开全文
  • LinuxSTM32 开发环境搭建

    千次阅读 2019-12-04 22:45:37
    安装编译器 如果还没安装编译器的,先安装: sudo apt install gcc-arm-none-eabi sudo apt install gdb-arm-none-eabi sudo apt install binutils-arm-none-eabi 安装 cmake 和 libusb ...sudo...

    安装编译器

    如果还没安装编译器的,先安装:

    sudo apt install gcc-arm-none-eabi
    sudo apt install gdb-arm-none-eabi
    sudo apt install binutils-arm-none-eabi
    

    安装 cmake 和 libusb

    • CMake(版本大于 v2.8.7)
    • Libusb 1.0(版本大于 v1.0.9)
    sudo apt update
    sudo apt install cmake
    sudo apt install libusb-1.0-0 libusb-1.0-0-dev libusb-1.0-0-dbg
    

    安装 stlink

    下载开源的 STLink 驱动代码

    git clone https://github.com/texane/stlink.git
    

    编译、安装

    cd stlink/
    make
    make install
    

    默认安装路径为 /usr/local/,可以根据需要指定安装路径,例如 make install DESTDIR=$HOME

    安装成功后,系统增加了如下几个工具:

    工具 功能
    st-flash 将二进制文件固化到 STM32 设备
    st-info 查询已连接 STLink 的 STM32 设备信息
    st-util 运行 GDB 服务与 STM32 设备进行交互
    stlink-gui STlink 图形化工具,如下所示

    在这里插入图片描述

    连接测试

    刚好我手上有一块 STM32 NUCLEO-F411R,下面我们将利用它来做个简单的实验。

    使用 USB 线连接开发板和电脑,执行 lsusb 可以看到已经识别到 ST-LINK/v2.1 设备。

    在这里插入图片描述

    执行 st-info --probe 查看 STLink 设备信息。

    在这里插入图片描述

    编译 bsp 工程

    前面我们已经下载好的 rt-thread-4.0.1 源码,进入 stm32f411-st-nucleo 的 BSP 目录,直接编译一下看看。

    cd /bsp/stm32/stm32f411-st-nucleo/
    source ~/.env/env.sh
    scons
    

    编译不了,原因是交叉编译工具没有配置好。打开 rtconfig.py 文件,找到对应编译器选项中的 EXEC_PATH 变量,将其修改为本地编译器所在的目录,我这里是 /usr/bin

    在这里插入图片描述

    执行 scons 构建工程,出现如下错误:

    ......
    /home/rudy/workspace_hd/Draft/RTTB/rt-thread-4.0.1/bsp/stm32/libraries/HAL_Drivers/drv_usart.c: In function 'rt_hw_usart_init':
    /home/rudy/workspace_hd/Draft/RTTB/rt-thread-4.0.1/bsp/stm32/libraries/HAL_Drivers/drv_usart.c:662:5: error: 'for' loop initial declarations are only allowed in C99 or C11 mode
         for (int i = 0; i < obj_num; i++)
         ^
    /home/rudy/workspace_hd/Draft/RTTB/rt-thread-4.0.1/bsp/stm32/libraries/HAL_Drivers/drv_usart.c:662:5: note: use option -std=c99, -std=gnu99, -std=c11 or -std=gnu11 to compile your code
    scons: *** [/home/rudy/workspace_hd/Draft/RTTB/rt-thread-4.0.1/bsp/stm32/libraries/HAL_Drivers/drv_usart.o] Error 1
    scons: building terminated because of errors.
    

    很明显,因为代码中变量定义的风格是 C99 以上标准才支持的,所以需要为编译器指定 C99 或 C11 模式。打开 rtconfig.py 文件,在对应编译器选项中的 CFLAGS 变量末尾添加 -std=c99 参数。

    在这里插入图片描述

    重新执行 scons 命令,稍等片刻出现 scons: done building targets. 提示,表示编译成功。可以看到当前目录下多了 rtthread.elf 和 rtthread.bin 两个二进制文件。

    下载测试

    打开 applications/main.c 文件,在 main 函数中添加一行打印:

    int main(void)
    {
        int count = 1;
        /* set LED0 pin mode to output */
        rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT);
    
    	rt_kprintf("\nI am running RT-Thread in STM32 NUCLEO-F411RE.\n\n");
    
        while (count++)
        {
            rt_pin_write(LED0_PIN, PIN_HIGH);
            rt_thread_mdelay(500);
            rt_pin_write(LED0_PIN, PIN_LOW);
            rt_thread_mdelay(500);
        }
    
        return RT_EOK;
    }
    

    重新构建工程

    在这里插入图片描述

    接下来执行 sudo st-flash write rtthread.bin 0x8000000,将 rtthread.bin 文件烧写到板子的 0x8000000 地址。

    在这里插入图片描述

    看来烧写成功了!

    minicom 连接虚拟串口

    我们还需要连接 STLink 虚拟串口,看看有没有打印出我们想要的信息。首先要确定设备节点,这里是 /dev/ttyACM0,然后执行如下命令进行设置:

    sudo minicom -s
    

    选择 “Serial port setup”,设置串口设备为 /dev/ttyACM0,波特率 115200。

    在这里插入图片描述

    选择 “Save setup as…” 将配置命名为 stlink,该配置文件保存在 /etc/minicom/minirc.stlink。

    在这里插入图片描述

    退出,重新输入 minicom stlink 命令,即可打开 ST-LINK 虚拟调试串口。

    在这里插入图片描述

    看到我们想要的信息啦!这也表明我们在 Linux 下搭建的 STM32 开发环境 OK 了!

    展开全文
  • STM32 开发环境 for Linux

    2020-07-30 23:30:14
    linux系统下的stm32开发环境的模板,主要内容来自一位大神的博客
  • LINUX环境在编译STM32并烧写代码

    千次阅读 2017-08-23 09:27:17
    因为最近在移植PixFlow的光流,需要在LINUX下编译32的代码并用JLINK烧写,当然光流代码部分现在还没研究懂。 首先我们需要下载好JLINK工具, 可以参考下面遮盖博客 ...
  • MDK+Jlink的开发环境集编译、下载、调试为一体,配合上... 在Linux下,搭建STM32的开发环境是一种具有挑战性的任务,从中我们能学到如何创造一个集成开发环境,或者说我们知道集成开发环境的构成元素。不得不提出...
  • linux搭建stm32开发环境

    千次阅读 2018-03-02 18:58:28
    下载stm32固件库 创建目录 libs目录放stm32固件库,src放用户源码,inc放用户头文件 # mkdir libs src inc 复制文件 将STM32F10x_StdPeriph_Lib_V3.5.0复制到libs目录下 创建Makefile.common 在主目录...
  • 1、安装Ubuntu 2、安装需要的软件 sudo apt-get install git sudo apt-get install 5.1 sudo apt-get install luarocks sudo luarocks install luafilesystem sudo luarocks install lpack ...
  • STM32是否可以跑linux

    万次阅读 2013-11-09 22:20:30
    操作系统有两种 用MMU的 和 不用MMU的 用MMU的是Windows MacOS Linux Android 不用MMU的是FreeRTOS VxWorks ucOS... CPU有两种 带MMU的 和 不带MMU的 ...带MMU的有 Cortex-A系列 ...STM32是M系列...不可能运行Linux
  • STM32能不能跑Linux

    万次阅读 2018-07-27 15:24:42
    操作系统有两种 用MMU的 和 不用MMU的 用MMU的是Windows MacOS Linux Android 不用MMU的是FreeRTOS VxWorks ucOS…CPU有两种 带MMU... 不带MMU的有 Cortex-M系列…STM32是M系列…不可能运行Linux… ucLinux不算Lin
  • Linux/Windows配置stm32免费开发环境详细流程

    万次阅读 多人点赞 2019-08-27 16:52:17
    stm32开发板:正点原子mini板(stm32f103rc) 烧写器:stlink v2 如果是JLINK的可以参考这篇 需要软件: 链接:https://pan.baidu.com/s/1nxgh1VF 密码:rvzu 2018/4/1更新系统:manjaro xfce 64bit stm32...
  • linux为主机,stm32为从机,实现以下:stm32为一个无线传输设备,最大256字节,将接收到的数据通过usb发送给linuxlinux将需要发送的信息通过usb发送给stm32。 (linux的usb-skeleton.c已经看过)有以下疑惑: 1....
  • 目前导航有初探Linux操作系统、STM32F103ZET6芯片、UCOS-III操作系统、Altium Designer四大块。 除此之外,博客内还有包括C/C++编程语言、Qt5、TCP/IP、笔试题面经等方面的博文,可以在左侧个人分类中查找到。   ...
  • PC系统:ubuntu-18.04一、软件清单VScode:https://code.visualstudio.com/Downloadarm-none-eabi-gcc:https://launchpad.net/gcc-arm-embedded/+downloadCortex-Debug: VSCode里面的插件,搜即可OpenOCD:sudo ...
  • 移植uClinux内核到stm32f407

    万次阅读 2017-03-20 15:57:56
    上一篇博文讲到了先移植基于stm32f407的u-boot,本文讲到的是最难的移植stm32f407的内核,这个内核源代码我也是在网上找到了,看介绍是国外大神所修改而成的,真的万分感谢这位大神可怜,所以也要看到网上的资源其实...
  • 作者:知乎用户 ...来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。   谢邀。...基于STM32的开发属于微控制器开发领域,主要开发工具是keil或IAR,这种开发更准确...
  • STM32Linux(转载)

    千次阅读 2014-04-06 01:02:34
    Linuxstm32 一个是软件平台一个是硬件平台,完全不一样的(记住,是平台!)。这样说吧,既然你喜欢单片机,就先学stm32,把硬件基础打牢,尤其是各种总线(usb、iic、spi...)、各种外设模块(红外、温湿、mpu...
  • 因为我在编译最新的Linux 4.5内核时,发现已经支持:stm32f429i-Discovery,并且编译成功并能生成uImage xipimage等!!因此,可以说,虽然没有MMU的STM32429i-Discovery,没有网络,依然可以把Linux系统简单的跑...
  • STM32遇到Linux = STM32MP1

    千次阅读 2019-05-17 02:13:36
    本文转自公众号:AI电堂STM32MP1系列是ST今年2月重磅推出的最新多核微处理器产品(MPU),集成两颗主频 650MHz 的 Arm®Cortex-A7 应用处理...
1 2 3 4 5 ... 20
收藏数 12,559
精华内容 5,023
关键字:

linux stm32