历史上的今天
返回首页

历史上的今天

今天是:2025年02月06日(星期四)

正在发生

2020年02月06日 | 基于STM32单片机启动文件的作用和启动过程解析

2020-02-06 来源:eefocus

一、启动文件的作用是:

1.初始化堆栈指针SP;

2.初始化程序计数器指针PC;

3.设置堆、栈的大小;

4.设置异常向量表的入口地址;

5.配置外部SRAM作为数据存储器(这个由用户配置,一般的开发板可没

有外部SRAM);

6.设置C库的分支入口__main(最终用来调用main函数);

7.在3.5版的启动文件还调用了在system_stm32f10x.c文件中的


SystemInit()函数配置系统时钟,在旧版本的工程中要用户进入

main函数自己调用SystemInit()函数。


至此可以总结一下STM32的启动文件和启动过程。首先对栈和堆的大小进行定义,并在代码区的起始处建立中断向量表,其第一个表项是栈顶地址,第二个表项是复位中断服务入口地址。然后在复位中断服务程序中跳转??C/C++标准实时库的__main函数,完成用户堆栈等的初始化后,跳转.c文件中的main函数开始执行C程序。假设STM32被设置为从内部FLASH启动(这也是最常见的一种情况),中断向量表起始地位为0x8000000,则栈顶地址存放于0x8000000处,而复位中断服务入口地址存放于0x8000004处。当STM32遇到复位信号后,则从0x80000004处取出复位中断服务入口地址,继而执行复位中断服务程序,然后跳转__main函数,最后进入main函数,来到C的世界。


二、bootloader文件的作用。

1、可以参考《嵌入式系统bootloader技术内幕》

链接:http://blog.csdn.net/phunxm/article/details/6897541

bootloader 分为boot 和loader,更多的时候是针对于linux系统,windows系统里的bios也是这个功能。就是boot 的功能是初始化堆栈、中断向量表等参数,loader就是跳转到main函数里,加载用户程序。从这个层面来理解的话,其实STM32的启动文件就相当于是一个bootloader程序。


2、在做STM32在线升级的时候,常常可以听到要自己写一个bootloader程序。这个就很容易造成误解,比如,升级的时候要写bootloader程序,那不升级的时候,bootloader难道就不需要了吗?如果需要是在哪一个文件中,完成这个功能的呢?


其实,在IAP的时候,我们写的只是相当于一个跳转并下载的功能的程序,这个程序实现的就是IAP的功能,或者说是软的IAP功能。这个不是bootloader。在iap程序里,我们是用C语言实现的,也只是一个main函数,里面可能会根据需要有定时器、串口、led驱动等功能。但是真正开始执行这个main函数,还是由启动文件完成,也就是bootloader完成。


三、51单片机为什么没听说bootloader

基于STM32单片机启动文件的作用和启动过程解析

四、STM32的启动方式

基于STM32单片机启动文件的作用和启动过程解析

STM32的启动选择,通过设置BOOT1、BOOT0的引脚的高低电平即可选择。


其中主闪存启动是将程序下载到内置的Flash进行启动(该flash可运行程序),该程序可以掉电保存,下次开机可自动启动;

系统存储器启动是将程序写入到一快特定的区域,一般由厂家直接写入,不能被随意更改或擦除。Boot0设置为1,Boot1设置为0,代码将从ROM区启动,这上电启动都会运行Bootloader,在此过程中可以实现IAP程序更新,这一般是通过USART 进行更新,此时如果USART或者是SPI端口没有接收到数据信号,那么MCU将会一直程序等待下去,不会自动跳到FLash主代码区。所以一般这作为个体产品想实现代码更新的工作。这需要你那边是否要考虑以后产品升级,如若升级,可以在Boot0引脚接入一个拔码开关实现对Boot0电平的控制,从而可以实现 IAP更新功能。


内置SRAM启动,由于SRAM掉电丢失,不能保存程序,一般只用于程序的调试。


五、STM32启动过程

基于STM32单片机启动文件的作用和启动过程解析

STM32的内部闪存(FLASH)地址起始于0x08000000,一般情况下,程序文件就从此地

址开始写入。此外STM32是基于Cortex-M3内核的微控制器,其内部通过一张“中断向量表”来响应中断,程序启动后,将首先从“中断向量表”取出复位中断向量执行复位中断程序完成启动,而这张“中断向量表”的起始地址是0x08000004(0x8003000的程序中,中断向量表的地址是0x8003000),当中断来临,STM32的内部硬件机制亦会自动将PC指针定位到“中断向量表”处,并根据中断源取出对应的中断向量执行中断服务程序。


