STM8的启动过程(基于IAR)

发布者:咖啡狐狸最新更新时间:2018-06-02 来源: eefocus关键字: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 引用地址:STM8的启动过程(基于IAR)

上一篇:stm8 ADC模数转换
下一篇:STM8 IAR环境生成hex文件

推荐阅读最新更新时间:2024-03-16 16:04

STM8-SO8-DISCO之建立IAR模板及第一个工程转灯
开发环境: IAR for STM8 V3.10.4(本文以它为主) STVD-STM8 Cosmic C 创建工程模板: 1、解压en.stsw-stm8069.zip,进入解压目录en.stsw-stm8S069STM8S_StdPeriph_LibProjectSTM8S_StdPeriph_Template目录下;把里面的RIDE和STVD两个文件夹以及用不到两个文件删除,保留如下图中的文件即可。 2、进入en.stsw-stm8S069STM8S_StdPeriph_LibProjectSTM8S_StdPeriph_ExamplesGPIOGPIO_Toggle下,全选,复制所有文件
[单片机]
STM8-SO8-DISCO之建立<font color='red'>IAR</font>模板及第一个工程转灯
stm8 sttoolset不能编译问题
1、STVD- Tools- Options- Toolset- Root path中添加 编译器路径问题 1)可能会报错为 -clDebug -coDebug main.c has failed, the returned value is: 1 exit code=1. 2) can't open file libm0.sm8 3)生成hex文件修改方法 project settings post-Build 添加 chex -o $(OutputPath)$(TargetSName).hex $(OutputPath)$(TargetSName).sm8
[单片机]
<font color='red'>stm8</font> sttoolset不能编译问题
STM8除法运算的时间及注意事项
STM8单片机在乘除法上的时间大为缩短了!除法运算也只需要2.75us @ 8MHz。 需要注意的是,不要在中断程序中做乘除法运算,会出错。 论坛上的解释是:这是因为做乘法运算时,编译器实际上调用了一个函数,而这个函数用到了几个编译器自定义的全局变量,如果不按照2楼说的去做,在进入中断时不会保存这几个全局变量,而造成这个乘法运算函数为不可重入,导致错误。
[单片机]
<font color='red'>STM8</font>除法运算的时间及注意事项
STM8 I2C的学习
STM8的I2C接口 1、I2C模式选择 接口有4种模式:从设备发送模式;从设备接收模式;主设备发送模式;主设备接收模式。 默认条件下,I2C模块工作于从模式。接口在产生起始条件后自动地从从模式切换到主模式;当仲裁失败或发送STOP信号时,则从模式切换到从模式。 2、通信过程 主模式时,I2C接口启动数据传输并产生时钟信号。串行数据传输总是以起始条件开始并以停止条件结束。起始条件和停止条件都是在主模式下由软件控制产生。 相关功能寄存器 1、I2C控制寄存器1(I2C_CR1) 2、I2C控制寄存器2(I2C_CR2) 3、I2C频率寄存器(I2C_FREQR) 允许的时钟范围在 1-24MHz 4、I2C自身地址寄存器LSB
[单片机]
STM8 低功耗模式
四种STM8低功耗模式的主要特性如表12。 (表12:STM8S低功耗模式管理) 1.如果外设时钟未被关闭 2.包括通讯外设的中断(参见中断向量表) STM8等待(Wait)模式 在运行模式下执行WFI(等待中断)指令,可进入等待模式。此时CPU停止运行,但外设与中断控制器仍保持运行,因此功耗会有所降低。等待模式可与PCG(外设时钟门控),降低CPU时钟频率,以及选择低功耗时钟源(LSI,HSI)相结合使用,以进一步降低系统功耗。参见时钟控制(CLK)的说明。 在等待模式下,所有寄存器与RAM的内容保持不变,之前所定义的时钟配置也保持不变(主时钟状态寄存器CLK_CMSR)。 当一个内部或外部中断请求产生时,CPU从等待模
[单片机]
<font color='red'>STM8</font> 低功耗模式
STM8 读同时写RWW
RWW特性允许用户在执行程序和读程序存储器时对DATA EEPROM区域进行写操作,因此执行的时间被优化了。相反的操作是不允许的:即你不可以在写程序存储器时对DATA EEPROM进行读操作。 RWW特性是一直有效的而且可以在任意时刻使用。注意:并不是所有STM8都拥有RWW特性,请参考相应的数据手册来了解更多信息。 字节编程 可以对主程序存储器和DATA区域逐字节地编程。要对一个字节编程,应用程序可直接向目标地址写入数据。 在主程序存储器中 当字节编程操作执行时,应用程序停止运行。 在DATA区域中 有RWW功能的器件:在IAP模式下,应用程序不停止运行,字节编程利用RWW功能进行操作。 无RWW功能的器件:当字节编程
[单片机]
<font color='red'>STM8</font> 读同时写RWW
IAR执行到断点处不能单步运行解决方法
最近在使用IAR调试程序的时候,突然发现程序中如果有断点,程序就不能单步执行了。 如下图所示,程序全速执行到断点处。 这时候如果点最上面工具栏的单步调试按钮时,程序会一直在这一行,不能继续往下走。 以前调试时到断点后点单步执行,程序就会继续往下执行。但是最近突然出现了这种情况,在网上找解决方法一直没找到。今天无意间发现了,原来是一个地方设置的问题。 不能单步执行,就是没有勾选SL_LINK 中的 Disable interrupt when stepping 这个选项。这个选项的意思就是当单步运行的时候就禁止断点功能。 将这个选项勾上,这时候程序运行到断点处之后,单步执行就可以使用了。 将这个选项选上之后,
[单片机]
<font color='red'>IAR</font>执行到断点处不能单步运行解决方法
关于IAR开发STM32配置
因为自己要学Msp430还有ZigBee发现IAR真的挺好用,,,所以以后想着就用IAR写单片机程序,, 这次配置我不会把程序的配置弄得有条理,分开文件夹存放,,,我要把那些文件全都放到一块,,弄得乱七八糟,,,因为自己一开始学习用Keil开发32的时候,,网上的视频建工程全都是建的 很有条理,,对于一开始学的自己当时就感觉特麻烦,,,对于初学者更是感觉麻烦,,反而让初学者觉得难,,,,,所以呢!嘿嘿,,,,,,,哪样简单哪样弄 不要以为我不是一个讲究的人哈,我自己建的工程都是很有条理的,,看我Keil的,,,第一次用IAR嘛,,先怎样简单怎样建,,,,,,,, 首先你要有下载的STM32的固件库 新建一个文件夹 把
[单片机]
关于<font color='red'>IAR</font>开发STM32配置
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved