加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

STM32开发板的Bootloader在哪里?

发布时间:2020-12-15 07:10:58 所属栏目:百科 来源:网络整理
导读:转自:http://bbs.ednchina.com/BLOG_ARTICLE_134959.HTM 这几天看了万利开发板自带的源程序,发现STM32和传统的8位机很相似(可能是我刚刚接触没有深入理解),简单易懂。不过就是不知道boottloader在哪里,这与其他的ARM7、9有什么不同。不过ST的库文件却

转自:http://bbs.ednchina.com/BLOG_ARTICLE_134959.HTM

这几天看了万利开发板自带的源程序,发现STM32和传统的8位机很相似(可能是我刚刚接触没有深入理解),简单易懂。不过就是不知道boottloader在哪里,这与其他的ARM7、9有什么不同。不过ST的库文件却很齐全,只要加入库文件自己编写相应的小程序就可以下载运行了。我现在想知道STM32是否可以运行uClinux或其他系统。


通常,Boot Loader?就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。通常,Boot Loader?是严重地依赖于硬件而实现的,特别是在嵌入式世界。因此,在嵌入式世界里建立一个通用的?Boot Loader?几乎是不可能的。


我们知道不同MCU的体系结构的boot loader也不会相同,如果想让运行在一块板子上的?Boot Loader?程序也能运行在另一块板子上,通常也都需要修改?Boot Loader?的源程序。当我们自己开发时,肯定不能直接把开发板上的boot loader直接应用在自己开发的产品上的。不过ST已经给我们库文件了,大家在使用时只要自己定义相应的接口,对控制器、寄存器编程等。假如我们要用到ADC那么我们就要对GPIO和ADC等初始化即可。ST提供的库文件是不是就可以看成boot loader呢,请大家给予祥解。多谢了!


下面顺便介绍一下boot loader,可能对我们初学者有点用途。


大多数?Boot Loader?都分为?stage1?和?stage2?两大部分。依赖于?CPU?体系结构的代码,比如设备初始化代码等,通常都放在?stage1?中,而且通常都用汇编语言来实现,以达到短小精悍的目的。而?stage2?则通常用C语言来实现,这样可以实现给复杂的功能,而且代码会具有更好的可读性和可移植性。?
1.?Boot Loader?的?stage1?通常包括以下步骤(以执行的先后顺序):?
??1).?硬件设备初始化。


此阶段完成: 屏蔽所有的中断、设置?CPU?的速度和时钟频率、RAM?初始化、 关闭?CPU?内部指令/数据?cache等


2).为加载?Boot Loader?的?stage2?准备?RAM?空间。?
??3).拷贝?Boot Loader?的?stage2?到?RAM?空间中。


拷贝时要确定两点:(1) stage2?的可执行映象在固态存储设备的存放起始地址和终止地址;(2) RAM?空间的起始地址。
??4).设置好堆栈。?
??5).跳转到?stage2?的?C?入口点。?
2.?Boot Loader?的?stage2?通常包括以下步骤(以执行的先后顺序):?
??1.初始化本阶段要使用到的硬件设备。此阶段用户可以初始化一个串口,以便和终端用户进行?I/O?输出信息;(2)初始化一个GPIO口,利用LED来检测我们的程序是否可以运行


2.检测系统内存映射(memory map)。?
??3.将?kernel?映像和根文件系统映像从?flash?上读到?RAM?空间中。


4.为内核设置启动参数。?
??5.调用内核。


一般情况下有了这2阶段的代码,只需要你做出相应的修改就可以做开发了。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读