网志

MSP430启动板教程-第1部分-基础

恩里科·加兰特(Enrico Garante)2013年6月14日19条评论

TI的LaunchPad是一个完整的MSP430开发环境:您所需要做的就是下载并安装CCS IDE(需要登录),使用随附的mini-usb电缆将支持G2231的LaunchPad连接到计算机,并且可以开始编写代码了!

快速链接

德州仪器MSP430 LaunchPad

因此,让我们看看如何在Code Composer Studio中启动新项目。该IDE派生自Eclipse,因此,如果您在使用它之前就不会有太大问题。

本文以PDF格式提供,便于打印

我们将编写一个简单的程序,当我们按一下板载按钮时,它将切换一个led。

转到New->CCS Project

给您的项目命名和目标文件夹,然后单击“下一步”。确保在下一个窗口中选择“ MSP430”,然后继续。暂时不关心“其他项目设置”窗口,然后单击“下一步”。在“项目设置”窗口中,请确保所有设置均如该图片所示。

在“设备变量”字段中,选择已在LaunchPad上安装的正确MCU,然后单击“完成”。

现在,我们必须在项目中添加一个“ main.c”文件。右键单击您的项目名称(请注意,该项目为粗体并带有“ Active-Debug”标签,这意味着它将是稍后将被编译和调试的主要项目)。选择“新建->Source File".

将其命名为“ main.c”,然后单击“完成”。现在我们准备添加一些真实的代码!

我们的第一行代码是这样

#包括 "msp430g2231.h"  //Contains definitions for registers 和 built-in functions

通过此操作,我们包括了MSP430G2231的寄存器定义和内置功能,例如如果使用其他芯片G2211,则必须包含“ msp430g2211.h”头文件。

接下来,我们有主要例程。

int main(void)//主程序
{
 WDTCTL = WDTPW + WDTHOLD; //停止看门狗定时器
  
 P1DIR | = BIT0; //将P1.0设置为输出 和 P1.3 to input direction
 P1输出&=〜BIT0; //将P1.0设置为“关”
 P1IE | = BIT3; // P1.3 interrupt enabled
 P1IFG&=〜BIT3; //清除P1.3中断标志
  
 __bis_SR_register(GIE); //启用所有中断
  
 while(1)//永远循环,我们将在中断例程中完成工作...
 {} 
}

这只是一个“设置”例程,因为我们不做任何涉及led切换的操作。

WDTCTL = WDTPW + WDTHOLD;

通过这一行,我们停止了“看门狗定时器”:它通常用于在一定时间后复位MCU,以防止死锁和无限循环。在大多数示例中,您会看到在第一行代码中看门狗定时器已停止,以避免不必要的复位。

P1DIR |= BIT0;		   

通过此指令,我们将P1.0引脚(连接到LaunchPad上的红色指示灯)设置为输出方向。在MSP430架构中,P1DIR是一个8位寄存器,用于控制端口1引脚的I / O方向。如果将位设置为0,则将其配置为输入,否则将配置为输出。 BIT0常数就是0x01十六进制数,因此您可以这样做:

P1DIR before        00000000+  
BIT0                00000001=	
P1DIR after         00000001

这样,所有的Port1引脚都设置为输入方向,除了我们的led P1.0以外。

P1输出&= ~BIT0;

对此,我们重置P1.0输出。实际上,P1OUT寄存器控制着所有输出引脚:如果将一位设置为1(通过将P1OUT寄存器与正确的数字常数BIT0,BIT1 ...进行或运算),则相对的输出引脚设置为HIGH逻辑电平。 ,否则(通过将P1OUT寄存器的数值常数取反)将其设置为LOW电平。

P1IE | = BIT3; // P1.3 interrupt enabled
P1IFG &=〜BIT3; //清除P1.3中断标志

通过这两条指令,我们启用P1.3输入引脚(板上按钮)上的中断。
什么是中断?好吧,这不是最紧要的时间,但是现在我只需要知道这两行代码就可以让芯片知道按钮被按下的时间,即使他正在做其他事情(例如计算,延迟)等等...)。 P1IE寄存器用于启用输入引脚上的中断(其工作方式类似于P1DIR和P1OUT寄存器),而P1IFG寄存器用于了解是否发生了所需的事件(在这种情况下,按下按钮)(然后相对位是否设置为1)(该位设置为0)。

__bis_SR_register(GIE);

通过此内置功能,我们可以通过将MSP430G2231的状态寄存器中的GIE(全局中断使能)位置1来启用所有中断。此功能还用于进入低功耗模式,但以后的教程中将对此进行介绍。

而(1) {} 			   

