stm32启动文件ld md hd cl vl xl分析及选择
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
疑问一:为什么需要选择启动文件?
1.建立中断服务入口地址,即把中断向量与中断服务函数链接起来。
我们知道在串口NVIC配置中我们只定义了个 NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
也就是中断服务向量,再然后我们在stm32f10x_it.c文件的void USART2_IRQHandler(void){} 函数里添加串口的服务程序。
但是mcu怎么知道中断向量USART2_IRQn对应的是USART2_IRQHandler(){}呢,这个就是启动文件所起的作用。
在启动文件 .s 中 以 g_pfnVectors: 开头。
2.从systeminit()函数进入到main()函数.
对于stm32我们定义系统时钟的时候直接在system_stm3210x.c文件里修改宏定义即可,而事实上到底是从哪开始执行的呢?
system_stm3210x.c文件里有个SystemInit()函数,就是对时钟的设置。
而这个SystemInit()在哪调用的呢,就是启动文件先调用了,然后才进入到mian()函数。
在启动文件 .s 中有以下一段话可以解释。
/* Call
the clock system intitialization function.*/
bl SystemInit
/* Call static constructors */
bl __libc_init_array
/* Call the application's entry point.*/
bl main
bx lr
3.有些启动文件定义了堆栈大小,可以在这里进行修改。(有些是在 .ld 进行定义的)
疑问二:这些文件在哪里?
打开官方库文件,可以了解到STM32F10x_StdPeriph_lib/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/startup
下有4个文件夹arm gcc_ride7 iar TrueSTUDIO
到底选择哪个文件夹呢? 这与编译器有关,不同的编译器调用的指令集是不同的,所以需谨慎选择
arm适用于arm编译器 gcc_ride7适用基于GCC_ride7编译器的 iar就不用说了都清除 TrueSTDIO是ST自己的编译器当然也是基于GCC的用MDK于eclipse可以使用
(在eclipse下用的GCC插件的话,需要把后缀名 .s 改为 .S成大写,不然会编译出错)
疑问三:怎么选择101xx 102xx 103xx是小容量、中容量还是大容量?
可以这么认为:flash容量<=32k 选择 ld
64k<= <=128k 选择 md
256<= <=512k 选择 hd
那怎么区分MCU是多大的flash容量呢?
可以参考下表对于芯片命名说明:Flash memory size
6:32K 8:64K
B:128K C:256K
D:384K E:512K Flash memory size!
stm32启动文件ld md hd cl vl xl分析及选择的更多相关文章
- STM32启动文件
一.复位电路 在了解启动文件之前需要明白STM32的复位中断流程,STM32的复位分为上电复位和手动复位,复位的电路图如下所示: 注意: 图中的复位电路是低电平复位,有的MCU是高电平复位. 上电复位 ...
- (转)stm32启动文件详解
在<<STM32不完全手册里面>>,用的是STM32F103RBT6,所有的例程都采用了一个叫STM32F10x.s的启动文件,里面定义了STM32的堆栈大小以及各种中断的名字 ...
- STM32启动文件:startup_stm32f10x_hd.s等启动文件的简单描述
在官方的库文件中,分别有如下文件: startup │ │ │ ├─arm │ │ │ │ startup_stm32f10x_cl.s │ │ │ │ startup_stm32f10x_hd.s ...
- STM32启动文件的选择
移植了同事一个程序,然后死活不能用,发现启动文件错了,明天继续调.真把人折腾死了. stm32给的库文件太琐碎了,正如它的芯片型号一样繁多,例如启动文件: 网上查到的各个文件的解释是: startup ...
- 2.STM32启动文件
一.概念声明 中断向量:由硬件产生的中断标识码,一般用于存放中断服务程序的跳转指令.根据硬件产生的中断号查找中断向量表来确定对应的中断向量.CM3内核有15个异常 和240个中断源. 程序的内 ...
- STM32启动文件深度解析
STM32启动过程全面解析,包括启动过程的介绍.启动代码的陈列以及深入解析.相对于ARM上一代的主流ARM7/ARM9内核架构,新一代Cortex内核架构的启动方式有了比较大的变化.ARM7/ARM9 ...
- STM32启动文件详解
启动文件使用的 ARM 汇编指令汇总 启动程序源码注释(点此下载) 1. Stack—栈 Stack_Size EQU 0x00000400 AREA STACK, NOINIT, READWRITE ...
- STM32启动文件详细解析(V3.5.0) 以:startup_stm32f10x_hd.s为例
我用的是IAR,这个貌似是MDK的,不过很有用,大家可以看一下 ;* 文件名 : startup_stm32f10x_hd.s ;* 库版本 : V3.5.0 ;* 说明: 此文件为STM32F10x ...
- stm32启动文件 startup_stm32f10x_hd.s
;* 文件名 : startup_stm32f10x_hd.s;* 库版本 : V3.5.0;* 说明: 此文件为STM32F10x高密度 ...
随机推荐
- Docker 网络部分的简单学习以及转帖别人的blog
1. 感谢一下 大神: http://www.cnblogs.com/sparkdev/ 最近有时间的话 就会读一下他的博客.学习了解docker相关的知识 今天简单做了下 测试 在这里面记录一下. ...
- ItemsControl的两种数据绑定方式
最近在学习ItemsControl这个控件的时候,查看了MSDN上面的一个例子,并且自己做了一些修改,这里主要使用了两种方式来进行相应的数据绑定,一种是使用DataContext,另外一种是直接将一个 ...
- 研究VCL源码的原因和起点
---恢复内容开始--- 研究VCL源码的原因和起点 根本原因:当然是希望自己成为Delphi高手,因为这么多年过去,觉得自己始终不得要领,修改一个控件都无从下手,一直都只是个会拖控件的白痴.而我却拥 ...
- Jenkins之Linux和window配置区别
一.命令行配置 windows: java -jar .\libs\gen-html-report-1.0-SNAPSHOT.jar .\reports_%BUILD_NUMBER%.html .\t ...
- char类型的数值转换
在视频教程中,你已经认识到了数字类型之间.字符串和其他类型之间的转换.而某些时候,我们还需要将char类型转换为int类型,或者把int类型转换为char类型. 这篇文章,将介绍在代码中虽然不太常用, ...
- day12 max min zip 用法
max min ,查看最大值,最小值 基础玩法 l = [1,2,3,4,5] print(max(l)) print(min(l)) 高端玩法 默认字典的取值是key的比较 age_dic={'al ...
- MT【191】阿波罗尼乌斯圆
已知$f(x)=2\sqrt{(\cos x+\frac{1}{2})^2+\sin^2 x}-\sqrt{\cos^2 x+(\sin x-\frac{1}{2})^2}$,若$m\ge f(x)$ ...
- emwin之点击窗口的无效部分来实现一些功能
@2018-07-27 触摸屏幕窗口的无效部分实现 Dropdown 部件的折叠操作 > 具体代码 case WM_TOUCH: if (pMsg->Data.p) // Somethin ...
- python测试webservice接口
1.下载库:https://pypi.python.org/pypi/suds-jurko 2.解压后,进入到解压目录,安装库:python3 setup.py install 3.测试获取手机归属地 ...
- hdu3506 Monkey Party (区间dp+四边形不等式优化)
题意:给n堆石子,每次合并相邻两堆,花费是这两堆的石子个数之和(1和n相邻),求全部合并,最小总花费 若不要求相邻,可以贪心地合并最小的两堆.然而要求相邻就有反例 为了方便,我们可以把n个数再复制一遍 ...