历史上的今天
返回首页

历史上的今天

今天是:2024年09月10日(星期二)

正在发生

2019年09月10日 | 基于STM32从零写操作系统系列---bootloader

2019-09-10 来源:eefocus

本章主要使用汇编语言编写STM32F103(以下称为“该芯片”)的启动代码。具体结构如图:

启动模式

 该芯片可以通过设置BOOT0和BOOT1两个引脚,选择不同的启动方式,正常情况下BOOT0=0,BOOT1=0(0为低电平)。即,芯片将从Flash中加载代码启动。


当芯片上电/复位后,芯片首先从地址0x0000_0000处获取栈地址,然后将地址0x0000_0004处的值赋值给PC寄存器。按照PC寄存器的值,取第一条指令,执行......具体如图:

 地址0x0800_0205处的具体代码如图:


简单来说,地址0x0000_0004处存放的是复位处理函数的地址。当上电/复位时,芯片硬件会自动将地址0x0000_0000处的栈地址赋值给MSP寄存器;将地址0x0000_0004处的复位函数地址值赋值给PC寄存器;然后就从PC寄存器所指的地址开始执行代码。


为什么Flash的地址明明是从0x0800_0000开始,但芯片是从地址0x0000_0000处开始取数据呢?原因很简单,当我们设置BOOT0=0,BOOT1=0时,芯片会将flash的地址范围映射到0x0000_0000~0x0007_ffff的地址范围内,如图:


向量表

当发生了异常并且要响应它时,CM3 需要定位其处理例程的入口地址。这些入口地址存储在所谓的“(异常)向量表”中。缺省情况下,CM3 认为该表位于零地址处,且各向量占用 4 字节,因此每个表项占用 4 字节。如图:

 完整的向量表定义,请看源代码。


复位处理函数

用于上电/复位后,初始化芯片,让芯片能够以最好的状态运行。初始化完成后,跳转到_main函数继续执行。如图:

初始化SystemInit.s

主要是配置芯片的时钟,禁止所有中断,设置向量表位置。如图:


链接脚本

用于链接各个目标文件,定义各个代码段,数据段的位置。如图:

 这个链接脚本的作用,可以简单地理解为规划Flash。如图:

 所以,我们看到第一条指令是放在地址0x0800_0200处的。


Makefile

用于多文件编译管理。如图:


 

main.s 

在本章中,main.s只做死循环,下一章将点亮LED灯。如图:

实验步骤:

1.如下图,创建一个文件夹,在文件夹中新建如图中的文件,按照上面所分析的编辑代码。

 2.在命令行中,进入上一步创建的文件夹,输入make,编译项目。如图:


3.如无意外编译通过,然后按照前面章节讲述的步骤,将生成的.bin文件下载到芯片里。


4.简单对比.list文件与芯片flash中的数据,如图:


小结

本章到此结束,主要是简单介绍了该芯片的启动模式设置,启动流程。stm32F103的初始化没有什么复杂的设置,可以通过相关文档手册,了解向量表的内容;或参照STM32固件库v3.5的源代码。有关链接脚本,Makefile的知识,在本系列博客中不会讲解,网上有相关的资料文档。


推荐阅读

史海拾趣

DIOO公司的发展小趣事

随着科技的不断发展,DIOO公司始终致力于技术创新和产品创新。在90年代初,DIOO公司推出了一款革命性的智能音响系统,该系统集成了最先进的音频处理技术、语音识别技术和人工智能技术,为用户提供了前所未有的便捷和智能体验。这一创新产品迅速在市场上占据了领先地位,并成为了DIOO公司的标志性产品之一。

Hitachi Chemical Co America Ltd公司的发展小趣事

随着科技的不断发展,DIOO公司始终致力于技术创新和产品创新。在90年代初,DIOO公司推出了一款革命性的智能音响系统,该系统集成了最先进的音频处理技术、语音识别技术和人工智能技术,为用户提供了前所未有的便捷和智能体验。这一创新产品迅速在市场上占据了领先地位,并成为了DIOO公司的标志性产品之一。

Chipcera Technology Co Ltd公司的发展小趣事

随着技术实力的不断增强,Chipcera开始将目光投向更广阔的市场。公司通过参加国际电子展会、与知名厂商合作等方式,积极推广自家产品。同时,公司还加大了对品牌建设的投入,通过提升产品质量、优化售后服务等措施,树立了良好的品牌形象。这些努力使得Chipcera的产品逐渐打入国际市场,成为行业内的佼佼者。