最后,我们进入无限循环,因为我们在主函数中无事可做。
实际上,我们实际上将在“端口1中断服务程序”中切换LED。每当启用了中断的P1引脚的状态从高变为低(LaunchPad上的按钮为低电平有效)时,都会调用此例程。

#pragma vector = PORT1_VECTOR
__interrupt void Port_1(void)
{
    P1输出^= BIT0;  // Toggle P1.0
    P1IFG&=〜BIT3; //清除P1.3中断标志
}					   

此功能的第一行(P1OUT ^ = BIT0;)通过异或切换引脚状态。然后,将中断标志设置回0,以侦听另一个中断。

现在,我们准备在CCS上启动代码。
确保已将LaunchPad连接到PC,然后按IDE上的绿色小错误按钮进行编译,下载代码并进入调试透视图。

然后按“播放”按钮开始执行,按“停止”按钮退出调试,然后按“芯片”按钮复位板。

如果一切顺利,您应该看到,如果按一下板载按钮,则红色指示灯将打开和关闭。
如果是这样,恭喜!您已经建立了第一个MSP430程序!

这是此示例的完整代码:

#包括 "msp430g2231.h"  //Contains all definitions for registers 和 built-in functions 
int main(void)//主程序
{
   WDTCTL = WDTPW + WDTHOLD; //停止看门狗定时器
  
   P1DIR | = BIT0; //将P1.0设置为输出 和 P1.3 to input direction
   P1输出&=〜BIT0; //将P1.0设置为“关”
   P1IE | = BIT3; // P1.3 interrupt enabled
   P1IFG&=〜BIT3; //清除P1.3中断标志
  
   __bis_SR_register(GIE); //启用所有中断
  
   while(1)//永远循环,我们将在中断例程中完成工作...
   {} 
}
#pragma vector = PORT1_VECTOR
__interrupt void Port_1(void)
{
    P1输出^= BIT0;  // Toggle P1.0
    P1IFG&=〜BIT3; //清除P1.3中断标志
}					   

目前为止就这样了。下一个教程将重点介绍计时器和中断。

编码愉快!


恩里科·加兰特(Enrico Garante)的下一篇文章:
   MSP430 Launchpad教程-第2部分-中断和计时器

[-]
评论者 Tomi892015年7月18日
嗨!我翻译了TI MSP-EXP430F5529LP板的代码,希望对您有所帮助!

#包括“ msp430F5529.h” //包含寄存器和内置函数的定义

int main(void)//主程序
{
WDTCTL = WDTPW + WDTHOLD; //停止看门狗定时器

P1DIR | = BIT0; //将P1.0设置为输出
P1输出&=〜BIT0; //将P1.0设置为“关”

P2DIR&=〜BIT1; //将P2.1设置为输入
P2REN | = BIT1; //启用P2.1的上拉电阻(默认:GND)
P2OUT | = BIT1; //将上拉电阻设置为有效(+3.3V)模式

P2IE | = BIT1; //启用P2.1中断
P2IFG&=〜BIT1; //清除P2.1中断标志

__bis_SR_register(GIE); //启用所有中断

while(1)//永远循环,我们将在中断例程中完成工作...
{}
}


#pragma vector = PORT2_VECTOR
__interrupt void Port_2(void)
{
P1输出^= BIT0; // Toggle P1.0
P2IFG&=〜BIT1; //清除P2.1中断标志
}
[-]
评论者 卡洛斯802013年9月30日
感谢分享。
[-]
评论者 理查德842014年2月20日
解决了。
在我的板上没有安装Rpull向上和抗抖动电容器。
我在代码上添加按钮上拉
P1REN | = BIT3; //启用上拉(P1.3)
,然后我添加(不需要空格)
P1IES | = BIT3; // P1.3高/低边缘
选择中断激活边缘。
[-]
评论者 理查德842014年2月19日
嗨,卡洛斯,我在教程“第2部分”中看到,您也有MSP430G2553板。
您是否已成功执行此“第1部分”代码?
我的启动板无法识别按下按钮。那你的董事会呢?
非常感谢。
[-]
评论者 Mik232014年11月19日
理查德84,非常感谢。
真。
我也正在使用2553,但不知道为什么我没有得到预期的结果。

上拉电阻修复确实是我需要的,谢谢。
[-]
评论者 拉杰保尔2015年3月5日
我想将SPI模块与MSP30中的任何IC接口 微控制器 IC应该支持SPI。但是我不知道如何选择IC器件。我想使用该Ic发送和接收数据。
[-]
评论者 施耐德2017年12月30日

