随着性能的不断提高以及成本的降低,单片机在各个领域都得到了广泛的应用。尤其在信号的控制和处理方面,单片机以其超低的功耗、简单的操作成为设计者的首选。TI公司推出的MSP430x5xx系列单片机具有低电压、低功耗、高速处理能力以及配置灵活的接口等特点,是当今主流单片机之一。
同其他处理器一样,单片机正常工作除了需要硬件电路以外,还需要相应的用户应用程序。但应用程序在调试阶段以及实际使用时往往都需要更新,常规的方法需要打开机箱,将仿真器与单片机连接好,再更新程序。这种步骤比较繁琐,如果操作不当还会损坏设备。因此,如果能通过单片机已有的简单接口(如串口)更新应用程序,那么将给单片机的使用带来更大的方便。
1 总体思想
首先通过仿真器向单片机中写入一段小程序,称之为Bootloader程序。这个程序不是用户的应用程序,它的作用有两个:第一是在上电的一小段时间里实时检测串口,如果有上位机发出的更新程序命令,就发送握手信号,通知上位机发送更新代码,并将收到的更新代码写入单片机相应的Flash中;第二个作用是当检测到有应用程序存在时,跳转到应用程序的入口地址,执行应用程序。其流程如图1所示。
上位机程序(VC++语言编写)的功能是,当用户发出更新程序的指令后,在一段时间内连续发送更新程序命令。如果收到单片机的应答信号,表示单片机准备开始接收更新代码。此时上位机读取已选择的代码文件,分段发给单片机。其流程如图2所示。
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的中断程序跳转到相对应的用户中断程序中。
由于用户程序空间以及中断向量都发生了变化,那么需要对配置文件lnk430F5438.xcl的内容进行修改。以图3为例,修改如下:
2.5 上位机程序
利用VC++编写带有串口的上位机程序,按照图2所示的流程完成相应的功能。在操作时,首先打开与单片机连接的串口,选择要更新的文件,之后给单片机上电,就可以进行用户程序的更新了,上位机界面如图4所示。
结论
通过增加一个Bootloader程序,引出一个串口就可以更新程序,使更新程序变得更加容易,在实际使用中起到了事半功倍的效果。此种方法也同样适用MSP430其他系列的单片机。
关键字:MSP430 单片机 串口
引用地址:
MSP430单片机串口应用程序更新的方法解析
推荐阅读最新更新时间:2024-11-07 19:56
采用Atmega32单片机车门压力测试仪制作
车门压力测试仪为便携手持式结构,采用专用压力测试传感器和测试管理系统组成,专门用于检测地铁车辆客室车门关紧力、最小障碍物探测,及车门防夹保护功能检测。设备能够设置和记录开关门次数、时间、试验项目,系统可以自动有效的完成试验要求并自动记录试验结果生成报表。 车辆车门尤其是列车等高速运行车辆的车门是一个安全性能要求较高的产品,其各项性能指标必须保持在一个相对安全的取值范围内,以保证车辆的安全运行。这不仅要求制造厂家在产品制造过程中需要测试这些参数,同时在产品投入使用后的检修保养过程中也需要检测这些参数,做为产品的安全使用提供必要的参考信息;长期以来,由于我国对检测仪器的研制重视不够,通常的检测手段主要是靠检测人员借助多种手工工具辅
[测试测量]
HCS12系列单片机的两种加密解密方法
在HCS12系列单片机中,加密可以分成两种方法:完全加密和使用密码的加密。这两种加密的方法根据用户的需求,使用的场合也有所不同。 完全加密 所谓完全加密,就是将芯片彻底的保护起来,屏蔽对芯片的所有读操作。在MC9S12DP256单片机中,加密是通过对某一Flash单元($FF0F)编程来实现的。加密后的芯片,BDM编程器对Flash的读操作就被禁止了。 采用完全加密,读取ROM代码的可能性就不存在了,这是一种最为 安全 的加密方法。如果用户 想修改ROM的内容,唯一的办法就是将Flash的内容全部擦除,这一操作可以通过BDM编程器来完成。 使用BDM编程器擦除Flash ROM和EEPROM的过程与在
[单片机]
[单片机框架][bsp层][cx32l003][bsp_crc] 硬件CRC配置和使用
循环冗余校验(CRC)计算单元是根据固定的生成多项式得到任意字节数据的 CRC 计算结果。在应用中, CRC 技术主要应用于核实数据传输或者数据存储的正确性和完整性。 本模块算法遵从 ISO/IEC13239 的定义,采用 16 位长度的 CRC,计算多项式为: 计算初始值为 0xFFFF。 本模块功能包括: ⚫ CRC 编码和 CRC 校验 ⚫ 3 种位宽访问方式:8 位、16 位、32 位 ⚫ 8 位位宽下输入数据示例为 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77 ⚫ 16 位位宽下输入数据示例为 0x1100, 0x3322, 0x5544, 0x7766 ⚫ 32
[单片机]
STM8单片机无线315&433脉宽自适应_通用解码程序
单片机源程序如下: /* RFINT不能用PA1 要改板 改在PC6 */ /* Includes ------------------------------------------------------------------*/ #define MAIN_C #include ALL.h void Delay(u16 nCount) { /* Decrement nCount value */ while (nCount != 0) { nCount--; } } //10ms定时中断初始 在PWM时可更改 void TIME1_CONFIG(void) { /* Init TIMER 1 *
[单片机]
MSP430停车位感应装置设计
硬件:MSP430f5529,光电传感器,数码管(共阴极) #include msp430f5529.h /*********************************************************************** 红外光电传感器输入信号到P2.0,模拟车的信号,当用手遮挡时输入高电平, 系统检测到上升沿,进入寄存器中断,P1.0灯亮,接着在寄存器中断中使能定时器的 捕获/比较寄存器(TA0CCTL0),定时器开始计时,数码管开始滚动数字,当把手挪开后, 传感器输入低电平,系统检测到下降沿,再次进入寄存器中断,P1.0取反,灯灭,接着 禁止定时器的捕获/比较寄存器(TA0CCTL0),定时
[单片机]
单片机c语言指针和取地址以及类型转换
指针和地址运算符 在第四课我们学习数据类型时,学习过指针类型,知道它是一种存放指向另一个数据的地址的变量类型。指针是C语言中一个十分重要的概念,也是学习C语言中的一个难点。对于指针将会在第九课中做详细的讲解。在这里我们先来了解一下C语言中提供的两个专门用于指针和地址的运算符: * 取内容 & 取地址 取内容和地址的一般形式分别为: 变量 = * 指针变量 指针变量 = & 目标变量 取内容运算是将指针变量所指向的目标变量的值赋给左边的变量;取地址运算是将目标变量的地址赋给左边的变量。要注意的是:指针变量中只能存放地址(也就是指针型数据),一般情况下不要将非指针类型的数据赋值给一
[单片机]
单片机 avr c语言 二进制 十进制 十六进制 快速转换
二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是 逢二进一 ,借位规则是 借一当二 ,如:8位二进制数: 00110101 ;c语言中表示为 0b00110101; 十进制数是我们日常使用的计数方式,如245,21,23453。 十六进制:逢16进1,用0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F表示,对应十进制数是:0,1,2,3,4,5,6,7,8,9,10, 11,12,13,14,15。c语言中十六进制数前加 0x 表示,例如:十六进制:0x35 转换为二进制数为:00110101 二进制转换为十六进制: 4位二进制的权值,从高位往低位记,:8、4、2、1。即,最高位的权
[单片机]
基于51单片机的直流电机调速实验
一、实验原理 PWM:即脉冲宽度调制,在具有惯性的系统中,可以通过对一系列脉冲的宽度进行调制,来等效的获得所需要的模拟量,常用于电机调速,灯光亮度调节等。 该实验和之前LED呼吸灯(定时器实现),实验原理本质上是相同的,可以结合之前的文章进行理解学习,这里就不再赘述了。(下图引用LED呼吸灯实验) 二、关键代码 void Timer0_Routine() interrupt 1 { TL0 = 0x66; TH0 = 0xFF; Counter++; Counter%=100; //计数值变化范围限制到0~99 if(Counter Compare) //计数值小于比较值 { Motor
[单片机]