MSPf中文手册资料下载.pdf
《MSPf中文手册资料下载.pdf》由会员分享,可在线阅读,更多相关《MSPf中文手册资料下载.pdf(65页珍藏版)》请在冰点文库上搜索。
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,数十个可实现方向设置及中断功能的并行输入输出端口、基本定时器(BasicTimer)。
以下几部分模块硬件资源是作为初学者必须要了解学习的。
WDT看门狗定时器:
新手们会看到很多编程实例中,开头都有“WDTCTL=WDTPW+WDTHOLD;
”语句。
这是CUP执行关闭定时器的意思。
在刚开始,我们没必要关心这个,可以跳过这章节,只要大概地知道他的作用就好了。
看门狗定时器一般是用于防止程序失效而存在的,一般是用于完整的程序中使用。
主程序中可不断地清除看门狗定时器的计数值,以防定时器的值自动计满后使CPU复位而重新开始工作。
当程序发生错误时,无法正常清除看门狗的定时值时,则看门狗定时器计数溢出而产生CPU复位。
IO模块:
对于IO模块可分为初级与提高两阶段,可以不必同一时段内进行理解。
a初学者必需了解几个常用寄存器使用如P1OUT,P1IN,P1DIR,P1SEL寄存器。
b理解MSP430IO口常用编程语法,这些都可以查看参考例程。
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,不用外接负载电容;
也可接高频450KHZ8M,需接负载电容;
XT2接高频450KHZ8M,加外接电容。
初学者若要使用到片中某模块时几乎都要使用不同的时钟。
时钟模块是提供整个单片机中各模块的时钟发生源,所以这章节是非常强调地要去认真理解的。
.必须理解430有几种时钟信号:
MCLK系统主时钟,可分频1248,供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
(一)通用I/O口的设置-11.1I/O的简介的简介特点:
多种复用和设置(即可控制是否输入、是否输出、是否接上拉电阻、是否接下拉电阻、是否可接受中断);
一般情况下,P1和P2都是具有中断能力的。
从P1和P2接口的各个I/O管脚引入的中断可以独立的被使能并且设置为上升沿或者下降沿触发。
对应的中断向量表分别为P1IV和P2IV,它们只能进行字操作,并且PAIV这个寄存器根本不存在。
P1、P2可合为PA,P3、P4可合为PB,PC、PD。
所以P1为8位BCD0x00,PA为16位BCD0x0000。
当进行字操作写入PA口时,所有的16位都被写入这个端口;
当利用字节操作写入PA口的低字节时,高字节保持不变;
由于430很多I/O和外围电路接线,所以这里常用位操作。
如事先定义(接下来也会用到,先在此声明)BIT0=0X01、BIT1=0X02、BIT3=0X04BIT7=0X80,那么将P1.1、P1.3的输出设为1的时候,就可以这样操作:
P1OUT|=(BIT1+BIT3)。
这样显得很清楚。
没有用到的I/O,要统一拉低为好。
此外,当读入的数据长短小于端口最大长度时,那些没有用到的位会被视零。
1.2I/O的简单配置的简单配置430I/O的配置是用软件来实现的,是通过相应的配置寄存器来实现的。
(用到某个I/O时,一定要先配置好该I/O,否则易出错)1.2.1I/O方向设定寄存器PXDIR如设定P1.1和P1.2为输出状态操作为:
P1DIR|=(BIT1+BIT2)等价于PADIR|=(BIT1+BIT2)也等价于PADIR_L|=(BIT1+BIT2。
拉高设定为输出,拉低设定为输入(默认)。
1.2.2I/O输入设定寄存器PXIN如设定P1.1和P1.2的输入为低电平操作为:
P1IN&
=(BIT1+BIT2)。
1.2.3I/O输出设定寄存器PXOUT当只用为简单的输出时:
如设定P1.1和P1.2输出高电平操作为:
P1OUT|=(BIT1+BIT2)。
如果该引脚为正常I/O功能,且当前已设定为输入方向,且上拉/下拉电阻寄存器是有效地。
那么PXOUT可以用来配置上拉和下拉电阻:
低电平为下拉电阻;
高电平为上拉电阻;
1.2.4上拉/下拉电阻使能寄存器PXREN低电平该寄存器为无效状态;
高电平该寄存器为有效状态;
1.2.5输出驱动能力设置寄存器PXDS弱化驱动可以减弱电磁干扰EMI,全力驱动会增强电磁干扰。
默认为减弱驱动。
低电平表示减弱的驱动(默认);
高电平表示全力的驱动;
1.2.6功能选择寄存器PXSEL用来声明该端口是要应用于外围电路的特殊功能(不决定输入输出方向),默认为低电平。
低电平表示普通的I/O(默认);
高电平表示该引脚将有连接外围电路的特殊用途;
如:
开发板初始化函数HAL_Board.c中有这样一句程序:
P5SEL|=(BIT2+BIT3)(=00001100);
这句话的意思就是声明P5.2和P5.3将有特殊用途,实际上这两个I/O接的是外部的高频时钟晶振(之后还要设定为输入状态才可以)。
此外需要注意的是,一旦某个I/O的PXSEL置高了,那么该引脚将不能再被用为中断引脚。
总结,简单的程序应用:
/*实现实现LED的闪烁的闪烁*/LED位于每个触摸按键下方,具体接口请查询原理图位于每个触摸按键下方,具体接口请查询原理图#include该头文件内部包含该头文件内部包含430各个寄存器的配置情况各个寄存器的配置情况voidmain(void)WDTCTL=WDTPW+WDTHOLD;
/关闭看门狗关闭看门狗P1DIR|=(BIT0+BIT1+BIT2+BIT3+BIT4+BIT5);
/P1.0-P1.5方向为输出,方向为输出,BITX的定义在的定义在msp430.h中中P1OUT&
=(BIT0+BIT1+BIT2+BIT3+BIT4+BIT5);
/清零清零/*P1SEL=0X00;
PXDS=0X00;
默认默认*/inti=0,j=0;
while
(1)if(i5)i=0;
elseswitch(i)case0:
P1OUT=0x01;
break;
case1:
P1OUT=0x02;
case2:
P1OUT=0x04;
case3:
P1OUT=0x08;
case4:
P1OUT=0x10;
case5:
P1OUT=0x20;
i+;
for(j=20000;
j0;
j-);
/延时延时
(一)通用I/O口的设置-2
(一)通用I/O口的设置-2这一部分讲外部中断。
这一部分讲外部中断。
看介绍再加弄懂程序才是王道看介绍再加弄懂程序才是王道外部中断是外部中断是MSP430优先级最低的中断而且是可屏蔽中断。
用起来比较简单。
优先级最低的中断而且是可屏蔽中断。
1.2.7简单的端口中断(外部中断)P1、P2的所有端口都具有中断能力,可以通过寄存器PxIFG,PxIE和PxIES来配置。
其他端口则需参照具体的引脚说明书。
所有的P1中断标志是最优先的(相比其它引脚的外部中断),其中P1IFG.0又最优。
PXIV中断向量寄存器:
只有P1IV和P2IV。
最高优先级使能中断在P1IV寄存器中产生一个序号,这个数字会被程序计数器识别或者加入其中,然后自动的执行合适的中断服务程序。
关闭P1口中断不会影响P1IV寄存器中的值。
P2口具有相同的功能。
PxIV寄存器只能字访问。
PxIFGx中断标志寄存器:
只有相应的中断使能PXIE打开且总中断GIE打开,该寄存器才有效。
低电平表示没有中断请求等待响应;
高电平表示有中断请求等待响应;
注意:
使用端口的中断功能期间,如果进行PXIN、PXOUT等操作可能使中断变化。
中断标志需要软件清零。
有一种情况例外:
两个中断同时发生,先响应优先级高的中断,当该中断服务程序结束后,该位的中断标志会自动清零,然后去响应另外一个中断。
PxIE中断使能寄存器低电平表示中断关闭;
高电平表示中断允许;
PXIES中断触发方式选择寄存器低电平表示上升沿触发;
高电平表示下降沿触发;
外部中断应用示例:
/*采用中断的方式,开关S2(接于P2.2)控制LED(接于P1)一个一个点亮(看PCB图接线)*/#includeints=0;
/s用来表示按键次数intnum=0;
/num表示LED值voidmain(void)WDTCTL=WDTPW+WDTHOLD;
/关闭看门狗P1DIR=0xff;
/P1全部接输出P1OUT=0x00;
/接LED初始化故全拉低,这样开始灯是灭的P2DIR=0x00;
/P2全部设为输入。
因为要接受外部中断P2IFG=0x00;
/清除P2口的中断标志P2IE=BIT2;
/P2.2开启中断P2IES=0xff;
/P2为下降沿触发P2IN=BIT2;
/P2.2输入拉高,因此开关闭合时会拉低产生下降沿(即中断)P2OUT=0xff;
P2REN=0xff;
/作为输入的时候一定要配置上拉电阻(很重要,容易忘记,我就在这错了-_)_enable_interrupt();
/开总中断while
(1)num=s%5;
switch(num)case0:
P1OUT=BIT1;
P1OUT=BIT2;
P1OUT=BIT3;
P1OUT=BIT4;
P1OUT=BIT5;
#pragmavector=PORT2_VECTOR/固定格式,声明中断向量地址_interruptvoidPort2_ISR(void)/中断子程序unsignedinttemp;
/局部变量inti;
for(i=0;
i12000;
i+);
/延时消抖if(P2IN&
0xff)!
=0xff)/如果有键按下temp=P2IFG;
/读取中断标志P2IFG=0x00;
/标志位清零if(temp=0x04)/如果P2.2产生中断s+;
/这一部分其实有几句话很多余,主要是为了体现每个端口中断的知识备注中断子程序调用格式:
#pragmavector=中断向量地址_interruptvoid中断服务程序名(void)/中断处理程序1.2.8未使用的I/O未使用的I/O管脚最好被设置为普通I/O功能、输出方向并且在PCB板上不连接这些管脚,以防止浮动的输入和降低功耗。
因为这些管脚没有被连接,所以它们的输出值没有必要在意。
或者可以通过设置未使用管脚的PxREN寄存器来使能置高/置低寄存器以避免浮动输入的干扰。
(二)看门狗的设置
(二)看门狗的设置看门狗定时器(WatchdogTimer(WDT_A))实际上是一个特殊的定时器,即可以用来作为看门狗使用,也可以用作定时器。
所谓的看门狗功能,是指可以监控程序是否由于某些干扰或者错误而跑飞。
其原理就是发生故障的时间满足规定的定时时间后,产生一个非屏蔽中断,使系统复位。
这样当在调试程序或预计程序在某个地方可能瞬时发生错误时(如外部电路干扰),选用设置看门狗定时中断可以避免程序跑飞。
当然,它也可以用作一般的定时功能。
不过实际上,由于看门狗定时器(作看门狗使用时)需要很严密的设置(否则程序容易经常重启),所以很多人都不会使用这项功能。
所以,程序一开始就加上一句话:
WDTCTL=WDTPW+WDTHOLD来关闭看门狗。
2.1WDT_A的简介的简介特点:
特点:
有8种可选定时时间;
看门狗模式;
定时器模式;
看门狗控制寄存器存在密码保护;
时钟源可选,且具有时钟源意外保护;
可以被终止来节省能源;
无论是用作看门狗还是定时器,其间隔时间都无法随意设定,只能从8种设定中选择,当然可以通过更改时钟频率来间接更改时间;
注意默认设置注意默认设置:
程序启动,看门狗即启动;
监控周期为32ms/32.768KHZ(也就是说当看门狗的时钟频率为32.768KHZ时,每过32ms,如果不软件清空,程序就会重启);
所用的时钟源为SMCLK(实际频率不是32.768KHZ,后面会提到)。
2.2WDT_A的寄存器及操作的寄存器及操作注意:
所有的寄存器都存字操作和字节操作模式。
例如对注意:
例如对WDTCTL寄存器直接赋值是字操作,你也可以通过寄存器直接赋值是字操作,你也可以通过WDTCTL_L(低字节寄存器)、(低字节寄存器)、WDTCTL_H来进行字节操作赋值。
来进行字节操作赋值。
该类寄存器只能赋值不要进行“该类寄存器只能赋值不要进行“|=、&
=”等逻辑操作。
”等逻辑操作。
2.2.1看门狗控制寄存器看门狗控制寄存器WDTCTL(WatchdogTimerControl)该寄存器是一个16位带有密码保护的读写寄存器。
所谓的密码保护,是为了防止该寄存器被不小心篡改。
那么是如何实现密码保护呢?
事实上,该寄存器的高字节用来存放口令,低字节才是控制数据。
写口令为05Ah,读口令为069h,任何和口令不一样的高字节操作都会导致系统复位。
该寄存器的位功能定义如下:
(支持位操作)WDTPW:
Bits15-8,WDTPassword,写为05Ah,读为069h。
WDTHOLD:
Bit7,WDTHOLD,0:
打开看门狗计时器;
1:
关闭WDTSSEL:
Bits6-5,WDTClockSourceSelect时钟源选择WDTTMSEL:
Bit4,工作模式选择0:
WDTCNTCL:
Bit3,计时器清零0:
无效;
清空计数器,即WDTCNT=0x0000hWDTIS:
Bits2-0,WDTIntervalSelect,间隔时间选择。
用来选择计数的周期,共有8种时间可以选择。
备注:
括号前数字为计数器的值2.2.2看门狗计数值寄存器看门狗计数值寄存器WDTCNT(WatchdogTimerCounter)这是一个32Bit的加计数器,但是不能通过软件来直接对其进行赋值等操作,只能通过WDTCTL中的WDTIS来选择时间。
或者你可以通过WDTSSEL选择不同的时钟源,来间接改变时间。
2.2.3看门狗中断看门狗中断位控制位控制WDT利用SFRS总寄存器中的两位来控制中断。
WDT中断标志位:
中断标志位:
WDTIFG,位于SFRIFG1.0WDT中断使能位:
中断使能位:
WDTIE,位于SFRIE1.0看门狗模式:
看门狗模式:
如果不及时对WDTCNT清零或者对WDT初始化,WDTIFG就会置位,然后程序就会重启。
计时器模式:
必须开总中断GIE和看门狗中断WDTIE。
此外,当执行完中断服务程序后,标志位WDTIFG会自动清零。
2.3常用操作常用操作/*关闭看门狗关闭看门狗*/WDTCTL=WDTPW+WDTHOLD;
/*喂狗,即对有效状态的看门狗进行清零操作*/喂狗,即对有效状态的看门狗进行清零操作*/*时间计满还不喂狗就会导致程序重启时间计满还不喂狗就会导致程序重启*/*WDTIS2即即WDTIS=100,此时时间间隔设为,此时时间间隔设为1S,假定频率为,假定频率为32.768KHZ*/WDTCTL=WDTPW+WDTCNTCL+WDTSSEL0+WDTIS2;
/*将看门狗设置为计数器模式,计数将看门狗设置为计数器模式,计数8192约约250ms,假定频率为,假定频率为32.768KHZ*/*WDTIS2+WDTIS0即即101*/WDTCTL=WDTPW+WDTCNTCL+WDTTMSEL+WDTIS2+WDTIS0总结例程:
/*首先将WDT设为定时器功能。