DUBILIER公司的发展小趣事

DUBILIER公司非常重视人才的培养和发展。公司建立了完善的人才培训体系,为员工提供各种培训和发展机会。通过内部培训和外部引进相结合的方式,DUBILIER公司培养了一支高素质、专业化的技术和管理团队。这些人才不仅为公司的发展提供了强大的支持,还为公司赢得了更多的商业机会和合作伙伴。

C&D公司的发展小趣事

为了保持技术领先地位,C&D公司积极与高校、科研机构等开展产学研合作。通过与这些机构的紧密合作,C&D公司不断引进新技术、新工艺和新材料,推动产品的持续创新。同时,公司还鼓励员工参与各种技术创新活动,激发员工的创新热情,为公司的持续发展注入新的活力。

AMICC [AMIC TECHNOLOGY]公司的发展小趣事

随着产品线的不断丰富和技术实力的不断提升,AMICC开始积极拓展国内外市场。公司通过与大型电子企业建立战略合作关系,成功打入国际市场。同时,AMICC还积极参加各类行业展会和交流活动,提升品牌知名度和影响力。在市场拓展的过程中,AMICC始终坚持客户至上的原则,为客户提供优质的产品和服务,赢得了客户的信任和好评。

问答坊 | AI 解惑

diy speed touch home电脑数据线

为了以后更好的在改装成510的modem上升级firmware,这次我教大家做一条modem跟电脑通讯的数据线,然后就可以对modem内的flash rom重新分配空间,那么就可以装下完整的510的firmware,就算以后有高版本的firmware,都可以稍微改一下标识就可以直接拿 ...…

查看全部问答>

需求确认s3c2440 做视频采集可以吗?

需求确认s3c2440 做视频采集可以吗?…

查看全部问答>

关于微软的提供的WINCE SDK

  准备在PDA上开发一个简单的程序,不打算自己定制wince SDK,看见参考书上的有微软提供的Pocket PC 2003,打算用这个,但是上了微软的网站,没有找到,书是2006版,可能变化太快了,只找到了一个pda SDK 1.1,本人是新手,谁能解释一下, ...…

查看全部问答>

Nios IDE 运行中的一个错误

IDE 中LED 跑马灯的程序运行时总是出现 nios2-terminal: connected to hardware target using JTAG UART on cable nios2-terminal: \"USB-Blaster [USB-0]\", device 1, instance 0 nios2-terminal: (Use the IDE stop button or Ctrl-C to term ...…

查看全部问答>

vxworks下串口操作

本人菜鸟,刚接触vxworks,在vxworks下进行2路串口通信 使用tty0,tty1等方式open 并调用read函数读取串口数据 现在不知道何时串口收到数据,所以调用read函数一直停在那,请问如何读取串口数据可以避免死循环?(由于限制,不考虑单独起任务读 ...…

查看全部问答>

stm32f103的SPI通讯问题

拜问下 大虾们 SPI1 和 SPI2 都设定为双线双工 , SPI1 主 SPI2 从   在 通讯的时候 SPI1 向 SPI2 发送数据 SPI2 能接收 但是&nbs ...…

查看全部问答>

STM8S103的读保护让我疯了

给客户做了6个样板,用STVP烧录了软件,选择了READONLY保护选项。 前几天客户把6个板子送过来要修改。结果发现有4块板子是正常,但是有2块板子的读保护没有了,代码通过STVP轻松读出来了。 真晕啦。这样的问题竟让让我遇到…

查看全部问答>

仿真28335需要什么仿真器

听说能支持28335仿真的仿真器很少,想咨询下这方面的。 准备过一段时间购买一套。…

查看全部问答>

这是最后一篇了,五精华无悬念:STM32的IAP方案

replyreload += \',\' + 1110631;STM32的IAP方案          几乎所有的同类书籍都介绍综合性的应用示例如“万年历 + 温度显示 + 闹钟响铃 + 计时表”这样的一个实时时钟范例或“STM32 + 音频解码 + 大容 ...…

查看全部问答>

LED应用-1 线控制 & AN033

本帖最后由 dontium 于 2015-1-23 13:13 编辑 LED应用手册   1 线控制 – 省去 LED 驱动器的微处理器控制 AN033 -- 将射频闪光 LED 软件示例转换为 CC2420 - MSP430(修订版 A)   超实用的,快来看啊~~~ …

查看全部问答>