0 卖盘信息
BOM询价
您现在的位置: 首页 > 电子资讯 >业界动态 > 基于IAR开发环境的STM8单片机启动流程彻底探究

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

2017-01-17
类别:业界动态
eye 499
文章创建人 拍明


初学STM8会发现,STM8官方的固件库并没有提供一个.s文件的启动代码,那么她是如何启动然后跳转到main函数执行的呢


首先,我们根据ARM的只是可以推测,STM8也是通过复位向量来启动的,假设流程在复位响亮中完成的,应该首先去复位向量表中间去找,看复位向量又要看存储器映射,一环扣一环


STM8使用的是统一编址技术,以下是存储器编址图

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

我们可以看到,最大取指空间是0XFFFFFF,也就是说,是16M,这是因为PC的特性决定的


在程序内部,它是将16M分为了256个节(sector),每个节的大小为64K,64*256= 16384K=16M,由图我们可以看到,在SECTOR0区间里面似乎还有些玄妙,之后的就是普通空间了


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

这就是sector的分区,分区如下


0-17ff 是RAM空间,而且是最大的ram空间,STM8的ram一般都小于6K由此可见,在这个ram空间里面就包含有我们的堆栈区域.但是不一定是6K,(3G寻址的win7也没见多少人真的装3G啊,装2G内存条的多的是)


  1800-3fff是保留区域


  4000-47ff是最大2K的数据保存区(相当于EEPROM)


  4800-487f是选项字节空间,用于设置一些配置信息


  4900-4fff是保留空间


  5000-57ff IO以及外设的寄存器空间(统一编址技术)


  5800-5fff 保留区域


  6000-67ff 2K的启动代码rom


  6800-7eff 保留区间


  7f00-7fff 系统寄存器的地址


  8000-8080 中断向量


在往下才是flash空间,也就是说,我们的代码存放的区域就是在0x8000开始的


在上面那张图我们可以看见复位向量




那是不是说芯片启动立马就到了复位向量0x8000的位置了呢?


其实不然,查看手册我们发现这一段话


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


也就是说,系统启动的时候不在复位向量的地方,那这个6000区域存放的是啥




原来是启动代码,还是数据手册


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


鉴于此,我们可以很肯定地说,系统启动的过程是


复位-->跳转到boot ram--->boot ram进行某种初始化-->处理用户有可能的程序更新-->跳转到0x8000-->复位向量执行


既然复位向量在8000,那么代码中应该有指示

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

我们在IAR里面看到他对中断的处理依靠这个宏定义,实际上他就是定义了两个重要的宏定义


INTERRUPT_HANDLER_TRAP(a)和INTERRUPT_HANDLER(a, b )


我们展开第一个


得到


INTERRUPT_HANDLER_TRAP(a) ==


_Pragma(vector = 1) __interruptvoid (a) (void)


这里面涉及到两个编译器关键字分别是Pragma和interrupt


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


Pragma是一个预处理指令,它包含不同的语句的时候有不同的含义,我们现在包含的是vector,那就和vector有关系了

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



什么意思呢,我们得看具体语法


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


也就是说,相当于在中断向量表标号中写入指定的函数


_Pragma(vector = 1) __interruptvoid (a) (void)


相当于在中断向量1的位置写入a这个函数的指针


INTERRUPT_HANDLER( a, b )展开来


_Pragma(vector = b+2) __interruptvoid (a) (void)


就是在中断向量表B+2的位置写入a这个函数的指针,(因为0和1被reset和trap占用了)


现在我们来看it.c中的语句就很清楚了


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


第一个函数是trap指针,我们需要实现TRAP_IRQHandler这个函数就能关联上对应的中断向量


第二个函数同样我们只要实现TLI_IRQHandler这个函数就OK了


函数的视线需要遵循


__interrupt void (a) (void)的模式,否则宏定义报错


可是trap有了,reset去哪了呢?这是IAR的一个手段,他把RESET隐藏了,我们来看这个图片



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

相当于,IAR在RESET处默认存放了一个中断向量指针,指针的指向是__iar_program_start函数,这个函数我们无法找到,属于iar内置函数,但是我们可以看到,调试就可以了


打开仿真


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


在reset位置放置了一个0x80c3地址(0x82属于固定填充,24位地址,32位高八位不用),80c3位置代码如下


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


由此可见我们的推论是正确的


