当前位置:首页 > > strongerHuang
[导读]关注、星标公众号,不错过精彩内容 作者:strongerHuang 对于软件工程师来说,代码升级(或程序更新)算是必备基础知识。 下面将介绍关于编程的基础知识,以及结合STM32官方提供的Demo讲述一下关于编程的内容。 一、关于ISP、ICP、IAP 1.ISP ISP:In System P


关注、星标公众,不错过精彩内容

作者:strongerHuang


对于软件工程师来说,代码升级(或程序更新)算是必备基础知识。


下面将介绍关于编程的基础知识,以及结合STM32官方提供的Demo讲述一下关于编程的内容。


一、关于ISP、ICP、IAP

1.ISP

ISP:In System Programing,在系统编程。
比如:使用STC-ISP对STC芯片编程,利用Flash loader对STM32编程等。
支持ISP的芯片一般在芯片内部固化了一段(用ISP升级的boot程序

2.ICP
In Circuit Programing,在电路编程。
ICSP:In-Circuit Serial Programming,在电路串行编程 。如:对EEPROM编程等。

ICP编程方式网上各说法,从字面含义(在电路)来说,所有处于编程的芯片都需要上电,都处于电路中。不严格来说利用J-Link、ST-Link、e-Link32等工具进行编程也属于在电路编程(ICP)。

在维基百科中,在系统编程(ISP),也称为在电路串行编程(ICSP)。

3.IAP
In applicating Programing,在应用编程。
这里是本文说的重点,可以简单理解为:在程序运行的过程中进行编程(升级程序,更新固件)。

IAP是 用户自己的程序在运行过程中对User Flash的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口对产品中的固件程序进行更新升级。[来自百度百科]

IAP通信口
IAP的通信口有许多种:UART串口、ETH以太网、I2C、SPI......等。按理说只要能传输数据的通信口都能实现IAP的功能。

本文结合STM32官网提供的例程,利用UART在应用编程(IAP)。

二、关于Ymodem协议
YModem是一种文件传输的协议,由XModem协议演变而来的,每包数据可以达到1024字节,是一个非常高效的文件传输协议。

更多介绍可参考百度百科:

https://baike.baidu.com/item/Ymodem


协议传输流程:


其中几个字符的ASCII码

字符 ASCII码16进制
SOH 0x01
STX 0x02
ACK 0x06
NAK 0x15
EOT 0x04
C 0x43

1.起始帧
SOH + 00 + FF + filename + filesize + NULL + CRCH + CRCL

起始帧是文件传输发送端发的第一条重要消息.
filename表示传输文件的文件名.
filesize表示需要传输文件的大小.
CRCH + CRCL 表示整条帧(去掉前三个字节)的CRC16校验.

2.数据帧格式
STX/SOH + [编号] + 编号的反码 + data[0] + data[1] + data[2] + … + CRCH + CRCL

SOH 表示有128个字节, 有的也只用SOH传输数据.
STX 表示有1024个字节.

CRCH + CRCL 表示整条帧(去掉前三个字节)的CRC16校验.
如果传输最后一条字节不足128个字节, 则用1A填充

3.结束帧的数据格式
SOH + 00 + FF + NULL + NULL + … + NULL + CRCH + CRCL

以上部分内容授权转自:

https://blog.csdn.net/weixin_41294615/article/details/104652105


三、ST官网IAP例程
ST官网提供的IAP例程有很多很多,比如:
库:有使用标准外设库(SPL)的、有使用硬件抽象层库(HAL)的;
通信口:有使用USART的,有使用I2C的,有使用ETH的等。
MCU型号 :STM8S、STM32F1、F4、L1等几乎全系列都有。

ST官网提供的各种IAP,其方法和原理其实都类似:就是将程序文件(二进制文件)写入FLASH。
本文以最简单的基于(STM32F10x)利用SPL库+UART的IAP为例来给大家讲述一下。(复杂都是从基础开始,后续逐步为大家更新更高级的IAP功能)


STM32F10xxx in-application programming using the USART官方地址:

https://www.stmicroelectronics.com.cn/content/st_com/en/products/embedded-software/mcus-embedded-software/stm32-embedded-software/stm32-standard-peripheral-library-expansion/stsw-stm32008.html

提示:公众号不支持外部链接,请复制链接到浏览器下载


相关参考文档和代码例程都在这个网址下载,下一章节针对这里该IAP讲述几点重要内容。


我下载后上传至百度网盘地址:

https://pan.baidu.com/s/1umdwlShsJpL8rLdeb9n6Cw

密码:2t3j

提示:该链接后期可能会失效,建议到官网下载


四、IAP例程几个要点

1.例程概要说明

该代码工程基于STM32F1,使用UART通信口,利用超级终端(上位机)、通过YModem协议实现代码程序的数据传输和写入Flash


2.IAP软件工程

我们解压(上面)下载好的软件工程包,进入目录,通过MDK-ARM(为例),如下图;

本文以MDK-ARM为例,你也可以通过EWARM、TrueSTUDIO等工具打开。

因该工程代码是之前用MDK-ARM V4版本建立的,现在用V5版本打开会提示如下信息:


只需要点击“Migrate to Device Pack”即可,V5版本使用了“设备支持包”,这里大概意思就是使用设备支持包兼容以前老版本工程。


选择对应的目标(我们以F103ZE为例,选择大容量、小容量在于他们的FLASH页大小不一样),选择10E-EVAL,如下图:


直接编译,没有错误警告,此时,如果有对应的板卡,可直接下载。


提示

1.前提:MDK下载、安装

2.什么是目标? 简述工作空间、工程、目标


3.说明

这个程序只是IAP程序,放在以0x0800 0000为起始的地址。而IAP程序的作用是将应用程序(二进制文件)下载到应用程序对应的地址。


因此,我们会将FLASH划分我两个区域:IAP程序区域,APP程序区域。


这里IAP程序有两个作用:1.对APP程序编程;2.引导程序跳转至应用程序。所以,这段APP程序也叫BootLoader


为防止IAP程序不被(第一部分代码)不被意外破坏,一般建议对IAP程序进行“写保护”。


这个APP地址0x0800 3000是怎样来的呢?

见IAP程序代码:


所以,我们APP应用程序的其起始地址就必须对应为0x0800 3000 才行。不然,跳转之后没有应用程序,则会出错。


提示:

它这里是通过按键方式选择执行IAP,还是执行APP;一般建议通过倒计时(比如5s):5s之内通过串口选择下载,否则自动跳转到APP程序执行。这里就需要自己根据情况修改代码。


Demo里程可以通过选择3跳转到APP程序,初学者可以直接不使用按键判断,进行测试,如下图,修改一下:


五、APP代码和地址问题

上一章节是讲述的IAP程序,本节讲APP程序修改地址的问题。

1.添加代码

在代码开始设置向量表偏移:

NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x3000);