漂亮的初学者示例。如果该示例可行,那就更好了。确保阅读有关添加上拉电阻的注释,以使按钮正常工作。您仍然会遇到按钮弹跳问题,但是对于这样的简单示例,只要您了解不稳定的行为都是弹跳问题,就可以了

[-]
评论者 rohit307932013年11月8日
#pragma vector = PORT1_VECTOR
__interrupt void Port_1(void)
{
P1输出^= BIT0; // Toggle P1.0
P1IFG&=〜BIT3; //清除P1.3中断标志
}
此代码显示语法错误和其他声明错误 太...请 改正它
[-]
评论者 埃加兰特2013年11月29日
检测到什么错误?
[-]
评论者 danvcs22014年1月25日
这对我很好。

谢谢,

很棒的通知教程
[-]
评论者 理查德842014年2月19日
嗨,我是一位优秀的硬件设计师,但是在Code C中却是个糟糕的新手。

我使用带有MSP430G2553的Launchpad尝试您的代码。
红色指示灯仍在P1.0上,而按钮仍在P1.3上。

如果我将手指移到LED更改状态的按钮附近(大约1mm或2),如果我用塑料笔按下按钮,则什么也不会发生。

可以将该引脚设置为电容式触摸引脚吗?
如果是,如何禁用它? (我只尝试将控制位P1SEL和P2SEL设置为0)
如果没有,那可能是什么?

好文章,干得好!谢谢
[-]
评论者 理查德842014年2月20日
解决了。
在我的板上没有安装Rpull向上和抗抖动电容器。
我在代码上添加按钮上拉
P1REN | = BIT3; //启用上拉(P1.3)
,然后我添加(不需要空格)
P1IES | = BIT3; // P1.3高/低边缘
选择中断激活边缘。
[-]
评论者 乔迪·阿克塞尔2014年6月30日
感谢您的教程。我从urs开始,然后去了本教程。它可以是这一个的延续。
[-]
评论者 shaharasor872014年7月26日
你好
刚刚购买了MSP430F5529LP,我正在尝试使用开关按钮编写代码。
在以下代码中,将开关定义为输入(P1.1 = 0-默认情况下)

无效main()
{
WDTCTL = WDTPW + WDTHOLD; //停止看门狗定时器
P1DIR | = 0x01; //红色LED输出
P1REN | = 0x02; //启用上拉/下拉

而(1)
{
//做点什么
}

}
不知何故,当我调试此代码时,当我按下开关时,P1IN保持不变(P1IN不会根据按下的开关而变化)
我对此不知所措,因为我知道PxIN是readonlt寄存器,可提供有关输入的指示。

谢谢!
[-]
评论者 拉杰保尔2015年3月5日
嗨,有人可以告诉我,我想将SPI模块与MSP30中的任何IC接口 微控制器 IC应该支持SPI。但是我不知道如何选择IC器件。我想使用该Ic发送和接收数据。
[-]
评论者 费尔南多792015年7月4日
如您所见,我使用的是MSP430G2553开发板,它无法识别按下按钮的情况...有人可以帮我吗?

码:

#包括

int main(void){
WDTCTL = WDTPW | WDTHOLD; //停止看门狗定时器

P1DIR | = BIT6;
P1输出&=~BIT6;

P1REN | = BIT3;
P1IE | = BIT3;
P1IFG&=~BIT3;
__bis_SR_register(GIE);

而(1){
}
}

#pragma vector = PORT1_VECTOR
__interrupt void Port_1(void){
P1OUT ^= BIT6;
P1IFG&=~BIT3;
}
[-]
评论者 日尼提九月22,2017

你好,

这行是什么意思?

#pragma vector = PORT1_VECTOR

设置中断后,MSP430如何知道应跳至该功能? 

[-]
评论者 pawannitk97十月6,2017

感谢您分享本教程。我是初学者,由于我们给出了无限循环,所以关于LED闪烁的时间有些混乱,因为发光和熄灭需要花费多少时间?因为这里我们没有定义任何时钟或计时器。

[-]
评论者 迈哈布(Mehaboob)2018年4月1日

朋友给我发送了MSP430 C程序 

1)两个数的除法 

2)查找数组中的最大元素

3)从BCD到ASCII,反之亦然

4)ASCII转换为十进制,反之亦然

5)十六进制到十进制,反之亦然

要发布对评论的回复,请单击每个评论所附的“回复”按钮。要发布新评论(而不是回复评论),请查看评论顶部的“写评论”标签。

注册后,您可以参加所有相关网站上的论坛,并获得所有pdf下载的访问权限。

注册

我同意 使用条款隐私政策.

试试我们偶尔但很受欢迎的时事通讯。非常容易退订。
或登录