IAR for ARM
STM32F10X官方固件库:
链接: https://pan.baidu.com/s/1U6vfGqp9IhhkvVuDXcxTtQ
提取码: 9mcx
IAR for ARM项目文件
下面是我自己写整理创建的IAR for ARM项目文件
链接: https://pan.baidu.com/s/189WZVhEDhhO98BA3I2Jfeg
提取码: m5fu
启动文件及一些重要标准库的分析
启动文件
在按照网上的教程创建IAR的STM32项目时,网上的教程都要求在项目文件中放入启动文件startup_stm32f10x_xx.s,可我在编译时发现,即使把启动文件去掉,IAR还是可以正常编译并下载Hex到芯片中并调试,所以我猜测这个启动文件应该是由IAR自动集成到Hex中的,在IAR主界面,右键左边的项目名称 -> Options... -> General Options -> Target -> Device - > 选择ST STM32F103RC,IAR大概会根据你选择的不同的Device,写入不同的启动文件汇编代码。
2019-6-6更新
最新发现,官方库的启动文件虽然不能加断点,但却包含中断服务的声明,如果没有包含官方库的启动文件,中断服务将不会启用,所以最终我还是将startup_stm32f10x_hd.s文件加入到startup目录中,这样就可以写中断服务了
接下来解析的启动文件,在固件库的【/STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/startup/iar/】路径中
因为不能给启动文件加断点,以下解析都是基于自己的理解和网上相关教程的解析:
启动文件的引导地址可以自己定义,如果使用默认的配置,IAR在编译时,将会使用IAR自己的系统库作为引导
__iar_program_start 这个入口函数就是IAR内部提供的入口函数,这个函数不能加断点,似乎只能通过反汇编的形式来分析,我在IAR程序目录搜索了一边,真的有很多cstartup.s文件,IAR提供了很多系列芯片的cstartup.s文件
;******************** (C) COPYRIGHT 2011 STMicroelectronics ********************
;* 文件名: : startup_stm32f10x_md.s
;* 作者 : MCD Application Team
;* 版本 : V3.5.0
;* 日期 : 2011年3月11日
;* 描述 : STM32F10x是EWARM工具链中的中等容量像量表
;* : 这个模块执行了
;* : - 设置初始化SP(堆栈寄存器)
;* : - 配置时钟系统
;* : - 设置IAR程序的入口函数
;* : - 设置异常中断服务像量表的入口地址
;*
;* After Reset the Cortex-M3 processor is in Thread mode,
;* priority is Privileged, and the Stack is set to Main.
;********************************************************************************
;* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
;* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
;* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
;* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
;* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
;* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
;*******************************************************************************
;
; The modules in this file are included in the libraries, and may be replaced
; by any user-defined modules that define the PUBLIC symbol _program_start or
; a user defined start symbol.
; To override the cstartup defined in the library, simply add your modified
; version to the workbench project.
;
; The vector table is normally located at address 0.
; When debugging in RAM, it can be located in RAM, aligned to at least 2^6.
; The name "__vector_table" has special meaning for C-SPY:
; it is where the SP start value is found, and the NVIC vector
; table register (VTOR) is initialized to this address if != 0.
;
; Cortex-M version
;
MODULE ?cstartup ; // 定义模块名称
;; Forward declaration of sections.
SECTION CSTACK:DATA:NOROOT(3)
SECTION .intvec:CODE:NOROOT(2)
EXTERN __iar_program_start ; // IAR程序暴露的入口地址名称
EX