0x3000代表偏移量


2.修改配置

project -> Options 


3.生成Bin

具体可以参看我另外一篇文章:

MDK-ARM如何生产Bin文件


4.APP程序代码

为方便大家学习,我提供在按照上面修改过的APP代码工程给大家下载,地址和上面一样:

https://pan.baidu.com/s/1umdwlShsJpL8rLdeb9n6Cw

密码:2t3j


六、超级终端安装,程序下载

1.超级终端下载、安装

官方提供的文档是HyperTerminal超级终端下载程序,这个可以百度谷歌搜索下载安装。我这后面一直使用SecureCRT这款终端,这终端属于商业软件,但在网上可以找到很多po解的办法。


为方便大家调试,我这里提供下载链接

https://pan.baidu.com/s/13yjA9q0Eltfer4oLPbGceQ

密码:5r5m

提示:该链接后期可能会失效,建议到官网下载


2.程序下载

硬件连接好,将生成的程序文件(Demo.bin)放在指定位置(为方便测试下载,我拷贝到桌面)-> 打开终端 -> 键盘按1 ->选择文件 ->下载完成 -> 键盘按3 执行程序。



以上内容就是关于STM32 + IAP + Ymodem的基础知识和例程说明,希望对你有帮助。


推荐阅读:
为什么我国电网交流电是50Hz?
电子设备"叽"的噪音是什么引起的?
STM32CubeMonitor如何监测程序中的变量

关注 微信公众号『strongerHuang』,后台回复“1024”查看更多内容,回复“加群”按规则加入技术交流群。


长按前往图中包含的公众号关注

免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