分享STM8 IAP方法
A:BOOT 项目里操作:
1.把BOOT程序跟应用程序分两个项目编写
2.在BOOT程序里最重要的是中断向量表重定向,icf文件就不用设置了(BOOT里不能开中断)
中断向量表重定向设置方法代码如下:
__root const long reintvec[]@".intvec"=
{ 0x82008080,0x82009004,0x82009008,0x8200900c, //当应用程序地址不是0x9000时则要相应改掉除第一个0x82008080以外的数值
0x82009010,0x82009014,0x82009018,0x8200901c,
0x82009020,0x82009024,0x82009028,0x8200902c,
0x82009030,0x82009034,0x82009038,0x8200903c,
0x82009040,0x82009044,0x82009048,0x8200904c,
0x82009050,0x82009054,0x82009058,0x8200905c,
0x82009060,0x82009064,0x82009068,0x8200906c,
0x82009070,0x82009074,0x82009078,0x8200907c,
};
3.然后BOOT程序的跟一般程序一样编写通信协议及FLASH操作代码就行了,还有一点要记住,BOOT程序里不要开中断哦!
这种方法缺点就是会浪费约128个字节的FLASH空间,如果有高手能把这些空间省下来,请指点哦!
B:应用程序项目里操作:
在应用程序项目里必须在icf文件修改,修改如下:
把下面三行
define region NearFuncCode = [from 0x8000 to 0xFFFF];
define region FarFuncCode = [from 0x8000 to 0xFFFF];
define region HugeFuncCode = [from 0x8000 to 0xFFFF];
改为
define region NearFuncCode = [from 0x9000 to 0xFFFF];
define region FarFuncCode = [from 0x9000 to 0xFFFF];
define region HugeFuncCode = [from 0x9000 to 0xFFFF];
就可以了,应用程序就可以开中断了,IAP就是这么简单吧!
当然我这里是用0x9000地址作为应用程序区的首地址,至于各位BOOT大小是多小就按不同的数值设置
但是必须记得在BOOT的中断向量重定向表也必须要相应修改哦!
解析下BOOT重定向表内的0x82008080为什么是这个数值:因为重定向表跟中断表重叠了,编译器就先分配重定向表,在接着的地址0x008080处,
再分配一份中断向量表,所以其实是两份中断向量表,所以BOOT重定向表内的0x82008080就是为了要跳到真正的BOOT程序入口,
因为在0x8080处才是真正跳转到__iar_program_start入口。
关键字:STM8 IAR 中断向量表 重映射
引用地址:
STM8 IAR中断向量表重映射
推荐阅读最新更新时间:2024-03-16 15:04
STM8查看IO口的方法
今天在用STM8L151K6做输出使能ADP3110A于是把IO口做如下配置用的是PC1 GPIO_Init(ADP3110A_EN_PORT, (GPIO_Pin_TypeDef)ADP3110A_EN_PINS, GPIO_Mode_Out_PP_High_Fast); GPIO_SetBits(ADP3110A_EN_PORT,ADP3110A_EN_PINS);//开启ADP3110A_EN 但是用示波器测量发现只是1.4V左右,查看数据手册 发现在输出兰只有T7 查看注释 In the open-drain output column, ‘T’ defines a true open-drain I/O (P-bu
[单片机]
IAR新建一个工程
1 安装好IAR For STM8软件。 2 在project菜单下新建一个工程 3 弹出的文本框中选择C文件 4 新建一个文件夹用于保存我们新建的工程,最好不要包含中文命名,保存后给工程命名。 5 保存后是这样的。 6 选择一个和当前单片机对应的版本,复制如下文件到你新建项目的目录下替换原来的man.c文件。 7 在项目中添加复制过来的文件 8 编译后报错的原因,需要添加头文件。 9 此时需要添加头文件。 10 对IAR做配置 11 有时候程序是对的但是结果不一样可能就是这里配置不一样 12 添加库函数头文件和库函数文件指定项目路径 以上三个图为指定库函数文件库函数头文件本项
[单片机]
STM8单片机ADC采样功能通过定时器触发
在使用STM8单片机的ADC功能时,读取ADC数据时一般有两种方式,一种是通常不断地读取采样标志位,来判断ADC采样是否结束,一种是通过中断的方式来通知系统采样是否结束。 有时候采样ADC数据的时候,需要按照一定的时间间隔,定点的去采样数据。一般使用的方式就是通过定时器定时,然后在定时中断函数中再去读取ADC采样的数据。但是这种方式采样的时间是不固定的,比如进入定时器中断后,ADC采样刚结束,就可以直接使用当前采样到的数据。但是如果运气不好的话,进入定时中断后,ADC采样刚开始,那么此时就需要等到ADC采样结束后,才能使用数据。这样就好导致每次读取ADC数据时还会有随机的一段等到ADC数据的延时。 通常查阅ST
[单片机]
STM8与汇编语言(1)(2)(3)
STM8与汇编语言(1) 不知是心血来潮,还是其它因素,突然又想起玩汇编语言了。这几年也没少跟单片机打交道,包括51系列,430系列,ARM系列,但都是用C语言来开发。不过由于使用C语言,实际上对这些CPU的了解还是不够深刻,当然除了51之外,因为那是我多年前曾经用汇编开发过的芯片。尽管当今C语言已经在嵌入式产品的开发过程中成为主流,但我个人依然认为,要想真正了解CPU的特点,还得用汇编语言。不知道这种观点是对还是错,也许是因为自己从硬件做起,写过机器码,用汇编语言做过优化,因此对汇编语音有一种特殊的偏爱。 51系列的芯片用多了,感觉有时写起程序来不太方便,因此总想寻找一些其它的8位单片机玩玩,正好手头有一个ST的三合一开
[单片机]
IAR添加文件夹和头文件的方法
添加文件夹的方法: (1) 右键项目 (2)选择add (3)选择add group 然后添加文件夹的名字就可以了 (4)添加入文件夹以后可以在这个文件夹内添加源文件 添加头文件的方法 (1)右键工程 (2)选择option,选择c/c++ compler (3)选择preprocessor,点击下图的 ... 方框 点击click to add 去添加头文件的路径 注意这里可以用绝对路径,或者项目中定义的值作为头文件的路径
[单片机]
STM8 通用异步收发器(UART)
STM8 UART介绍 STM8S微控制器家族的通用同步异步收发器(UART1,UART2或UART3)提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换。STM8的UART提供宽范围的波特率选择,并且支持多处理器讯。UART也支持LIN(局部互连网)协议版本1.3,2.0和2.1以及在主模式下的J2602。UART1和UART2具有以下扩展特征(见表47) UART2和UART3支持LIN从模式。 UART1和UART2支持同步单向通信,也支持智能卡协议和IrDA(红外数据组织)SIR ENDEC规范。 UART1支持半双工单线通讯。 关于每个STM8微控制器型号中的可用UART配
[单片机]
STM8 PCF8591 AD/DA转换子程序
软件设计 /********************************************************************* 目 的: 建立PCF8591操作库 目标系统: 基于STM8单片机 应用软件: Cosmic CxSTM8 *********************************************************************/ #include ws_i2c.h #define MODE0 0x00 #define MODE1 0x10 #define MODE2 0x20 #define MODE3 0x30 #define CHNL0 0 #d
[单片机]
内存扩展测试
AT91SAM9263EK IAR 内存容量从64M扩展到128M basic-lcd-project-at91sam9263-ek-iar\basic-lcd-project-at91sam9263-ek\at91lib\boards\at91sam9263-ek\at91sam9263\sdram.icf /*-Memory Regions-*/ define symbol __ICFEDIT_region_SDRAM_start__ = 0x20000000; define symbol __ICFEDIT_region_SDRAM_end__ = 0x27FFFFFF; basic-lcd-project-at
[单片机]