最近由于项目需要实现IAP的远程在线升级,看了网上的教程发现都不是很详细,不少地方存在错误,对新手带来许多困扰。在此写下这篇IAP配置详解希望能帮助大家少走弯路。废话不多说,开始正题。
这里不再介绍什么是IAP,不懂的可以去看正点原子的视频。
1.首先下载官方的IAP程序,本文基于官方示例进行修改,在文章末尾有链接。
(官方的程序是基于hal库的,这没什么关系)
2.这是文件的目录结构,第一步修改启动文件,
如: STM32F103RCT6选择startup_stm32f103xe.s
STM32F103C8T6选择startup_stm32f103xb.s
。。。
文件在工程目录下的
Bootloader\Drivers\CMSIS\Device\ST\STM32F1xx\Source\Templates\arm中
3.在keil中打开工程后,点击魔术棒开始配置
进入device,选择你的芯片型号。
选完以后会在你的工程目录下出现一个绿色的菱形块,这是keil默认帮我们自动导入的工程文件,我们需要将它删除。右键,选择第一个Options for Component Class …然后将它remove
来到Target下,这里需要修改两个地方。
IROM1中start不变,Size改为0xC000(根据自己实际需要修改)。意思是给bootloader程序留大约48kb的flash。
在右侧IRAM1的地方保持默认即可,我使用的芯片SRAM为48kb,所以size就是C000。
注意:ST在程序中规定Size的大小必须是0x200的整数倍数,也就是512kb的整数倍。这里不能随意填写。
Linker中将图中的勾打上,具体为什么我也不清楚。(我当上就因为这个勾没打debug了三个晚上)
打开menu.c,按图中增加if判断、关闭所有中断( __disable_irq(); )。
其他: 1.在bootloader中不用设置中断相连偏移。
2.在main函数中可以自行写逻辑,判断何时进入升级程序
对比bootload配置更为简单,打开一个已有的工程。
这里以正点原子最简单的跑马灯程序为例。
1.打开main函数,在开头加上__enable_irq();(打开全部中断,刚刚我们在bootload中关闭了,所以这里要重新打开)
2.修改IROM中的Start和size(需要参照刚刚bootloader中的设置,Size大小必须<=总内存大小与bootloader大小之差)
IRAM不变
接下来设置User,用于生产bin文件,第一步,按图示勾选,填什么内容这里不再展开(百度keil生成bin文件)。
仍然必须勾上User Memory Layout from Target Dialog
进入到system_stm32f10x.c文件,修改中断向量偏移(默认是0x0,需要按自己的实际偏移量修改
在使用STM32F103C8T6的时候发现APP无法进入中断的问题。
解决方法:
1.进入APP的main后首先需初始化系统时钟SystemInit();
2。开启总中断__enable_irq();
3.确保已经设置过中断向量偏移
实测在STM32F103RCT6中不会出现上述情况
//STM32F103C8T6 APP配置
int main(void)
{
/*初始化部分 start */
SystemInit(); //初始化系统时钟
__enable_irq();//或使用__ASM("CPSIE I");
//IAP_Init();//初始化IAP
delay_init(72);//延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
USART_DeInit(USART2);
uart2_init(115200);//串口初始化。设置波特率115200
/*初始化部分 end */
/*用户初始化部分 start */
RELAY_Init(); //LED初始化
/*用户初始化部分 end */
/* 其他 start */
/* 其他 end */
while(1)
{
/* 逻辑部分 start */
RELAY0=0;
delay_ms(300);
RELAY0=1;
delay_ms(300);
/* 逻辑部分 end */
}
}
https://download.csdn.net/download/qq_44348665/12140046
基于上述开发了一款上位机软件,可搭配使用进行在线升级,代替了SecureCRT的YModem文件传输功能,还可以进行串口通讯。
下载链接:https://pan.baidu.com/s/1GjMK5oIuUbuCrIBfkX0noQ
提取码:qw7f
如果链接失效:
https://download.csdn.net/download/qq_44348665/12254541