IAP在stm32f103c8t6上的实现

来源:互联网 发布:软件测试需要会什么 编辑:程序博客网 时间:2024/05/22 20:27
       手上的单片机是STM32F103C8T6,ROM容量是64KB,起始地址为 0x0800 0000;RAM容量是16KB,起始地址为0x0200 0000。开发环境是Keil5,用到的工具还有串口助手。我将待下载的程序生成为bin文件,再通过串口助手发送给单片机接收。
       在设计IAP程序时,要考虑ROM和RAM的大小。一方面,APP程序下载到单片机时是存放在ROM中的,如果你想下载多个APP程序,肯定需要ROM大些;另一方面,在串口接收数据时,APP代码首先存在一个数组变量中,这需要占用很大的RAM。我的APP程序是一个简单的灯闪烁程序,仅为验证IAP可行。
       首先要完成bin文件的生成:
       第一步:配置程序到底写在flash的哪个区域。APP代码首先从0x0800 C000 开始写,字长为0x4000,表示给APP代码预留16K的空间,另外48KB全部留给Bootloader程序。RAM不作修改,因为我是写进ROM(即flash)里的呀。由此还可知地址偏移量为0xC000(从0x0800 0000偏到0x0800 C000)
       第二步:在代码初始化阶段添加一条代码: SCB->VTOR = FLASH_BASE | 0xC000;//flash偏移量为0xc000,这是对中断向量表的重定向。
       第三步:配置程序如何生成bin文件。在Option(即配置单片机型号、下载器那个窗口)里找到User,在.....After Build\Rebuild 里 勾选Run#1,并黏贴如下内容:C:\Keil_v5\ARM\ARMCC\bin\fromelf.exe --bin -o "$L@L.bin" "#L"(其中\Keil_v5之前为安装路径)
       第四步:编译程序。在工程文件夹搜索有没有bin格式的文件,应该只有唯一的一个,它就是所谓的APP代码,类似于HEX。
      
       之后就是编写Bootloader程序:
       主要就是两个函数,将APP代码写入flash,和跳转函数。其实不用太深究,会用就好。
0 0
原创粉丝点击