STM32开源开发环境的搭建

发布者:快乐的成长最新更新时间:2021-12-02 来源: eefocus关键字:STM32  开源  开发环境  搭建 手机看文章 扫描二维码
随时随地手机看文章

STM32开源开发环境的搭建

Eclipse+ GNU ARM Eclipse Plug-in+Sourcery G++ Lite Edition for ARM+OPENCD+Jlink的开源开发环境。


这个教程是去年刚开始做STM32的时候写的,当时还没开始用STM32,先琢磨了免费的开发环境搭建,因此写的这个教程可能有很多错误,最近在网上看到很多人在论坛里转载了这个教程,由于当初我在ourdev论坛上只是贴出了文字,并上传了一个pdf版本,因此这次在博客里更新一下。帖子中的内容暂时不更新了,后面会重新写一个教程,欢迎大家关注我的博客。


1.环境搭建

1.1 Eclipse的下载与安装

Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。由于eclipse只是一个IDE,因此需要借助其他插件以及软件来搭建完整的开发环境,也正是因为如此eclipse具有很大的灵活性。


因此首先下载安装eclipse,下载地址:

 http://www.eclipse.org/downloads/

下载页面如图1.1所示。

 http://www.oracle.com/technetwork/java/javase/downloads/index.html

如果觉得官网下载比较麻烦可以到这儿下载:

 http://www.skycn.com/soft/27213.html

java的下载界面如图1.2所示。

 http://sourceforge.net/projects/gnuarmeclipse/

下载界面如图1.3所示。

http://www.codesourcery.com/sgpp/lite/arm/portal/subscription?@template=lite

下载界面如图1.5所示。

clip_image009

图1.5 软件下载界面


通过下载界面可以可以知道Sourcery G++ Lite有4中版本,其中EABI是针对底层也就是不包含任何系统的开发的,我们就使用这个版本。Sourcery G++ Lite是采用安装包的方式,相对于以前用的Cygwin等在安装上很方便,只需点击下一步就可以,安装之后Eclipse能够自己找到,无需再手动加入环境变量。


这样一个基本的开发环境便搭建完成,针对STM32我们使用了ST公司的官方固件库,这样可以减少对底层硬件的关心,缩短开发周期,同时有利于程序的稳定性和规范性,因此我们在搭建的开发环境中对固件库进行编译,ST的固件库有很多版本,各版本之间有的差异也比较大,我们采用的是3.1版本,相对比较新,ST公司也不断有新的版本发布,下载地址:

http://www.st.com/stonline/products/support/micro/files

包含了固件库之后的开发界面如图1.6所示。

clip_image011

图1.6 完整的开发环境界面


2.工程配置

2.1 新建工程

使用配置好的开发环境新建一个工程,如图2.1所示。

clip_image013

图2.1 新建工程界面


新建一个工程,点击Finish之后会进入工程界面,如果环境配置正确,工程中会自动包含相关的文件,如图2.2所示。包含的文件应该为Sourcery G++ Lite的安装目录。

clip_image014

图2.2 新建工程之后的包含文件

接下来是准备相关的文件,为了更好的进行STM32开发,我使用ST提供的固件库,可以从网上下载,我现在用的是最新版本3.4,其他版本可能类似。


固件库的文件名为STM32F10x_StdPeriph_Lib_V3.4.0,首先把STM32F10x_StdPeriph_Lib_V3.4.0Libraries文件夹拷贝到刚刚建立的工程文件目录下。这是编译时候需要调用的固件库。


2.2链接与启动文件

接下来需要找出Linker所需的ld文件,由于在固件库中ST提供了一些编译器的工程模板,因此可以使用模板中的配置文件。TrueSTUDIO文件夹下存在几个文件夹。TrueSTUDIO是ST官方的编译器,也是GCC的,因此使用它模板中的配置文件。打开STM32F10x_StdPeriph_Lib_V3.4.0ProjectSTM32F10x_StdPeriph_TemplateTrueSTUDIO可以看到在在目录下有几个文件夹,因为我用的是STM32F103ZET6因此我选择STM3210E-EVAL文件下的stm32_flash.ld,通过记事本打开查看,部分内容摘录如下:

**  File        : stm32_flash.ld

**  Abstract    : Linker script for STM32F103ZE Device with

**                512KByte FLASH, 64KByte RAM

**                Set heap size, stack size and stack location according

**                to application requirements.

**                Set memory bank area and size if external memory is used.

猜测应该是我要找的,复制文件到工程根目录下。

接下来要找到工程的启动文件,和linker文件一样,打开目录如下:

workspaceGCCTESTLibrariesCMSISCM3DeviceSupportSTSTM32F10xstartupTrueSTUDIO

里面同样有很多文件,因为我用的是STM32F103ZET6所以我选择startup_stm32f10x_hd.S这个文件,猜测对应的就是STM32的大容量,这一点应该是一致的,注意要把扩展名改为大S,拷到startup目录下,把其他多余的都删掉。


2.3其他文件

