在IAR(EWARM)中移植STM32固件库

一、移植环境说明

(1)、win10系统

(2)、IAR(EWARM)7.7

(3)、STM32标准固件库3.5.0 http://www.st.com/content/st_com/en/products/embedded-software/mcus-embedded-software/stm32-embedded-software/stm32-standard-peripheral-libraries/stsw-stm32054.html

二、移植步骤

  (1)、首先建立一个C语言的main工程(或空工程),如下图所示:

  (2)、复制STM32固件库到工程目录下,并将固件库文件添加到工程中,添加完文件后的工程目录如下所示:

其中startup文件夹中的汇编文件要根据所使用的器件来选择,Flash<=32K为小容量,64K<=Flash<=128K为中容量,Flash>=256为大容量:

startup_stm32f10x_cl.s 互联型的器件,STM32F105xx,STM32F107xx
startup_stm32f10x_hd.s 大容量的STM32F101xx,STM32F102xx,STM32F103xx
startup_stm32f10x_hd_vl.s 大容量的STM32F100xx
startup_stm32f10x_ld.s 小容量的STM32F101xx,STM32F102xx,STM32F103xx
startup_stm32f10x_ld_vl.s 小容量的STM32F100xx
startup_stm32f10x_md.s 中容量的STM32F101xx,STM32F102xx,STM32F103xx
startup_stm32f10x_md_vl.s 中容量的STM32F100xx
startup_stm32f10x_xl.s FLASH在512K到1024K字节的STM32F101xx,STM32F102xx,STM32F103xx

(3)、添加头文件的包含:

这个时候编译会报错:Fatal Error[Pe035]: #error directive: "Please select first the target STM32F10x device used in your application (in stm32f10x.h file)" E:\project\IARProject\BaseVersion\Libraries\CMSIS\DeviceSupport\stm32f10x.h 96

在stm32f10x.h中把#define STM32F10X_MD和#define USE_STDPERIPH_DRIVER两个宏打开再次编译。