在图53.1.1中,STM32在复位后,先从0X08000004地址取出复位中断向量的地址,并跳转到复位中断服务程序,如图标号①所示;在复位中断服务程序执行完之后,会跳转到我们的main函数,如图标号②所示;而我们的main函数一般都是一个死循环,在main函数执行过程中,如果收到中断请求(发生重中断),此时STM32强制将PC指针指回中断向量表处,如图标号③所示;然后,根据中断源进入相应的中断服务程序,如图标号④所示;在执行完中断服务程序以后,程序再次返回main函数执行,如图标号⑤所示。

推荐阅读

史海拾趣

GHz Technology ( Microsemi )公司的发展小趣事

对于5G169节日彩灯集成电路,网友可能提出多种问题,以下是一些常见问题及其详细回答:

1. 5G169节日彩灯集成电路的基本工作原理是什么?

回答
5G169节日彩灯集成电路通过交流电输入,经过VDI~VD4桥式整流输出全波脉动直流电,供四路彩灯用电。该电路还包含简单的稳压电路(由Rl、R2、VD5和VD6组成),经过Cl滤波后输出约6V直流电供集成块用电。VD6在这里起隔离作用,使得R2两端能获得6V全波脉动直流电压,其脉动频率为交流电的2倍(即100Hz)。此100Hz信号经R4注入集成块的8脚作为同步信号。电路中还包含正、反向控制开关SB,用于控制彩灯的正向或反向循环。

2. 如何调节5G169节日彩灯的亮灯周期?

回答
5G169节日彩灯的亮灯周期是可调的,但具体调节方式可能因不同型号的集成电路或电路设计而异。通常,亮灯周期的调节可能涉及改变与集成电路相关的电阻、电容或其他元件的值。然而,对于5G169这样的具体型号,如果没有详细的电路设计图或说明书,很难给出确切的调节步骤。一般情况下,可以通过查阅产品手册或联系制造商获取具体的调节方法。

3. 5G169节日彩灯集成电路是否需要外接电源?

回答
是的,5G169节日彩灯集成电路需要外接电源来提供工作所需的电能。通常,这种集成电路会设计为能够接受家庭常用的交流电源(如220V或110V,具体取决于所在地区的电压标准),并通过内部的整流和稳压电路转换为集成电路和彩灯所需的直流电压。

4. 5G169节日彩灯集成电路在使用过程中需要注意哪些事项?

回答
在使用5G169节日彩灯集成电路时,需要注意以下事项:

  • 确保电源电压与集成电路的额定电压相匹配,避免过电压或过电流导致的损坏。
  • 遵循产品手册中的安装和接线指导,确保电路连接正确无误。
  • 注意电路的散热问题,避免长时间在高温环境下使用导致集成电路过热。
  • 定期检查电路连接和元件状态,及时发现并处理可能的问题。
  • 避免在潮湿或腐蚀性环境中使用,以防电路受潮或腐蚀。

5. 5G169节日彩灯集成电路有哪些常见故障及解决方法?

回答
5G169节日彩灯集成电路的常见故障可能包括灯不亮、亮度不均、闪烁异常等。针对这些故障,可以尝试以下解决方法:

  • 检查电源电压是否正常,确保电路得到足够的电能供应。
  • 检查电路连接是否牢固可靠,无短路或断路现象。
  • 检查集成电路的引脚是否接触良好,无虚焊或断裂现象。
  • 如果集成电路损坏,需要更换新的集成电路。
  • 对于亮度不均或闪烁异常的问题,可以尝试调整与集成电路相关的电阻、电容等元件的值,或者检查彩灯本身是否存在问题。

请注意,以上回答基于一般性的集成电路知识和经验,具体情况可能因不同型号的集成电路或电路设计而异。在实际操作中,建议根据具体的产品手册或咨询专业人士进行故障排查和解决。

Andon Electronics公司的发展小趣事

Andon Electronics 是一家全球领先的电子元件制造商,以下是该公司发展的相关故事:

  1. 公司成立与初期发展:Andon Electronics 成立于 1984 年,总部位于美国加利福尼亚州。最初,公司主要从事 LED 和其他电子元件的生产和销售。由于对高质量产品和客户服务的执着追求,公司迅速赢得了客户的信任和好评。

  2. 技术创新与产品拓展:随着市场需求的变化和技术的进步,Andon Electronics 不断进行技术创新,并逐步扩大产品线。除了 LED 产品外,公司还推出了多种其他电子元件,包括连接器、电缆组件、线束和传感器等。这些产品在汽车、工业、通信和消费电子等领域得到了广泛应用。

  3. 质量管理和认证:Andon Electronics 一直致力于质量管理和产品认证,确保产品符合国际标准和客户要求。公司拥有 ISO 9001 质量管理体系认证,并不断优化生产流程和质量控制体系,以确保产品质量的稳定性和可靠性。

  4. 全球布局和市场拓展:随着业务的不断发展,Andon Electronics 在全球建立了多个生产基地和销售办事处。除了在美国的总部和生产基地外,公司还在亚洲、欧洲和其他地区设立了办事处和生产工厂,以更好地服务全球客户,并适应当地市场的需求。

  5. 可持续发展和未来展望:Andon Electronics 将继续致力于技术创新、产品拓展和质量管理,以满足客户不断变化的需求。公司将继续关注环保和可持续发展,推动节能减排和资源利用效率的提升。同时,Andon Electronics 也将积极响应行业的变革和挑战,不断调整战略,保持在电子元件制造业的领先地位。

