IAP:在线升级代码 ,通俗的讲就是通过USART,IIC,或者SPI,USB等等,方式,在程序中升级程序,一般用在远程升级,或者是在PCB板子都安装到模具之后还需要升级代码,这样我们就需要,通过IAP的方式来升级。

软件代码托管码云地址:https://gitee.com/zyzp/stm32UartIAP

开发环境:MDK-V5,stm32cubeMx,SecureCRT8

硬件平台:stm32f103系列最小系统板,带有swd仿真接口和串口1

1、从st的官方获取到IAP的工程,http://www.st.com/content/st_com/en/products/embedded-software/mcus-embedded-software/stm32-embedded-software/stm32cube-expansion-packages/x-cube-iap-usart.html

一路拉到最下面

下不了怎么办,自己想办法,需要填姓名邮箱等等,完事,人家会给你的邮箱发一条邮件,里面是下载链接。点开后多等一会,毕竟是国外的网站,别等不及,连着重复的去点那个按钮,没用的,如果还是下载不了,那就找我吧,我这儿有下载好的,留言或者邮件我都会回你的。

2、下载完了,解压之后点开里面有三个工程分别是l073,l469,f10的,根据需求自己选合适的,f10X的点开直接编译就可以,但是l073,和l469的点开发现没有库文件,我的天啊,这怎么办啊,哈哈,没关系了,接着向下看吧,

3、我们现在打开stm32cubeMx,根据自己的需求生成一个带串口和CRC的工程,没有CRC直接带串口就可以了,需要注意的几个地方,时钟配置,一定要根据自己实际的情况去配置时钟,串口的位数,如果使用了校验位,一定要在数据位多加1,8bit的数据位,1bit的校验位,一定要设置9bit的数据位,唉,到处都是坑,好了,可以导出工程了,导出来之后,测试一下串口功能是不是有效的,main函数里面自己写吧,实在不会,可以找我的。。。嘿嘿,完事之后备份一份这个代码,一会app代码也在这个里面写。

4、好了,我们现在有一个属于自己的带有串口的工程了,接着打开之前从官方下载的工程,把里面的Inc和Src文件夹拷贝过来,拷贝到我们的自己工程的路径下面,本来有的文件选择跳过就可以,一定不要替换。

5、接下来给工程里面添加文件,把该添加的都添加进去,主要有common.c,ymodem.c,menu.c,flash_if.c,应该是就这四个文件了,好了编译试试,哇,一大堆错误,别着急咱们一点一点的改,首先要改的是串口的句柄名称,和crc的句柄名称,可以改成统一的就可以,随便,我配合你你配合我的,无所谓了,改完之后在common.h里面添加你的usart.h有文件,随便你怎么,看你自己怎么添加咯,最后一点参考官方代码修改你的main文件,顺便把该有的错误都改了,完事下到MCU里面

6、现在我们来看看app代码怎么写,打开我们之前备份好的代码,修改的几个地方,看下面的截图

MDK里面点开魔术棒,修改Start的地址为你在之前的IAP代码里面写的地址,Size的大小是,你的全部地址,减去IAP代码占有的大小。然后在main函数里面添加下面一句代码,设置中断的向量的地址,

  1. SCB->VTOR = FLASH_BASE | 0x4000;

0x4000是你的IAP程序的大小

MDK里面如下设置,生成bin文件

7、生成之后,用超级终端或者SecureCRT8就可以烧录了

