搜档网
当前位置:搜档网 › STM32-IAR环境搭建

STM32-IAR环境搭建

STM32环境搭建入门

——STM32和IAR配置

艾睿电子物流(上海)有限公司北京办事处

修订历史记录

版本日期AMD 修订者说明

Li 创建1.0 2011年8月1日 Thomas

(A-添加,M-修改,D-删除)

目录

1. 序言 (1)

1.1 说明 (1)

1.2 熟悉STM32 (1)

1.3 平台选择 (1)

2. 准备工作 (1)

2.1 了解IAR for ARM (1)

2.2 了解Firmware (1)

2.3 了解ST-LINK (1)

3. 开始工作 (1)

3.1 创建文件目录 (2)

3.2 创建一个工程目录 (2)

3.3 添加Firmware相关文件 (4)

3.3.1 复制 (4)

3.3.2 增加 (7)

3.4 开始编译和调试 (8)

3.4.1 编译修改(Compile with Modify) (8)

3.4.2 调试修改(Debug and Modify) (13)

4. 完成总结 (16)

1. 序言

1.1 说明

本文逐步介绍了作者自身在STM32处理器和IAR编译环境的学习过程,并介绍了在该类环境下容易产生错误的地方,最后进行Firmware下的程序编写和ST-LINK的调试。

1.2 熟悉STM32

熟悉STM32的编程手法不同于以往的8位或16位单片机,STM32的编程大量使用Firmware,也就是固件。Firmware不需要或很少修改之后,可以随意的调用,即可以实现相关功能。Firmware的设计结构预示着它具有很好的通用型,而且熟悉之后调用非常的简单。

其最大的困难在于当初次接触Firmware时,可能有点晕,于是新人需要一段时间来熟悉如何使用Firmware,以及使用开发板进行下载调试。

1.3 平台选择

A、开发板、仿真器:STM32F103C8-PKT+ST-LINK;

B、开发环境:IAR Embedded Workbench for ARM, 32K Kick start Edition;

C、Firmware:STM32F10x_StdPeriph_Lib_V3.4.0

首先安装IAR Embedded Workbench for ARM, 32K Kick start Edition;

下载STM32F10x_StdPeriph_Lib_V3.4.0;