这个时候报错:Error[Pe147]: declaration is incompatible with "__nounwind __interwork __softfp unsigned long __get_PSP(void)" (declared at line 58 of "D:\Program Files (x86)\IAR Systems\Embedded  E:\project\IARProject\BaseVersion\Libraries\CMSIS\CoreSupport\core_cm3.h 1084 等一系列错误,这是由于core_cm3.h头文件导致的,需要把固件库中的core_cm3.h去掉(删除或改名),用IAR自带的core_cm3.h文件。并在工程选项的库配置处选择使用CMSIS,如下图:

(4)、从标准模板工程中拷贝stm32f10x_conf.h到工程根目录下,并把根目录条件到头文件搜索路径中,再次编译即可通过;但是会出现警告信息:

Warning[25]: Label ‘Reset_Handler‘ is defined pubweak in a section implicitly declared root E:\project\IARProject\BaseVersion\Libraries\CMSIS\DeviceSupport\startup\startup_stm32f10x_md.s 124 等一系列警告。

需要将startup_stm32f10x_md.s文件中的SECTION.text:CODE:REORDER(1)改为SECTION .text:CODE:REORDER:NOROOT(1)。

详情如下:

7.1版本之前,section默认是noroot,但现在是root。所以可以将SECTION .text:CODE:REORDER(1)改成SECTION .text:CODE:REORDER:NOROOT(1)或SECTION .text:CODE:REORDER:ROOT(1)。注意 NOROOT和 ROOT 的区别,NOROOT表示如果符号没有被关联的时候是被优化掉的,如果想不被优化则使用ROOT。

至此STM32固件库在IAR上的移植已经完成。

时间: 2024-12-25 01:43:55

在IAR(EWARM)中移植STM32固件库的相关文章

STM32固件库详解

本文转自http://www.cnblogs.com/emouse/archive/2011/11/29/2268441.html 1.1 基于标准外设库的软件开发 1.1.1 STM32标准外设库概述 STM32标准外设库之前的版本也称固件函数库或简称固件库,是一个固件函数包,它由程序.数据结构和宏组成,包括了微控制器所有外设的性能特征.该函数库还包括每一个外设的驱动描述和应用实例,为开发者访问底层硬件提供了一个中间API,通过使用固件函数库,无需深入掌握底层硬件细节,开发者就可以轻松应用每一

第9章 初识STM32固件库—零死角玩转STM32-F429系列

第9章 ????初识STM32固件库 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/firege ? 本章参考资料:<STM32F4xx参考手册>.<STM32F4xx规格书>.<Cortex-M3权威指南>, STM32标准库帮助文档:<stm32f4xx_dsp_stdperiph_lib_um.chm>. 在上一章中,我们构建了几个控制GPIO外

第9章 初识STM32固件库

第9章     初识STM32固件库 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/firege 本章参考资料:<STM32F4xx参考手册>.<STM32F4xx规格书>.<Cortex-M3权威指南>, STM32标准库帮助文档:<stm32f4xx_dsp_stdperiph_lib_um.chm>. 在上一章中,我们构建了几个控制GPIO外设的

STM32 固件库与 CMSIS 标准如何理解?

一: STM32 固件库就是函数的集合,那么对这些函数有什么要求呢??这里就涉及到一个 CMSIS 标准的基础知识,这部分知识可以从<Cortex-M3 权威指南>中了解到,我们这里只是对权威指南的讲解做个概括性的介绍.经常有人问到 STM32 和 ARM 以及 ARM7是什么关系这样的问题,其实 ARM 是一个做芯片标准的公司,它负责的是芯片内核的架构设计,而 TI,ST 这样的公司,他们并不做标准,他们是芯片公司,他们是根据 ARM 公司提供的芯片内核标准设计自己的芯片.所以,任何一个做

STM32固件库3.5+uCOS2.86移植(转自暴走的工程师)

考了很多移植的资料和代码,终于移植好了...应该是完美移植吧~~哈哈哈~~ 编译环境是IAR 工程适用于STM32F10X大容量产品,如果不是,请自行修改启动文件和工程配置 编译器优化等级最高...这个你们根据需要自己调整吧... ############################################################################### 1.Jean J.Labrosse与μCOS—II μCOS—II是一个实时可剥夺型操作系统内核,该操作系统

从STM32固件库开始

STM32与一般单片机/ARM7最大的不同,则是它的寄存器特别多,而使用者又很难全部记下,因此,ST官方则根据规范提供了一套库函数源码,通过直接操作库函数达到对寄存器操作的目的. 固件库就是函数的集合,固件库函数的作用是向下负责与寄存器直接打交道,向上提供用户函数调用的接口(API). 在以前的51单片机开发中,我们常常直接对寄存器进行操作,如控制I/O口状态: P0 = 0x11: 而在STM32开发中,同样对寄存器操作: GPIOx->BRR = 0x0011; 控制BRR寄存器实现电平的控

STM32固件库命名规则

1.系统文件名和源文件名以' stm32f10x_'的形式表示. 2.在单一文件中使用的常量在该文件中定义.在多个文件中使用的常量定义在头文件中.所有常量都以大写字母表示. 3.寄存器当做常量看待,同样以大写字母表示,多数情况下,在STM3210X参考手册中使用相同的缩写. 4.外围模块的功能函数的名字,需要有相应的外围模块缩写加下划线这样的前缀,每个单词的首字符要大写.例如SPI_SendData,在一个函数名中,只允许有一条下划线,用来区分外围模块缩写和剩下的函数名. 5.使用X_InitT

Duanxx的STM32学习: STM32固件库命名规则

STM32 寄存器库和固件库

寄存器和固件库开发的差别和联系 固件库就是函数的集合,固件库函数的作用是向下负责与寄存器直接打交道.向上提供用户函数调用的接口(API). 在 51 的开发中我们经常的作法是直接操作寄存器,比方要控制某些 IO 口的状态,我们直 接操作寄存器: P0=0x11; 而在 STM32 的开发中,我们相同能够操作寄存器: GPIOx->BRR = 0x0011; 这样的方法当然能够,可是这样的方法的劣势是你须要去掌握每一个寄存器的使用方法.你才干正确使用 STM32,而对于 STM32 这样的级别的