历史上的今天
返回首页

历史上的今天

今天是:2025年03月09日(星期日)

正在发生

2019年03月09日 | STM32启动文件选择的区别

2019-03-09 来源:eefocus

说的直白点就是以下区别,在选择启动文件的时候有选择性区别!


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是小容量、中容量还是大容量?


查user manual手册,以下为摘录


 


 




 


可以这么认为: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!

推荐阅读

史海拾趣

EDO Corp公司的发展小趣事

在1930年代,Eclipse Magnetics这个名字首次出现,标志着品牌的诞生。当时,该公司主要从事磁性产品的研究和开发。进入1940年代,Eclipse Magnetics逐渐崭露头角,成为一个独立的公司。在电子行业的早期,该公司凭借其独特的磁性技术,开始在市场中占据一席之地。

EMC [ELAN Microelectronics Corp]公司的发展小趣事

为了进一步扩大市场份额,义隆电子积极实施国际化战略。公司在台湾新竹科学园区设立了全球营运总部,并在亚、美等二大洲建立了密集的行销暨技术中心。通过不断拓展国际市场,义隆电子的产品已经销售到全球各地,赢得了广泛的客户认可和信赖。同时,公司还积极寻求与国际知名企业的合作机会,共同推动行业技术的发展和创新。

上海国芯(Gcore)公司的发展小趣事
使用示波器或逻辑分析仪测试555定时器的输出波形和频率是否正常。
EDAL公司的发展小趣事

EDAL公司成立于XXXX年,由一群富有远见和创新精神的电子工程师创立。公司初期专注于电子设计自动化(EDA)工具的研发,致力于提升集成电路设计的效率和质量。EDAL公司凭借其独特的算法和高效的设计工具,在EDA领域崭露头角,吸引了众多客户的关注。

兵字(BingZi)公司的发展小趣事

兵字公司的创始人李元兵,在经历了多年的研究所工作后,怀揣着对电子元器件领域的深厚情感与独到见解,决定投身创业。他深知,在电子行业这个日新月异的领域,唯有掌握核心技术,才能在激烈的市场竞争中立足。于是,兵字公司从成立之初,就致力于电源变压器和触发变压器的研发与生产,凭借过硬的技术实力和优质的产品质量,迅速在市场中站稳了脚跟。

中科银河芯(GXCAS)公司的发展小趣事
电源电压决定了输出信号的高电平值。

问答坊 | AI 解惑

FPGA的一些资料2

希望大家能用上…

查看全部问答>

摇摇棒创新设计(32颗灯)

我的摇摇棒精简设计,采用8个IO口来驱动32颗灯,效果很好。 有兴趣的朋友到我空间一游哈!地址:http://hi.baidu.com/fcping/要制作资料的在我空间留下Email 我会发给他!好就赞一个,不好也批一下,给点意见,谢谢! 下面有原理图和效果图:…

查看全部问答>

由于组态不一致而无法创建系统数据

我在s7 300下组态一个网络,CPU是3152DP.PROFIBUS网上挂了一个ET200M模块。我保存编译的时候提示由于组态不一致而无法创建系统数据。我想问一下我是不是没有给ET200M组态。ET200下没有放任何模块。如果不是哪什么原因了????…

查看全部问答>

找嵌入式板卡

我在找嵌入式板卡,要拍图象,所以内存要大,1G左右,装linux的OS,谁用过啊。…

查看全部问答>

Wince下label和button透明问题?

我在FORM上自己用ONPAINT函数绘制了一个背景图片,图片上有“关闭”“打开”之类的字样,我想把我的BUTTON做成透明的,直接显示背景图片上的字,LABEL上的字也直接显示在背景图片上,我试过了this.label1.BackColor =Color.Transparent; 之类的方法 ...…

查看全部问答>

各位大侠,有知道目前WINCE5.0,如何支持播放RM格式的视频吗?

各位大侠,有知道目前WINCE5.0,如何支持播放RM格式的视频吗? …

查看全部问答>

借手机设计思想,便携式医疗电子将科幻场景搬进生活

随着科技的进步和人们对于医疗保健的意识不断增强,全球医疗电子特别是中国这一巨大市场正爆发出诱人的发展前景,不少领先半导体厂商正积极将其纳入重点关注的领域。市场调研公司Databeans指出,2005年用于医疗电子的半导体市场超过20亿美元,预计 ...…

查看全部问答>

帮您快速入门 TI 的 Codec Engine

德州仪器(TI)的第一颗达芬奇(DaVinci)芯片(处理器)DM6446 已经问世快三年了。继DM644x 之后,TI 又陆续推出了DM643x,DM35x,DM6467,OMAP353x等一系列ARM+DSP 或ARM+视频协处理器的多媒体处理器平台。很多有很强DSP开发经验或ARM 开发经验 ...…

查看全部问答>

flip

为什么我打开flip3.4.5.106的时候会出现an error with error 2 occured…

查看全部问答>

ccsv5,link problem

 将ccs3项目导入ccs5后,build产生如下错误: **** Build of configuration Debug for project CODEC ****C:\\ti\\ccsv5\\utils\\bin\\gmake -k all gmake: Nothing to be done for `all\'.**** Build Finished **** 请教,这是什么 ...…

查看全部问答>