(所有的资源都可以到IAR和ST官网上下载,资源的获取也是很重要的,推荐网址https://www.sodocs.net/doc/7d4779939.html,‘国外’或者https://www.sodocs.net/doc/7d4779939.html,‘国内’)

2. 准备工作

2.1 了解IAR for ARM

IAR for ARM编译环境和很多其他的编译环境一样,IAR for ARM也分为创建项、添加文件、编译、连接、调试等相关流程。对IAR for ARM操作的重点在于对IAR环境的配置,将在后面详细介绍。(不像Keil编写51单片机一样,只需要配置out有hex输出既可)

2.2 了解Firmware

Firmware-STM32F10x_StdPeriph_Lib_V3.4.0只有对Firmware有整体性的认识之后,你才能使用它,不至于很模糊。以此初学者一定要对Firmware有一个整体性的认识。

2.3 了解ST-LINK

这里的ST-LINK是正宗的ST公司设计的,不是ST-LINKII,更不是III;

IAR for ARM中已经提供了对ST-LINK的支持,以此很容易就可以使用ST-LINK进行配置。

3. 开始工作

和很多教程一样,使用项目知道的方法,在实际的操作中来加深对该环境下的操作方法。

环境为:

9STM32F103C8-PKT+ST-LINK

9IAR Embedded Workbench for ARM, 32K Kick start Edition

9STM32F10x_StdPeriph_Lib_V3.4.0

3.1 创建文件目录

创建一个文件夹20101223,在下面在创建一个EWARM文件夹:20101223文件夹是你的整个项目的文件夹;

EWARM文件夹是项目中的放置工程文件夹;

3.2 创建一个工程目录

创建一个Workspace,一个Project,添加Add Group:

最后IAR for ARM中的结构如下:

其中

CMSIS:Cortex Microcontroller Software interface standard

StdPeriph_Driver:Standard Peripheral Driver

这是你的代码结构,主要是模仿Firmware中的Template,应该是最清晰的结构了。

文件组织结构如下:

只要按照以上的建立方式,既可以进入下一阶段。

3.3 添加Firmware相关文件

该过程主要是Copy(复制)和Add(增加)两个过程

3.3.1 复制

A、Copy Firmware下的整个Libraries文件夹到20101223文件夹下

B、 Copy Firmware中的

9main.c;

9stm32f10x_conf.h;

9stm32f10x_it.c;

9stm32f10x_it.h;

9system_stm32f10x.c;

如图:

到20101223文件夹下,如图:

C、 Copy 各类.ICF文件

9stm32f10x_flash.icf;

9stm32f10x_flash_extsram.icf;

9stm32f10x_nor.icf;

9stm32f10x_ram.icf;

如图:

到EWARM(即放置工程文件的文件夹下),如图:

至此,所有的拷贝工作都已经完成,进入Add调整阶段。

3.3.2 增加

以最简单的GPIO端口操作为目的,开始Add相关文件。

添加之后的结果为:

其中:

core_cm3.c是内核文件(没深入研究);

system_stm32f10x.c是系统相关文件(没深入研究);

misc.c是一个辅助文件;

stm32f10x_gpio.c是gpio的驱动文件;

stm32f10x_rcc.c是复位与时钟控制器驱动文件;

main.c是主程序的入口函数,是整个系统的一个主框架;

stm32f10x_it.c是系统的所有的中断函数文件;

至此,所有的Copy和Add操作都已经完成,接下来是修改(Modify)。

3.4 开始编译和调试

3.4.1 编译修改(Compile with Modify)

首先修改main.c

修改main.c使之成为一个按照你的想法完成任务的系统功能。

最简单的任务就是:让4个LED循环亮灭;

源代码如下:

/* Includes

--------------------------------------------*/

#i nclude "stm32f10x.h"

/* Private prototypes

--------------------------------------------*/

void RCC_Configuration(void);

void GPIO_Configuration(void);

typedef enum {

LED1 = 0,

LED2,

LED3,

LED4,

}LED_STATE;

LED_STATE led_status;

int main(void)

{

u32 cnt = 0x000fffff;

/* System Clocks Configuration */

RCC_Configuration();

/* Configure the GPIO ports */

GPIO_Configuration();

led_status = LED1;

while (1){

switch (led_status){

case LED1:

GPIOB->BSRR = 0x1000E000; /* turn on LD1 */

led_status = LED2;

break;

case LED2:

GPIOB->BSRR = 0x2000D000;/* turn on LD2 */

led_status = LED3;

break;

case LED3:

GPIOB->BSRR = 0x4000B000;/* turn on LD3 */

led_status = LED4;

break;

case LED4:

GPIOB->BSRR = 0x80007000;/* turn on LD4 */

led_status = LED1;

break;

}

while(cnt--);

cnt = 0x000fffff;

}

}

/**

* @brief Configures the different system clocks.

* @param None

* @retval : None

*/

void RCC_Configuration(void)

{

/* Setup the microcontroller system. Initialize the Embedded Flash Interface, initialize the PLL and update the SystemFrequency variable.

*/

SystemInit();

/* GPIOA clock enable */

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

}

/**

* @brief Configure the GPIOD Pins.

* @param None

* @retval : None

*/

void GPIO_Configuration(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

/* GPIOB configuration: PB12 PB13 PB14 PB15 as led controller */

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14| GPIO_Pin_15;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;

GPIO_Init(GPIOB, &GPIO_InitStructure);

}

Compile发现问题如下:

通过调整头文件路径解决:

右击Project——>option——>C/C++Compile——>Preprocessor——>:在Additional include directories中加入如下语句:

$PROJ_DIR$\..\

$PROJ_DIR$\..\Libraries\CMSIS\CM3\CoreSupport

$PROJ_DIR$\..\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x $PROJ_DIR$\..\Libraries\STM32F10x_StdPeriph_Driver\inc

如图:

Compile:您有可能会出现以下问题:

这是需要修改stm32f10x.h文件中的相关,因为你没有为你的芯片选择类型,点击错误,即打开了stm32f10x.h头文件,如图:

只需要选择您的期间类型就好,比如:

再Compile,这下错误出现的吓人,镇定发现,我们没有选择device type:

右击Project——>option——>General Options——>Target——>:

选择好正确的芯片类型,如图:

Compile,出现:

分析好像没有将一些头文件包括进来,依然修改stm32f10x.h(注意:所有设备相关的头文

件都是由stm32f10x.h控制的),找到如下图:

将其改成:

Compile:OK了。

至此,程序基本上没有问题,之后进行调试,测试功能相关。

3.4.2 调试修改(Debug and Modify)

选择调试工具:ST-LINK;

选择调试方式:arm或者flash;

选择烧写配置文件:stm32f10x_flash.icf;

我们暂时使用ST-LINK进行flash的调试,这样,调试结束后,程序已经烧写到芯片内部,可以成为一个真正的系统了。

至此所有的调试准备工作都已经就绪;

连接设备:包括ST-LINK和电源线:

点击,会出现如下结果:

你可以按F10、F11进行单步调试;

也可以按全速运行;

此时你可以看stack使用等相关情况,如图所示:

此时,拔掉电源,从新插上电源,即可以不用任何帮助,系统就会自动运行。

4. 完成总结

在配置编译环境和修改Firmware文件时,可能会出现意想不到的问题,由于其通用性,限制了其易用性,加上初次接触的人对整个结构的不清晰认识都是出现问题的原因。

出现问题时建议:自己摸索问题,上网搜寻问题,自己摸索尝试解决问题,这三个方法是最终得以成功的保障。

本内容可能只适合普通应用或只适合个人自身搭建环境,不能确保在其他环境下不会发生其他问题发生。

作者电话:010-********-23622 E-maile:Thomas.li@https://www.sodocs.net/doc/7d4779939.html,

相关主题