先设置堆栈基地址0x17ff然后经历lowinit和datainit之后跳转到main函数执行


所以,IAR下编译STM8启动的过程总结如下

复位-->跳转到boot ram--->boot ram进行某种初始化-->处理用户有可能的程序更新-->跳转到0x8000-->复位向量执行à跳转到__iar_program_start-->跳转到main函数地址


STM8


STM8系列是意法半导体公司生产的8位的单片机。该型号单片机分为STM8A、STM8S、STM8L三个系列。

STM8A:汽车级应用

STM8S:标准系列

STM8L:超低功耗MCU


芯片特点

内核

高级STM8内核,具有3级流水线的哈佛结构

扩展指令集

存储器

程序存储器:8K字节Flash;10K 次擦写后在55°C环境下数据可保存20年

数据存储器:640 字节真正的数据

EEPROM;可达30万次擦写

RAM:1K字节

时钟、复位和电源管理编辑

2.95到5.5V工作电压

灵活的时钟控制,4个主时钟源

– 低功率晶体振荡器

– 外部时钟输入

– 用户可调整的内部16MHz RC

– 内部低功耗128kHz RC

带有时钟监控的时钟安全保障系统

电源管理:

– 低功耗模式( 等待、活跃停机、停机)

– 外设的时钟可单独关闭

永远打开的低功耗上电和掉电复位

中断管理

带有32个中断的嵌套中断控制器

6个外部中断向量,最多27个外部中断

定时器

高级控制定时器:16位,4个捕获/ 比较通道,3个互补输出,死区控制和灵活的同步

16位通用定时器,带有3个捕获/ 比较通道(IC、OC 或 PWM)

带有8位预分频器的8位基本定时器

自动唤醒定时器

2个看门狗定时器:窗口看门狗和独立看门狗

通信接口

带有同步时钟输出的UART ,智能卡,红外IrDA ,LIN主模式接口

SPI接口最高到10Mbit/s

I2C接口最高到400Kbit/s

模数转换器

10位,±1LSB 的ADC,最多有5路通道,扫描模式和模拟看门狗功能

I/O 端口

32脚封装芯片上最多有28个I/O ,包括21个高吸收电流输出

非常强健的I/O 设计,对倒灌电流有非常强的承受能力

开发支持编辑

单线接口模块(SWIM) 和调试模块(DM),可以方便地进行在线编程和非侵入式调试

IAR

IAR 公司总部在北欧的瑞典,在美国、日本、英国、德国、比利时、巴西和中国设有分公司。它最著名的产品是C编译器-IAR Embedded Workbench, 支持众多知名半导体公司的微处理器。许多全球著名的公司都在使用IAR SYSTEMS提供的开发工具,用以开发他们的前沿产品,从消费电子、工业控制、汽车应用、医疗、航空航天到手机应用系统....

IAR

嵌入式系统开发工具

IAR Systems是全球领先的嵌入式系统开发工具和服务的供应商。公司成立于1983年,提供的产品和服务涉及到嵌入式系统的设计、开发和测试的每一个阶段,包括:带有C/C++编译器和调试器的集成开发环境(IDE)、实时操作系统和中间件、开发套件、硬件仿真器以及状态机建模工具。

内部路由器

OSPF协议将网络划分为多个自治域进行管理,路由器根据在自治系统中的角色划分(IAR,ABR,BBR,ASBR),除IAR外,一个运行OSPF协议的接口状态根据接口的不同类型可划分为

DR: Designated Router

BDR: Border Designated Router

DROther: Non (DR or BDR)



责任编辑:Davia

【免责声明】

1、本文内容、数据、图表等来源于网络引用或其他公开资料,版权归属原作者、原发表出处。若版权所有方对本文的引用持有异议,请联系拍明芯城(marketing@iczoom.com),本方将及时处理。

2、本文的引用仅供读者交流学习使用,不涉及商业目的。

3、本文内容仅代表作者观点,拍明芯城不对内容的准确性、可靠性或完整性提供明示或暗示的保证。读者阅读本文后做出的决定或行为,是基于自主意愿和独立判断做出的,请读者明确相关结果。

4、如需转载本方拥有版权的文章,请联系拍明芯城(marketing@iczoom.com)注明“转载原因”。未经允许私自转载拍明芯城将保留追究其法律责任的权利。

拍明芯城拥有对此声明的最终解释权。

标签: STM8 单片机

相关资讯