EPC公司的发展小趣事

某EPC公司始终将品质放在首位,建立了完善的质量管理体系和严格的质量控制标准。公司注重从源头上控制产品质量,通过严格筛选原材料、加强生产过程监控和检测等措施,确保产品的稳定性和可靠性。同时,公司积极响应客户需求和反馈,不断改进产品和服务质量,赢得了客户的广泛赞誉和信赖。凭借卓越的品质和口碑效应,公司逐渐在电子行业中树立了良好的品牌形象。

COMPUTAR公司的发展小趣事

进入90年代,电动变焦镜头逐渐成为市场的新宠。CBC株式会社紧跟时代潮流,于1992年成功推出电动6倍系列镜头。这款镜头采用电动变焦设计,操作简便、速度快捷,极大地提高了拍摄效率。电动6倍系列镜头的全球上市,不仅进一步扩大了CBC的市场影响力,也为公司的未来发展奠定了坚实的基础。

通过以上五个故事,我们可以看到COMPUTAR公司(前身为CBC株式会社)在电子行业中的发展历程。从创立之初的艰苦创业,到逐步拓展国际市场;从手动变焦镜头的研制成功,到非球面高速镜头和电动6倍系列镜头的诞生与上市,每一步都凝聚着COMPUTAR人的智慧和汗水。正是这些不懈的努力和持续的创新,使得COMPUTAR在电子行业中脱颖而出,成为一家备受尊敬的企业。

Hittite Microwave(ADI)公司的发展小趣事

随着摄影和摄像技术的不断发展,市场对镜头性能的要求也越来越高。为了满足这一需求,CBC株式会社于1985年成功研制出第一款非球面高速镜头。这款镜头采用了先进的非球面设计,有效减少了像差和畸变,提高了成像质量。非球面高速镜头的诞生,不仅为CBC赢得了更多的市场份额,也为整个光学行业树立了新的技术标杆。

Corstat Containers公司的发展小趣事

Corstat Containers公司始终坚持以品质为核心的发展理念。在生产过程中,公司严格把控原材料采购、生产工艺和产品质量检测等环节,确保每一件产品都符合客户的要求。这种对品质的坚持赢得了客户的信任和好评,也为公司赢得了更多的合作机会。

问答坊 | AI 解惑

毕设很重要,但找工作的规则更重要(1)

现在正是年后,各种招聘会招聘广告铺天盖地,我们很多的大学生们又该忙找工作了。我作为一个人到中年的职场油子,今天跟大家谈谈招聘,希望能对大家的择业有所帮助吧。     首先要解开一个误区,那就是应届的大学毕业生很难找工作。     对于 ...…

查看全部问答>

液晶显示器驱动原理

前两次跟大家介绍有关液晶显示器操作的基本原理, 那是针对液晶本身的特性,与TFT LCD本身结构上的操作原理来做介绍. 这次我们针对TFT LCD的整体系统面来做介绍, 也就是对其驱动原理来做介绍, 而其驱动原理仍然因为一些架构上差异的关系, 而有所不同. ...…

查看全部问答>

sql server ce 总是装不上去

我的电脑上先安装了iis,然后我又安装了vs.net2005,继续安装sql server 2000(个人版)+ sql server 2000 sp4 我安装了sp4后查询sql的版本仍然是Microsoft SQL Server  2000 - 8.00.194 (Intel X86)不知道为什么没有改过来。 后来安装 ...…

查看全部问答>

好东东和大家分享:几种创新高性能ADC设计思路

本帖最后由 dontium 于 2015-1-23 13:40 编辑 最近学习了一篇介绍芯海科技的高性能ADC设计的文章,感觉收获颇丰。特别是觉得其中有几个创新设计思路有一定的参考价值,贴出来给和我一样的学习者分享下吧,有经验的高手们也可以来点评一下:   ...…

查看全部问答>

STM32的FLASH中代码如何保密保护?

                                 代码如何加密的?…

查看全部问答>

SPI等待问题

static void WR_CMD (unsigned char cmd)   {   /* Wait for SPI1 Tx buffer empty */   while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);   //int i;   //while( ...…

查看全部问答>

ucos文件系统

大家有木有做过uCOS-II的文件系统  在ARM上或者其他CPU上面?交流一下。…

查看全部问答>

MSP430单片机与GPS模块接口应用

MSP430单片机与GPS模块接口应用,介绍430与GPS的应用。…

查看全部问答>