技术领域
[0001] 本
发明涉及一种串行升级和调试的方法,特别涉及一种基于Labwindows平台进行单片机串行升级和调试的方法。
背景技术
[0002] 随着嵌入式技术的快速发展,微
控制器越来越广泛应用于工控产业。由于工控产业的行业规范和工业标准
迭代更新速度越来越快,
微控制器的开发周期也要随之变短,微控制器的
软件功能更新也要越来越快。使用BootLoader程序进行烧录程序可以提高工作效率,减少工程师出差成本。
[0003] 对于当前嵌入式微控制器来说,主要的烧写程序方法有:(1)借助专用烧录器(例如J-link、U-link、ST-link等),在
硬件电路上预留JTAG或者SW
接口直接进行烧录;(2)利用微控制器内部BootLoader加载程序,硬件设计接口进行烧写。第一种方法主要应用于
电路板开发阶段,工程师直接通过烧录器进行仿真下载,便于开发时实时
跟踪的调试。但是面对工程应用环境中需要拆卸机加
工件壳,不便操作,且专用烧录器成本高,维护困难。第二种方法可以直接通过预留的接口,根据通信协议传输文件,接线进行下载升级,比较灵活。经过实验验证第二种方法的可靠性,能够满足预期目标。
发明内容
[0004] 发明目的:为克服
现有技术的
缺陷,本发明提出了一种基于Labwindows平台进行单片机串行升级和调试的方法。
[0005] 技术方案:本发明的基于Labwindows平台进行单片机串行升级和调试的方法包括以下步骤:
[0006] (1)通过烧录器在flash
存储器的起始地址处烧写Bootloader代码部分,所述Bootloader代码部分用于接收程序或数据,以执行对用户代码部分的升级或调试;所述用户代码部分存储在所述flash存储器中,且位于所述Bootloader代码部分对应的地址之后;
[0007] (2)单片机运行flash存储器中的Bootloader代码部分以执行以下操作:
[0008] (21)进行时钟配置和串口配置的初始化;
[0009] (22)进入检测期间,如果在检测期间单片机与上位机握手成功并且接收到上位机对于所述用户代码部分的升级指令或调试指令,则根据对应指令进入升级过程或调试过程,并在升级过程或调试过程完成后自动切换以运行用户代码部分;如果在检测期间未收到上位机的升级指令或调试指令,则自动切换以运行用户代码部分;其中,所述上位机中包括用于控制所述单片机的控制软件,所述控制软件中的控制代码部分是通过Labwindows平台编写的。
[0010] 进一步地,上述方法还包括以下步骤:(3)在单片机运行用户代码部分时,如果单片机接收到上位机的进入Bootloader指令,则返回步骤(2)。
[0011] 步骤(22)中,所述上位机是通过所述单片机的挂载于总线上的接口与所述单片机进行连接的。所述上位机具有
人机交互界面以便于工程师对所述升级过程和调试过程进行现场操作。单片机与上位机握手成功后,单片机还向上位机发送响应消息以提示上位机可以发送升级指令或调试指令。初始化完成后进入检测期间之前还需要关闭看
门狗和进行中断初始化。所述升级过程包括:所述上位机软件读取需要升级的目标文件并且根据协议内容发送给单片机,以对用户代码部分进行烧写。所述调试过程包括:单片机在上位机的控制下
修改和/或读取单片机flash存储器中用户代码部分对应的
指定位置数据,并在数据修改和/或读取完成以后,将版本信息发送至上位机以直接挂载于总线使用。
[0012] 有益效果:与现有技术相比,本发明具有以下优点:
[0013] (1)通过在总线上接线进行下载升级可软件复位,不需要拆卸机壳和硬件断电复位,提高升级效率。
[0014] (2)升级完成后可修改单片机flash指
定位置数据,设置完成可读出版本信息和直接挂载于总线使用。
附图说明
[0017] 图3为本发明的硬件简化电路图;
[0018] 图4为本发明选取的单片机的闪存模
块组织;
[0019] 图5为本发明中上位机的软件界面1;
[0020] 图6为本发明使用到Ymodem协议部分;
[0021] 图7为本发明中上位机的软件界面2;
[0022] 图8为本发明中上位机的实际应用图。
具体实施方式
[0023] 以下结合附图和
实施例对本发明进行详细说明。
[0024] 本实施例采用的单片机选取为Stm32F103系列,该款单片机涵盖了工业、医疗和消费市场中各种应用的需求。高性能、一流的
外围设备和低功耗、
低电压操作与高集成度相结合,价格低廉,结构简单,易于使用。
[0025] 如图1,本实施例的方法包括如下步骤:
[0026] 步骤一:通过烧录器在flash存储器的起始地址处烧写Bootloader代码部分,Bootloader代码部分用于接收程序或数据,以执行对用户代码部分的升级或调试;用户代码部分存储在flash存储器中,且位于Bootloader代码部分对应的地址之后。
[0027] BootLoader代码部分通常在出厂之前第一次烧录时使用J-link烧写。该部分代码用于实现通过某种通信方式(如USB,USART)接收程序或数据,执行对第二部分代码(即用户代码)的更新升级。此段代码与硬件设计电路匹配,只有在更换硬件电路时需要重新烧录,系统框图如图2所示。第二部分是用户代码生成文件,该部分代码是产品实现业务逻辑正常运行的代码,该部分代码需要在存储的flash中进行相对的地址偏移。
[0028] 步骤二:单片机运行flash存储器中的Bootloader代码部分以执行以下操作:
[0029] (21)进行时钟配置和串口配置的初始化;
[0030] (22)进入检测期间,如果在检测期间单片机与上位机握手成功并且接收到上位机对于用户代码部分的升级指令或调试指令,则根据对应指令进入升级过程或调试过程,并在升级过程或调试过程完成后自动切换以运行用户代码部分。如果在检测期间未收到上位机的升级指令或调试指令,则自动切换以运行用户代码部分。其中,上位机中包括用于控制单片机的控制软件,控制软件中的控制代码部分是通过Labwindows平台编写的,可以用于传输需要烧录的用户代码部分的相关文件。
[0031] 步骤三:在单片机运行用户代码部分时,如果单片机接收到上位机的进入Bootloader指令,则返回步骤二。
[0032] 下面对本实施例所涉及的硬件设计和软件设计进行介绍。
[0033] 硬件设计
[0034] 如图3所示硬件电路较为简单,本实施例使用的是Stm32F103的串口进行通信和下载程序,需要注意留下接口为:J-link烧录接口、串口与485芯片(ST1480ABDR)相连进行差分接收便于抑制干扰。此外上位机软件需要使用电脑的USB转485接口。图中电源、接地、保护电路和稳压电路等均未画出。
[0035] 软件设计
[0036] BootLoader程序部分
[0037] 首先查找Stm32F103手册,判断Flash内存大小。该款单片机用户使用的主存储快工128K,将其划分为:0~15页,共15k用来存放BootLoader代码,在该部分代码主要进行配置系统时钟初始化为12MHZ、配置
定时器、配置GPIO口为复用推挽输出和复用输入模式、配置用于BootLoader升级的串口(考虑到总线只用来进行BootLoader一组通信,所以设置最高速率115200波特率)。
[0038] 由于本实施例的通信升级程序使用的是阻塞形式不能被中途打断,所以初始化过程结束后首先要关闭看门狗(即定期的查看芯片内部的情况,一旦发生错误就向芯片发出重启
信号的电路)和中断初始化,此时的程序中断由
操作系统直接控制。然后打开一个系统时间定时器,判断系统时间常量来控制程序上电以后等待10s握手,此时握手成功则进入通信升级过程,如果等待10s后未进行握手则把函数跳入用户代码区域进行正常运行。
[0039] 更新服务程序通过485通信端口来接收Labwindows上位机编写的软件传送来的程序数据,由于数据量较大且需要多次传输,为增加程序的可靠性和
稳定性,BootLoader程序对接收的数据进行CRC16校验,在数据格式的
帧头帧尾正确和CRC校验正确后,将正确的程序数据覆写到flash的指定地址空间(我这里划分页16~61页一共45k存放用户代码,其余页面存放一些需要保存的参数变量)。接受完最后一帧数据且正确写入flash区域后,进行程序软复位,把函数跳入用户代码区域进行正常运行,同时把写在单片机flash里的硬件版本信息发送给上位机,用户以此判断程序是否对应。
[0040] 用户代码部分
[0041] 此处代码主要是针对即将应用的用户代码进行一些设置。本实施例使用的是keil软件进行编程,在设置好单片机型号和主频后完成代码。由于单片机Flash部分的0~15页用于存放不可覆写的BootLoader对接程序,所以需要设置地址偏移量和堆栈偏移量。程序首地址为flash首地址+偏移量。
[0042] #define USER_FLASH_PAGE_ADDRESS 0x08004000
[0043] #define USER_FLASH_END_ADDRESS 0x0801FC00/*113KBytes*/
[0044] #define FLASH_PAGE_SIZE 0x400 /*1Kbytes*
[0045] 还需要注意在生成代码同时,根据生成.axf临时文件生成.bin文件用于上位机软件加载解析发送。由于BootLoader程序设置为上电后前10s执行,所以在用户代码中加入一条指令用于软件复位,这样可以在不需要断电上电的情况下执行上位机和用户代码通信升级程序,减少了频繁断电上电对于硬件电路的影响。
[0046] 上位机软件部分
[0047] 上位机软件部分主界面为图5所示。由于USB转485需要占用电脑上一个串口,所以在运行上位机程序后,先试图打开0-40个串口。如果串口驱动加载完成则可以被成功打开,发现任意串口可以打开后此时记录电脑使用的串口编号并关闭此串口,继续向后查找可用串口。所有串口执行完后,将记录的串口编号显示提供用户选择,按照BootLoader程序可配置串口波特率。然后进入烧写界面,函数在此时主要进行加载烧录文件和Ymodem协议(图6中给出)的解析过程。
[0048] 上位机软件根据BootLoader部分握手成功后加载烧录文件并解析,解析完成后作为升级指令的一部分进入阻塞式发送。此时考虑到烧录文件一般较大,所以每次传输1024字节。单片机将一帧数据全部字节经过CRC16校验成功后返回校验结果,上位机根据校验结果选择是否重发数据或者打包下一帧数据发送。每当一帧数据验证完成,程序进行记录并显示烧写进度。
[0049] 在烧写完成用户代码后,上位机软件自动转到如图7所示的界面2部分。由于总线下会挂载多个从设备,所以主机需要根据不同设备的设备地址进行分类控制。在此部分可以对于设备的设备地址和设备编号进行写入flash、读取设备flash中的版本信息,便于测试人员测试和总设备进行调控,不需另行设置,实际应用如图8所示。
[0050] 以上所述仅为本发明的一个示例,本发明的保护范围并不以上述实施方式为限,但凡本领域普通技术人员根据本发明所揭示内容所作的等效修饰或变化,皆应纳入
权利要求书中记载的保护范围内。