STM8的启动过程(基于IAR)

初学STM8S已经一段时间了,但是一直不太明白它的启动过程。众所周知,所有的嵌入式CPU启动时,都应该有一个Bootloader程序,一般存放在复位地址处。这个程序一半来自于固件库附带的启动文件,如51的STARTUP.A51,或者STM32的STM32F103x.s等,但IAR中并未提供STM8S的启动文件。那么它是如何找到main函数并完成启动的呢?


按照常理,启动过程应该在复位中断中完成。在STM8S的数据手册中,可以找到CPU中断向量表:

可以发现,复位中断向量地址是8000h。


然而查看数据手册可以发现,复位后地址是应该是6000h。


调试时,无法看到6000h处的代码。没办法,只好再找数据手册。


这是STM8S的启动流程图。由此可见,从6000h到8000h的步骤根本不用软件来操心,而是硬件根据选项字节完成的。


那么,程序跳转到8000h后继续做了什么呢?查找数据手册(又是数据手册……)可见


STM8S的中断向量是由82h+向量地址的高中低字节构成的。进入调试器,找到8000h地址存储的指令


由此可见,我们复位中断的地址应该是008207h。再跳转到8207h查看程序,过程就很明晰了


先设置栈底地址,然后调用__low_level_init函数。

__low_level_init的内容是将X清零再自增。返回后检测X是否成功置1,如果没有就跳转到地址+0x03,也就是JP  EXIT的指令,退出程序。可见,这是测试X寄存器是否正常的步骤。

接着进行__iar_data_init函数,测试Y功能是否正常。

如果一切正常,那么CALL main,即进入main函数,启动完成。


说句题外话,关于stm8的中断有一个很有趣的地方。stm8s_it.c文件中定义着各中断的处理函数,然而最高到TRAP软件中断,单单没有RESET中断的处理函数。参考其他文章的一张图片

可以发现,IAR自动把复位中断向量的地址,也就是__iar_program_start写入了8000h的位置。而在stm8s.h中,可以看到

其他中断向量地址是通过#pragma vector的方式写入到对应的中断入口的。而向量默认地址(我这里是8207h)由于选型不同并不一样,应该是由IAR自动决定的。


参考文章:

STM8单片机启动流程彻底探究--基于IAR开发环境

#pragma vector


个人的第一篇博客,希望能帮到大家大笑

  • 8
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在使用IAR开发环境中,为了在STM32F103C8T6上正确启动项目,你需要添加一些文件。首先,你需要将STM32F10x_StdPeriph_Lib_V3.5.0\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template\EWARM目录下的4个.icf文件复制到你的工程目录下的bsp目录下。这些.icf文件是链接文件,对于基本的应用来说,这些文件足以满足你的工程需求。但是,如果你的项目需要添加外部RAM,你可能需要修改.icf文件。你可以参考一些文章,比如《STM32中stm32f0xx_flash.icf文件的作用详解》和《菜鸟详解iar的icf文件》来了解如何修改.icf文件。复制完文件后,你还需要在选项中修改路径。接下来,你需要添加一些文件。在CORE目录下,你需要添加core_cm3.c和startup_stm32f10x_md.s文件。注意,默认情况下,添加文件文件类型为.c,所以当你添加startup_stm32f10x_md.s启动文件时,你需要选择文件类型为"All files"才能看到这个文件。在USER目录下,你需要添加main.c,stm32f10x_it.c和system_stm32f10x.c文件。这样,你就将需要添加的文件都添加到了你的工程中。最后,点击OK保存设置。如果你还需要添加其他文件,请参考相关文档。 #### 引用[.reference_title] - *1* [IAR基于固件库建立STM32工程](https://blog.csdn.net/qq_36310253/article/details/103591685)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [【STM32】STM32F103C8T6 创建工程模版详解(固件库)](https://blog.csdn.net/dengjin20104042056/article/details/130892452)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值