STM32 IAP+Ymodem功能实现(参考官方代码)的更多相关文章

  1. STM32 IAP程序 源码 和测试代码 有详细的中文注释

    http://bbs.21ic.com/forum.php?mod=viewthread&tid=588265&reltid=624002&pre_pos=2&ext= ...

  2. STM32 IAP 升级功能

    IAP In Application Programming 可通过USB,CAN,UART,I2C,SPI等接口实现 IAP流程 Bootloader程序:接收升级程序,更新到flash指定地址:跳 ...

  3. STM32 IAP 固件升级设计/U盘升级固件

    源:STM32 IAP 固件升级设计/U盘升级固件 固件升级的基本思路是: 将stm32 的flash划分为两个区域: 1.Bootloader区:存放bootloader的代码,bootloader ...

  4. stm32 IAP + APP ==>双剑合一

    (扩展-IAP主要用于产品出厂后应用程序的更新作用,上一篇博文详细的对IAP 升级程序做了详细的分析http://blog.csdn.net/yx_l128125/article/details/12 ...

  5. stm32 IAP + APP ==>双剑合一(转)

    源:http://blog.csdn.net/yx_l128125/article/details/13591743 (扩展-IAP主要用于产品出厂后应用程序的更新作用,上一篇博文详细的对IAP 升级 ...

  6. STM32 IAP 在线升级详解(转)

    源:http://blog.csdn.net/yx_l128125/article/details/12992773 (扩展-IAP主要用于产品出厂后应用程序的更新作用,考虑到出厂时要先烧写IAP   ...

  7. STM32 IAP docs

    /********************************************************************************* * STM32 IAP docs ...

  8. STM32+IAP方案 实现网络升级应用固件

    关注了这个概念有些日子了,这段时间总算有机会实战==网络升级应用固件,这里记录下遇到的问题,及解决方案. 原理与网上流传的串口作为传输手段 一致:不同之处,无非我这里使用了网络设备传输.==(lwip ...

  9. 【转载】STM32 IAP 在线升级详解

      (扩展-IAP主要用于产品出厂后应用程序的更新作用,考虑到出厂时要先烧写IAP  再烧写APP应用程序要烧写2次增加工人劳动力基础上写了“STM32 IAP+APP ==>双剑合一”链接稍后 ...

随机推荐

  1. 跟我学算法-pca(降维)

    pca是一种黑箱子式的降维方式,通过映射,希望投影后的数据尽可能的分散, 因此要保证映射后的方差尽可能大,下一个映射的方向与当前映射方向正交 pca的步骤: 第一步: 首先要对当前数据(去均值)求协方 ...

  2. Unity 输入与控制

    1. 鼠标输入 有关的方法和变量如下: 在 Unity 中,鼠标位置用屏幕的像素坐标表示,屏幕左下角为(0,0),右上角为(Screen.width,Screen.height). 2. 键盘操作 有 ...

  3. ubuntu 下安装nanomsg和nnpy

    nanomsg nanomsg是ZeroMQ作者用C语言重写的一个Socket库,其用法和模式和ZeroMQ差不多,但是具有更好的性能和更完善的接口. 首先下载源码 wget https://gith ...

  4. MyBatis 与 Hibernate对比

  5. 关于StringUtils类isEmpty、isNotEmpty、isBlank、isNotBlank针对null、空字符串和空白字符(如空格、制表符)的区别

    isEmpty | null | 空字符串("")|空白字符(空格.制表符)| | isEmpty | true | true | false | | isNotEmpty | f ...

  6. java.lang.NoSuchMethodError: org.springframework.dao.IncorrectResultSizeDataAccessException

    spring data jpa  运用,在dao类中写自己新增的方法,使用@query写hql语句,出现以下异常: Caused by: java.lang.NoSuchMethodError: or ...

  7. Reducing File Size

    [Reducing File Size] 1.Unity strips out unused assets. The amount of assets in your project folder d ...

  8. highchart 曲线图

    $(function() { Highcharts.setOptions({ global: { useUTC: false } }); var chart = new Highcharts.Char ...

  9. 26-三个水杯(bfs)

    三个水杯 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个为空杯子.三个水杯之间相互倒水,并且水杯没有 ...

  10. sql查询exist替换in

    很多时候用 exists 代替 in 是一个好的选择: select num from a where num in(select num from b) 用下面的语句替换: select num f ...