在工程根目录下新建一个User的文件夹,拷贝一个例程到文件中,固件库中给了很多例程,我拷贝STM32F10x_StdPeriph_Lib_V3.4.0ProjectSTM32F10x_StdPeriph_ExamplesGPIOIOToggle这个例程,将IOToggle下面的所有文件拷贝到User文件夹下。这样所有的文件就准备好了。


2.4 配置工程

回到eclipse的界面,按F5键,可刷新当前的工作目录,这样刚刚添加的文件就会在项目窗口显示出来,如图2.3所示。

clip_image015

图2.3 文件添加完毕之后的项目窗口

这个时候如果直接去编译肯定出错,因此我们需要对工程进行设置,接下来设置工程,右键点击工程,选择“properties”菜单。点击C/C++ Build-Settings设置界面如图2.4所示

clip_image017

图2.4 设置界面

 

点击Target Processor选择All configurations 处理器选择cortex-m3,如图2.5所示。

clip_image019

图2.5 处理器选择

如图2.6所示,添加两条编译预定义STM32F10X_HD,USE_STDPERIPH_DRIVER。STM32F10X_HD和前面的链接与启动文件对应,表示是大容量期间(我猜测的)。USE_STDPERIPH_DRIVER表示使用固件。

clip_image021

图2.6 添加编译预定义


接下来添加文件包含路径,为了防止工程找不到对应的头文件需要把相应的路径添加进去,和上面添加的方法类似,点击添加按钮,在路径上选择workspace,依次将工程目录下有头文件的文件夹都给包含进去。如图2.7所示。

clip_image023

图2.7 添加文件包含路径

接下来添加链接文件,如图2.8所示,添加前面准备好的链接文件。

clip_image025

图2.8 添加链接文件

关键字:STM32  开源  开发环境  搭建 引用地址:STM32开源开发环境的搭建

上一篇:STM32 在16位数据宽度下的地址问题
下一篇:使用Keil MDK运行第一个STM32程序

推荐阅读最新更新时间:2024-11-07 22:12

