随着性能的不断提高以及成本的降低,单片机在各个领域都得到了广泛的应用。尤其在信号的控制和处理方面,单片机以其超低的功耗、简单的操作成为设计者的首选。TI公司推出的MSP430x5xx系列单片机具有低电压、低功耗、高速处理能力以及配置灵活的接口等特点,是当今主流单片机之一。
同其他处理器一样,单片机正常工作除了需要硬件电路以外,还需要相应的用户应用程序。但应用程序在调试阶段以及实际使用时往往都需要更新,常规的方法需要打开机箱,将仿真器与单片机连接好,再更新程序。这种步骤比较繁琐,如果操作不当还会损坏设备。因此,如果能通过单片机已有的简单接口(如串口)更新应用程序,那么将给单片机的使用带来更大的方便。
1 总体思想
首先通过仿真器向单片机中写入一段小程序,称之为Bootloader程序。这个程序不是用户的应用程序,它的作用有两个:第一是在上电的一小段时间里实时检测串口,如果有上位机发出的更新程序命令,就发送握手信号,通知上位机发送更新代码,并将收到的更新代码写入单片机相应的Flash中;第二个作用是当检测到有应用程序存在时,跳转到应用程序的入口地址,执行应用程序。其流程如图1所示。
上位机程序(VC++语言编写)的功能是,当用户发出更新程序的指令后,在一段时间内连续发送更新程序命令。如果收到单片机的应答信号,表示单片机准备开始接收更新代码。此时上位机读取已选择的代码文件,分段发给单片机。其流程如图2所示。[page]
2 相关知识
2.1 IAR设置
常用的MSP430单片机软件开发环境是IAR C/C++Compiler for MSP430。用仿真器进行程序烧写以及仿真调试时,在Options→Linker→ Output→Format选项中选择的是“Debug information for C-SPY”,但如果要得到该程序文本格式的代码文件,需要选择Format中的Other选项。
2.2 代码文件格式
下面是一个生成的txt文件的内容:
@后面的6C00表示起始地址,接下来的内容需要依次写入6C00开始的地址中。@FCFF表示程序的复位入口地址,单片机上电或者复位后,程序从这里开始运行。最末行q表示结束。
2.3 xcl文件
上面生成的txt文件中的代码存放地址、复位入口地址以及中断入口地址都可以通过配置文件进行修改,这个文件就是xcl文件。该文件在安装目录的IAR Systems\Embedded Workbench 5.4 Evaluation\430\config中,本文所使用的单片机对应的配置文件是lnk430F543 8.xcl,将其复制到自己创建的工程中以便修改。在编译器的Options→Linker→Config→Linker command file选项中指定这个配置文件。
下面是xcl文件中的部分内容:
上面的配置信息含义是代码(Code)和数据常量(Constant data)放在5C00~FF7F和10000~45BFF两个空间中。中断向量的地址是FF80~FFFF,其中复位向量的地址是FFFE~FFFF。
2.4 Bootloader程序和用户应用程序的关系
地址空间分配如图3所示。图3左面是MSP430F5438的空间分配。在正常的使用中,用户代码占用5C00~FF7F、10000~45BFF两块区域,中断向量为FF80~FFFF。但含有Bootloader的程序,就与之有所区别了。即Bootloader程序占用了一部分代码区,同时占有中断向量FF80~FFFF。而用户需要重新编写一个中断向量表,以及相应的入口地址。图3右面是Bootloader程序和用户程序以及自定义的中断向量在Flash中的位置。关于空间位置以及空间大小可以根据实际情况进行调整。
从图中可以看出,在代码空间中存在着两个独立的程序:Bootloader程序和用户程序。Bootloader完成的功能是在复位时通过上位机更新用户程序或者调用已经存在的用户程序。在这里最为关键的是中断向量FF80~FFFF是归Bootloader程序所有的,当有中断发生时,程序首先进入FF80~FFFF空间的地址中(也就是Bootloader的程序中),接着再由Bootloader的中断程序跳转到相对应的用户中断程序中。
[page]
由于用户程序空间以及中断向量都发生了变化,那么需要对配置文件lnk430F5438.xcl的内容进行修改。以图3为例,修改如下:
2.5 上位机程序
利用VC++编写带有串口的上位机程序,按照图2所示的流程完成相应的功能。在操作时,首先打开与单片机连接的串口,选择要更新的文件,之后给单片机上电,就可以进行用户程序的更新了,上位机界面如图4所示。
结论
通过增加一个Bootloader程序,引出一个串口就可以更新程序,使更新程序变得更加容易,在实际使用中起到了事半功倍的效果。此种方法也同样适用MSP430其他系列的单片机。
关键字:MSP430F5438 串口 程序更新
引用地址:
MSP430单片机串口的程序升级方法
推荐阅读最新更新时间:2024-03-16 12:45
STM32串口发送数据第一个字节丢失的解决办法
1.代码 void Uart1SendData(uint8_t Sdata) { while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET); USART_SendData(USART1, Sdata); } 2.分析 发送数据前先执行 while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET); 即可解决。
[单片机]
STM32 串口初始化时的BUG
单片机:stm32f103vet6 平台:野火STM32开发板 问题描述:串口在初始化(还未发送任何数据)的时候,PC端会接收到一个字节的乱码 状态:未解决 我调试串口的步骤一般是先初始化UART,然后printf重定向,最后在串口助手里面打印出一些数字。调试还算顺利,成功打印出一行数据。但是每次复位的时候,第一个字符之前都有会多出一个乱码,起初以为是TC置1的问题,改了好几遍都没有效果,后来想一想,TC置1的问题是发送的第一个字符丢失,现在的问题是,第一个字符不丢失,而是第一个字符前出现一个乱码。 串口助手设置十六进制显示,发现在最开始的时候会打印一个字符0xFE。 单步调试发现在串口初始化前的GPIO初始化USART1的TXD
[单片机]
STM32 USB虚拟串口问题汇总
汇总1:STM32的USB例程修改步骤,来自http://blog.csdn.net/cy757/archive/2010/01/01/5117610.aspx 以下是笔者将ST的Custom_HID例程修改为“自定义USB设备”例程时总结出来的,因为笔者也是刚刚学USB开发不久,某些方面理解错误在所难免,请各位大虾指正。 一、usb_desc.c文件 根据你程序使用的通信方式修改。usb_desc.h文件中定义要根据usb_desc.c文件中的数组的大小;ConfigDescriptor 下添加需要处理的端点;根据需要添加或删除报告描述符(主要用于HID)和CDC接口描述符(主要用于实现USB转串口)等。具体方法可以下载个“
[单片机]
基于LabVIEW串口通信的数据采集串口收录系统设计
可视化编程软件LabVIEW不仅能很轻松地将各种软硬件连接起来,还提供了强大的后续数据处理能力。与传统仪器相比,虚拟仪器提高了仪器资源的可再用性和可移植性,只需在原有基础上作相应改动即可增强它的功能,无需更换硬件设备 。基于此,本文在研究LabVIEW的基础上,开发了基于LabVIEW的串口收录系统,以单片机为核心的硬件部分作为前端数据采集系统,可实现200 kHz的采样速率、16 bit的分辨率,具有采样率高、应用性强等优点。该收录系统将采集数据以曲线方式显示在上位机上,以二进制.dat格式记录,并且可回放记录的数据,这是该系统的创新点。 1 系统总体方案 系统总体方案框图如图1所示,主要由前端数据采集和上位机波形显示记录两大
[测试测量]
ARM芯片(S5PV210芯片)——串口通信详解
1、电子通信的基本概念 1.1、同步通信和异步通信 1.同步通信:通信双方有统一的工作节拍,一般需要发送方给接收方发送信息的同时发送时钟信号,接收方根据发送方给它的时钟信号来安排自己的工作节奏。同步通信用在通信双方信息交换频率固定,或者通信频率比较高的场景。 2.异步通信:又叫异步通知,简单来说就是发送方不必考虑接收方,想发信息就发信息,没有固定的工作节拍。但是需要遵循一定的通信协议,比如发送方发送信息时,需要先发起始位通知接收方,然后发送数据,数据发送完成要发结束位表示一帧数据发送完成。 区别: (1)同步通信有统一工作节拍,异步通信没有统一工作节拍。一般来说,同步通信的连接线里有一根是时钟信号线。 (2)同步通信适合通信频率固
[单片机]
C51串口中断接收和发送程序
//这是一个单片机C51串口接收(中断)和发送例程,可以用来测试51单片机的中断接收 //和查询发送,另外我觉得发送没有必要用中断 #include reg51.h #include string.h #define INBUF_LEN 4 //数据长度 unsigned char inbuf1 ; unsigned char checksum,count3; bit read_flag=0; void init_serialcomm( void ) { SCON = 0x50; //SCON: serail mode 1, 8-bit UART, enable ucvr TMOD |=
[单片机]
51单片机串口T1加看门狗程序
数码管部分的电路图 程序: #include reg52.h #define UCHAR unsigned char #define UINT unsigned int sfr WDT_CONTR = 0xe1; UCHAR table = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; UCHAR timer; UCHAR conter; void initserial(void) { timer='0'; conter=0; TMOD=0X20; SCON=0X50; TL
[单片机]
采用PROFIBUS-DP的FCS的诊断软件开发
PROFIBUS是工业自动化领域内市场占有率最高的一种现场总线技术,它包括用于制造业自动化的PROFIBUS-DP和用于流程工业领域的PROFIBUS-PA,它是目前我国惟一的现场总线国家标准。随着越来越多工业控制系统采用了PROFIBUS现场总线技术,对这些控制系统进行具体的、直观的和实时的在线分析与诊断成为了最基本的要求,要想完成这样的任务,就需要有相应的工程分析诊断工具。国内外目前所研究的这些总线性能分析诊断工程工具存在着功能不够全面、界面不够完善、价格昂贵、不适合中国国情等问题。开发一款能够对总线系统进行分析和诊断,方便的、性能价格比高的分析诊断工程工具必将成为急需的产品。 由于在PRIFBUS传输报文可以反映出总
[工业控制]