STM8单片机的启动过程。

时间:2023-02-10 16:56:27

大学的时候,学过一学期的STM8单片机,当时也算下了挺大的功夫,用的是我挺佩服的一个老师的课本,是用汇编语言教的。不过佩服归佩服,这本书其实现在想起来,一些基础的东西讲得不是很明白,比如说第一章中讲单片机实现原理,居然用51单片机来讲,也用了51单片机的代码,可这本书是STM8好么!用51也要说一下吧,明显是出书出得有一些仓促了。而且书中出现了一些错别字,对我这种强迫症的人来讲,呵呵。当然好的地方就是里面有很多工程实际的东西,也讲到了用STM8汇编实现多任务的例子,和数字滤波等在我当时看来很奇妙很有趣的东西。我还是挺佩服他(潘永雄)的,这是实话,这本书我翻了n多遍,一直不舍等捐掉,其它的什么电路啊,模电啊,数电啊都已经捐给别人了。
STM8单片机的启动过程。
好吧,进入主题。在讲STM8单片机的启动过程前,大家先要对STM8的存储映射(Memory Map)有一个基本的认识, 这个信息可以从STM8的data sheet上面找到。以下是截图(当然这是stm8其中一个系列的存储映射,其它的可能不一样):
STM8单片机的启动过程。
大家可以看到一个叫“2 Kbyte boot Rom”的存储区域,硬件复位(从关机到开机)的复位向量就在这个区域里面,这个很特殊,因为下面有一个叫“32 interrupt vectors”的存储区域,其它所有的中断向量(见下表)都存在这个区域里面,只有硬件复位向量不是。
STM8单片机的启动过程。
所以当硬件复位后,也即STM8从关机到开机后,最先执行的是在boot Rom上的代码。boot Rom上面的代码叫做bootloader,bootloader的主要功能是通过单片机集成的外设(UART,SPI,CAN)来烧写单片机程序到单片机里面而不需要使用ST-Link,不过这是在单片机第一次烧写或者Option bytes(这个也在存储映射那个图里)里的BL和NBL字节分别设置为55和AA并且内存的读保护没有启用的时候才可以烧写的,如果不满足条件了,可以使用ST-Link连接单片机在STVP里面设置Option bytes使之满足。从boot Rom启动后的具体流程图可以看下图(该图来自于官方的UM0560),也可以直接看文字。
STM8单片机的启动过程。
满足前面所讲的条件之后,STM8会检测是否有来自主机(通常为电脑端)的同步信号,若有同步信号则STM8交给主机控制,主机就可以向STM8下载程序了(下载完后由主机指定程序开始执行的地址)。STM8若没有检测到主机的同步信号,则等待1秒钟后超时,超时后判断单片机是否还没有烧写过程序,如果是则回到硬件复位的状态,重新上面从硬件复位开始的流程。而如果之前有烧写过程序了,则到“32 interrupt vectors”里面找到复位向量的入口,进入向量所指的地址(通常就是我们所说的main函数了)开始执行程序。
那如果bootloader在开始执行的时候就不满足可以烧写程序的条件呢?也是到“32 interrupt vectors”里面找到复位向量的入口,进入向量所指的地址开始执行程序。
以上就是STM8单片机的启动过程了。