MSP430F552X 中文手册及例程
一、先写一篇开个头:这样快速闯入 MSP430学习过程
进入各个电子产品公司的网站,招聘里面嵌入式占据了大半工程师职位。 广
义的嵌入式无非几种:传统的什么51单片机、 MSP430称做嵌入式微控制器;
ARM 是嵌入式微处理器;当然还有 DSP;FPGA。我们现在就不说别的,就说
MSP430单片机,多数想学 MSP430的童鞋,对89C51内核系列的单片机是很熟
悉的,为了加深对 MSP430 系列单片机的认识吗,迅速闯入 MSP430学习过程,
就必须彻底了解 MSP430单片机,我们不妨将51单片机和 MSP430两者进行一下
比较。
第一点, 51内核单片机是8 位单片机。其指令是采用的被称为“ CISC ”的
复杂指令集,共具有111 条指令。而 MSP430 单片机是16 位的单片机,采用
了精简指令集( RISC )结构,只有简洁的27 条指令,大量的指令则是模拟
指令,众多的寄存器以及片内数据存储器都可参加多种运算。这些内核指令
均为单周期指令,功能强,运行的速度快。
第二点,MCU 主要分为两种工作模式:待机与执行。51内核单片机正常情况
下消耗的电流为 mA 级 ,在掉电状态下,其耗电电流仍约为3mA 左右 ;即使
在掉电方式下,电源电压可以下降到2V ,但是为了保存内部 RAM 中的数据,
还需要提供约50uA 的电流。
而430单片机功耗是在 uA 级的,工作电流极小,并且超低功耗,关断状态下
的电流仅为0.1μA,待机电流为0.8μA,常规模式下的(250μA/1MIPS@3V),
端口漏电流不足50 nA,并可零功耗掉电复位(BOR)。另外,该芯片属低电器
件,仅需1.8~3.6V 电压供电,因而可有效降低系统功耗。MSP430将低功耗
模式扩展为7种,分别对应不同应用场合及任务的低功耗方式。以睡眠模式为
例,包括深度睡眠模式 RTC:只有时钟在跑而其他都不动,目前,TI 宣布其
MSP430在 RTC 模式下最低功耗仅为360nA。同时也包括诸如液晶显示驱动等需
要几十毫秒刷新一次的间歇性睡眠模式。所以,MSP430 的超低功耗更适合应
用于使用电池供电的仪器、仪表类产品中。
第三点, 51内核单片机由于其内部总线是8 位的,受其结构本身的限制很大,
模拟功能控制功能受限制。MSP430 系列其基本架构是16 位的,同时在其内
部的数据总线经过转换还存在8 位的总线,在加上本身就是混合型的结构,
因而对它这样的开放型的架构来说,无论扩展8 位的功能模块,还是16 位的
功能模块,即使扩展模/ 数转换或数/ 模转换这类的功能模块也是很方便的。
第四点,典型 MCU 的存储结构有两种,冯。诺依曼结构——程序存储器和数
据存储器统一编码;哈佛结构——程序存储器和数据存储器;MSP430系列单
片机属于前者,而常用的51内核单片机系列属于后者。
第五点,就是在开发工具上面。对51内核 单片机来说,不少适合我们使用的
开发工具。但是如何实现在线编程还是一个很大的问题。对于 MSP430 系列
而言,由于引进了 Flash 型程序存储器和 JTAG 技术,不仅使开发工具变得
简便,而且价格也相对低廉,并且还可以实现在线编程。
那么说了以上这些,作为新手,到底怎么学习430这种16位低功耗的单片机
呢?或者说有什么有什么效果比较好的方法吗,答案是肯定。
网上有很多介绍 MSP430单片机学习的方法,一定要结合自己的学习特点,集
百家之长,善于总结别人的、自己的学习方法和效果,积极实践。当然学习
的方法都是相通的。大概对这些方法简单总结,也就是下面几点:
作为430新手,首先看我们是否准备好以下几样硬件:电脑(带有并口)1
台,MSP430FET 仿真器1套,MSP430开发实验板1套,和一些 MSP430教程或
电子教程资料等。
选用 MSP430仿真器。购买现成的 MSP430JTAG 仿真器如 TI-MSP430JTAG
选用 MSP430开发板或目标板是学习一个重要的工具,建议购买一个开
发板或目标板,同时也会得到很好的技术支持。如果自己制作的话也行,
也未尚不可,那就看个人水平了。
软件工具,因为现在都有学习板的工具软件,如 IAR 的 EW430学习版,
430GCC 软件还是免费的。建议还是使用 IAR 软件较方便,因为使用的人群
较多,有问题还可请教,容易解决。
MSP430学习资料及教程,<> 清华大学出版社和一本关于430C 语言编程应用的书本<>。
MSP430系列中硬件源资是非常丰富的。有看门狗(WDT)、定时器 A
(Timer_A)、定时器 B(Timer_B)、比较器、串口0(USARTO)、串口1(USART1)、
硬件乘法器、液晶驱动器、10位/12位 ADC, 14位 ADC,数十个可实现方向
设置及中断功能的并行输入输出端口、基本定时器(Basic Timer)。
以下几部分模块硬件资源是作为初学者必须要了解学习的。
①WDT 看门狗定时器: 新手们会看到很多编程实例中,开头都有“WDTCTL
= WDTPW + WDTHOLD;”语句。这是 CUP 执行关闭定时器的意思。在刚开始,
我们没必要关心这个,可以跳过这章节,只要大概地知道他的作用就好了。
看门狗定时器一般是用于防止程序失效而存在的,一般是用于完整的程序
中使用。主程序中可不断地清除看门狗定时器的计数值,以防定时器的值
自动计满后使 CPU 复位而重新开始工作。当程序发生错误时,无法正常清
除看门狗的定时值时,则看门狗定时器计数溢出而产生 CPU 复位。
②IO 模块:对于 IO 模块可分为初级与提高两阶段,可以不必同一时段内
进行理解。
a 初学者必需了解几个常用寄存器使用如 P1OUT,P1IN,P1DIR,P1SEL 寄存
器。
b 理解 MSP430 IO 口常用编程语法,这些都可以查看参考例程。
c 结合书本介绍和个人理解,然后在开发板上进行实验。例如比如 LED、
响声之类的 初级实验。
d 对于 IO 模块:了解如何使用 IO 中断,和 IO 中断相关寄存器的使用。如
果不太必要,可以跳过 IO 中断的使用,而是去学习其他章节的基础部分;
当其他章节基础学习到一定程序时回过头再来学习这部分。另外,我们需
要搞清楚 IO 模块在什么时候为高阻状态?高阻状态时的漏电流为多少?
IO 驱动电流能力如何?等等一些常关注的参数时,我们都需要养成主动查
看器件手册的习惯。
中断是430处理器的一大特色,因为几乎每个外围模块都能产生,430
可以在没有任务时进入低功耗状态,有事件时中断唤醒 cpu,处理完毕再
次进入低功耗状态。整个中断的响应过程是这样的,当有中断请求时,如
果 cpu 处于活动状态,先完成当前命令;如果处于低功耗,先退出,将下
一条指令的 pc 值压入堆栈;如果有多个中断请求,先响应优先级高的;
执行完后,等待中断请求标志位复位,要注意,单中断源的中断请求标志
位自动复位,而多中断的标志位需要软件复位;然后系统总中断允许位
SR.GIE 复位,相应的中断向量值装入 pc,程序从这个地址继续执行。这
里要注意,中断允许位 SR.GIE 和中断嵌套问题。如果当你执行中断程序
过程中,希望可以响应更高级别的中断请求时,必须在进入第一个中断时
把 SR.GIE 置位。 其实,其他的外围模块时钟沿着时钟和中断这个核心
来执行的。具体的结构我也不罗索了,可以参考430系列手册。
③时钟模块:系统时钟是一个程序运行的指挥官,时序和中断也是整个程
序的核心和中轴线。430最多有三个振荡器,DCO 内部振荡器;LFXT1外接
低频振荡器,常见的32768HZ,不用外接负载电容;也可接高频450KHZ-
8M,需接负载电容;XT2接高频450KHZ-8M,加外接电容。初学者若要使
用到片中某模块时几乎都要使用不同的时钟。时钟模块是提供整个单片机
中各模块的时钟发生源,所以这章节是非常强调地要去认真理解的。
⑴.必须理解430有几种时钟信号:MCLK 系统主时钟,可分频1 2 4 8,供
cpu 使用,其他外围模块在有选择情况下也可使用;SMCLK 系统子时钟,
供外围模块使用,可选则不同振荡器产生的时钟信号;ACLK 辅助时钟,只
能由 LFXT1产生,供外围模块。
⑵.DCO,SMCLK,MCLK,ACLK 各个时钟有什么优点和点。
⑶.4个时钟信号中,每个时钟的通常频率范围是多少。
⑷.常规的时基控制寄存器设置和时钟如何从引脚输出等等。
④TimaA 模块:⑴.初学者需要搞清 TimerA 的三个不同工作模式中 TA、
CCR1、CCR2与 CCR0之间的关系。⑵.搞清楚 TA、CCR1、CCR2与 CCR0之间的
中断向量关系。⑶.综合上面的理解,我们可以结合 TimerA 的例程来进行
相关验证,只有通过亲自的操作才能有效地记住。⑷.利用 TimerA 实现 PWM
信号输出、利用捕获/比较功能实现捕获信号等等。
另外多大学习430学习单片机论坛上, 和网友交流,咨询,多看别人
出现的问题的解决方法。
可以说,只要经过上述方面认真折腾学习的话,其实 MSP430单片机编程应用
就有了基本入门阶段,可以说已经闯入 MSP430单片机有效学习过程,接下要
继续学习其他相关的模块应用也不难了。那么剩下的一些模块可以按需而用,
按需而学。 但前提的就是需要熟悉几个常用模块基础应用,以使用量最多的
14x 系列为例,初学者入门必学有 IO 模块、时基模块、定时器模块等,以后
可继续强化学习如 ADC12模数转换、UART 串行异步通讯模块、比较器 A 模块
等等。
(一)通用 I/O 口的设置-1
1.1 I/O 的简介
特点:①多种复用和设置(即可控制是否输入、是否输出、是否接上拉电
阻、是否接下拉电阻、是否可接受中断);
②一般情况下,P1和 P2都是具有中断能力的。从 P1和 P2接口的各个
I/O 管脚引入的中断可以独立的被使能并且设置为上升沿或者下降沿触发。对应
的中断向量表分别为 P1IV 和 P2IV,它们只能进行字操作,并且 PAIV 这个寄存器
根本不存在。
③P1、P2可合为 PA,P3、P4可合为 PB,…PC、PD。所以 P1为8位
BCD 0x00,PA 为16位 BCD 0x0000。当进行字操作写入 PA 口时,所有的16位都被
写入这个端口;当利用字节操作写入 PA 口的低字节时,高字节保持不变;
④由于430很多 I/O 和外围电路接线,所以这里常用位操作。如事先
定义(接下来也会用到,先在此声明)BIT0=0X01、BIT1=0X02、
BIT3=0X04…BIT7=0X80,那么将 P1.1、P1.3的输出设为1的时候,就可以这样操作:
P1OUT|=(BIT1+BIT3)。这样显得很清楚。
⑤没有用到的 I/O,要统一拉低为好。此外,当读入的数据长短小于
端口最大长度时,那些没有用到的位会被视零。
1.2 I/O 的简单配置
430I/O 的配置是用软件来实现的,是通过相应的配置寄存器来实
现的。(用到某个 I/O 时,一定要先配置好该 I/O,否则易出错)
1.2.1 I/O 方向设定寄存器 PXDIR
如设定 P1.1和 P1.2为输出状态
操作为: P1DIR |=(BIT1+BIT2)等价于 PADIR |=(BIT1+BIT2)
也等价于 PADIR_L|=(BIT1+BIT2。
拉高设定为输出,拉低设定为输入(默认)。
1.2.2 I/O 输入设定寄存器 PXIN
如设定 P1.1和 P1.2的输入为低电平
操作为: P1IN &=~(BIT1+BIT2)。
1.2.3
I/O 输出设定寄存器 PXOUT
①当只用为简单的输出时:
如设定 P1.1和 P1.2输出高电平
操作为: P1OUT |=(BIT1+BIT2)。
②如果该引脚为正常 I/O 功能,且当前已设定为输入方向,且上拉/
下拉电阻寄存器是有效地。那么 PXOUT 可以用来配置上拉和下拉电阻:
低电平为下拉电阻;
高电平为上拉电阻;
低电平该寄存器为无效状态;
高电平该寄存器为有效状态;
1.2.4 上拉/下拉电阻使能寄存器 PXREN
1.2.6 功能选择寄存器 PXSEL
1.2.5输出驱动能力设置寄存器 PXDS
P5SEL |=(BIT2+BIT3)(=00001100);
如:开发板初始化函数 HAL_Board.c 中有这样一句程序:
弱化驱动可以减弱电磁干扰 EMI,全力驱动会增强电磁干扰。默认为减弱驱动。
低电平表示减弱的驱动(默认);
高电平表示全力的驱动;
用来声明该端口是要应用于外围电路的特殊功能(不决定输入输出方向),默认
为低电平。
低电平表示普通的 I/O(默认);
高电平表示该引脚将有连接外围电路的特殊用途;
这句话的意思就是声明 P5.2和 P5.3将有特殊用途,实际上这两个 I/O 接的是外
部的高频时钟晶振(之后还要设定为输入状态才可以)。
此外需要注意的是,一旦某个 I/O 的 PXSEL 置高了,那么该引脚将不能再被用
为中断引脚。
总结,简单的程序应用:
/*实现 LED 的闪烁*/LED 位于每个触摸按键下方,具体接口请查询原理图
#include 该头文件内部包含430各个寄存器的配置情况
void main(void)
{
WDTCTL=WDTPW+WDTHOLD;
BITX 的定义在 msp430.h 中
P1OUT&=~(BIT0+BIT1+BIT2+BIT3+BIT4+BIT5);
/*P1SEL=0X00;
P1DIR|=(BIT0+BIT1+BIT2+BIT3+BIT4+BIT5);
//P1.0-P1.5方向为输出,
//清零
//关闭看门狗
PXDS=0X00;默认*/
i=0;
int i=0,j=0;
while(1)
{
if(i>5)
else
{
switch(i)
{
case 0:P1OUT=0x01;break;