stm32中的NVIC_Configuration(void)函数
用于映射中断的处理函数,就知道这么多,不求甚解呀, void NVIC_Configuration(void) { NVIC_InitTypeDef NVIC_InitStructure; #ifdef VECT_TAB_RAM /* Set the Vector Table base location at 0x20000000 */ NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); #else /* VECT_TAB_FLASH */ /* Set the Vector Table base location at 0x08000000 */ NVIC_SetVectorTable
[单片机]
STM32——C语言知识点:指针、结构体
1 /* 2 ============================================================================ 3 Name : Cyuyanfuxi.c 4 Author : 5 Version : 6 Copyright : Your copyright notice 7 Description : Hello World in C, Ansi-style 8 ============================================================================ 9 */ 10 11
[单片机]
<font color='red'>STM32</font>——C语言知识点:指针、结构体
stm32 嵌入式开发 中三重ADC交替模式采集数据总结
// ADC 宏定义 #ifndef __BSP_ADC_H #define __BSP_ADC_H #include stm32f4xx.h // ADC GPIO 宏定义 #define RHEOSTAT_ADC_GPIO_PORT GPIOC #define RHEOSTAT_ADC_GPIO_PIN GPIO_Pin_3 #define RHEOSTAT_ADC_GPIO_CLK RCC_AHB1Periph_GPIOC // ADC 序号宏定义 #define RHEOSTAT_ADC1 ADC1 #define RHEOSTAT_ADC1_CLK RCC_APB2Peri
[单片机]
<font color='red'>stm32</font> 嵌入式开发 中三重ADC交替模式采集数据总结
UBIFS文件系统搭建与配置(Micro2440 + linux 2.6.39)
1. UBIFS文件系统配置 a) 内核配置 2.6.27以后,ubifs被整合进内核树中,本文档所使用的2.6.39内核中已经包好UBIFS的相关代码,因此直接进行make menuconfig配置即可。 Device Drivers --- * Memory Technology Device (MTD) support --- * Enable UBI - Unsorted block images --- File systems --- Miscellaneous filesystems ---
[单片机]
UBIFS文件系统<font color='red'>搭建</font>与配置(Micro2440 + linux 2.6.39)
STM32开发 -- UART应用层通信协议分析
拿到一份UART的通信协议,上手来操作之前先做一下分析。 一、帧格式说明 先看一下它的帧格式说明: 1、 帧头标志Head 不论是命令帧还是响应帧,帧头标志都是0x92。 2、 协议版本 协议版本号(4bit),目前值为1 加密方式(4bit),0表示采取“数据不加密+校验和”方式。 所以,当前此字段完整值为0x10 3、 控制字段中的C/R比特 用于指示该帧是命令帧还是应答帧,1表示命令帧,0表示应答帧。 4、 控制字段中的T/F比特 用于指示传输数据类型,1表示透明的非结构化数据,0表示正常的数据帧。 5、 虚拟通道 虚拟地址(4bit):代表数据帧的源地址标识。目前为保留位,取值为0。 通道序号(4bit):0表示虚通道0
[单片机]
STM32 基础系列教程 12 – ADC 中断
前言 学习stm32 adc模数转换接口使用,学会用STM32对模拟信号时行采样,通过中断模式得到ADC结果。 示例详解 基于硬件平台: STM32F10C8T6最小系统板, MCU 的型号是 STM32F103c8t6, 使用stm32cubemx 工具自动产生的配置工程,使用KEIL5编译代码。 本示例所用的最小系统板原理图: 从本节开始,关于CUBEMX工具及KEIL工具的操作将不再细讲,如果还有不熟悉的可以查看之前的教程文档。下面直接介绍工程配置: 系统时钟树(ADC最大时钟不超过14M) ADC配置(轮询与中断模式不适用于多通道扫描模式,如果要多通道,需要用到DMA),开启连续转换模式!
[单片机]
<font color='red'>STM32</font> 基础系列教程 12 – ADC 中断
STM32中PWM频率捕获的相关配置
先大体说一下频率捕获 根据我个人的理解 频率捕获用到计数器 当发生定时器中断时(应该就是下图的Autoreload register记满时) 在2个相邻的定时器中断记录2个值 算捕获到的信号的差值 最后的频率就是你的定时器时钟 除以你的捕获的值 当然如果直接调用官方3.5库中的PWM_Input例程中的函数直接捕获 会发现在低于大约980Hz 测量的值会非常不准(STM32F103RBT6下) 这时候就需要使用TIM_TimeBaseInit()进行预分频 参数的配置在于PSC和ARR 下面贴图 两张Prescaler改变后的图 ARR决定的是Autoreload register的装值 上面2张图显示改变PSC后
[单片机]
STM32 学习九 通过USART实现printf重定向
把printf函数内容通过USART串口输出,可以方便调试STM32内部程序。示例代码如下: /******************************************************************************* * Function Name : fputc * Description : 重定向fput,以实现重定向printf * Return : int *******************************************************************************/ int fputc(int ch,FILE *
[单片机]

推荐帖子

无线通信发展趋势part1
我自己可做不来这么大的题目,只好找一份别人的大作与大家分享了。文件分两部分上传。无线通信发展趋势part1多谢斑竹,很好的一本书!无线通信的发展正在改变着我们的生活,只是读起来稍微费点劲--英文版的,呵呵,不过对学英文也有帮助啊Re:无线通信发展趋势part1
yh19782000 RF/无线
谁能详细介绍一下PocketStore啊?
网上好像找不到什么资料我就想知道这个PocketStore具体实现了什么功能?NandFlash驱动?FAT分区?谁能详细介绍一下PocketStore啊?顶一下!你已经领先了,我都没听过这玩意。引用2楼yashi的回复:你已经领先了,我都没听过这玩意。 不是吧yashi大哥?这个应该不是什么新鲜玩意儿吧?我在三星网站上找到一段话:SAMSUNGPocketStoreIIisoptimizedsoftwaresolutionforOneNANDf
goodxinna 嵌入式系统
赠送板子、显示屏、IC
毕业之后,板子都扔给实验室了,只是把当初的值得怀念的一些比赛用到的板子没送,还有一些拆件什么的。基本自己也没怎么用了,当然以下的只发顺丰到付,想普通快递的快递费就E币或者zhifubao给我吧。多少钱,当然也可以随你付,不低于快递费就好。当然,为了表哥的手电筒,我还是拼拼人品。MS430仿真器,大三的时候参加比赛买的。已经给色哥预订了。就发下当做出了。MSP430F149开发板,当初比赛的时候,入门的开发板,详情见某宝吧。有人要的就送了。周立功的板子。详见某宝吧。一
RCSN 淘e淘
如果使用LIS2MDL阵列来实现惯性引导AGV小车的磁定位是否可行?
最近想做个AGV小车,之前听说但没接触过,查了一些资料好像目前比较流行的是使用磁钉+惯性导航、激光和视觉这三种,和磁条和色带相比它们主要特点是方便维护,不用经常更换磁条和色带。激光导航需要弄激光雷达模块,和视觉一样技术门槛都比较高,综合考虑觉得磁钉+惯性导航难度好像较低一些,成本也不高可以弄着玩玩。查了很多三轴磁力计资料,综合考虑感觉LIS2MDL比较合适,LIS2MDL的测量范围是50gauss,16位输出,50gauss在磁阻传感器里算是
littleshrimp MEMS传感器
DSP外接ADC参考电压对精度的影响
28335的ADC可以采用内部的基准电压,也可以外接三种基准电压,我现在想用2.048V作为外部参考,那我进行信号还原的时候,是采用公式digitalvalue=4096*(inputanalogvoltage-ADCL0)/2.048吗,看TI的手册没有说明这一点,另外采用外部基准对提高AD精度有多大帮助?现在这谢过各位了~DSP外接ADC参考电压对精度的影响
gushi123 微控制器 MCU
74HC5731
74HC5731的PDF,希望对大家有用。74HC5731
jiaosheng1981 嵌入式系统
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved