历史上的今天
今天是:2025年01月07日(星期二)
2019年01月07日 | IAP在stm32f103c8t6上的实现
2019-01-07 来源:eefocus
手上的单片机是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,和跳转函数。其实不用太深究,会用就好。
史海拾趣
|
本帖最后由 paulhyde 于 2014-9-15 09:39 编辑 大家FPGA与单片机用的什么通信模式呢?串口和并口哪个好做啊?不知哪里有相关资料可供下载阿…… … 查看全部问答> |
|
高分求助!EVC4.0环境,就一个.c文件(demo.c),为什么不包含 dshow.h 时编译通过,包含时就出一大堆错误呢? 用的是EVC4.0开发环境,就一个.c文件(demo.c),文件内容非常简单,为什么不包含 dshow.h 时编译通过,包含时就出一大堆错误呢? #include //#include // 不包含 dshow.h 编译通过,包含时就出一大堆错误,见后面。 int W ...… 查看全部问答> |
|
各位高手: 小弟使用美光的MT9D111摄像头,使用中发现LCD显示屏背景偏暗(LCD使用其它功能正常),同时横向布满密集的红色的线条,导致拍摄时图像不清晰。 不知道该怎么调节,高手们救我啊! ...… 查看全部问答> |
|
求高手,ucos2是一个多任务但是不是多进程的操作系统,但是我在一篇论文中看到,在经过几个函数的修改后,ucos可以完成多任务多进程来跑起来,最突出的实验是建立多个相同优先级的任务时,ucos可以按照时间片轮转法来执行在相同优先级的多个任务, ...… 查看全部问答> |




