Blogs

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。

转到新的>CCS Project

为您的项目指定名称和目标文件夹,然后单击“下一步”。确保在下一个窗口中选择“ MSP430”,然后继续。暂时不关心“其他项目巴黎人送28元”窗口,然后单击“下一步”。在“项目巴黎人送28元”窗口中,请确保所有巴黎人送28元均如该图片所示。

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

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

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

我们的第一行代码将是这样

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

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

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

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

这只是一个“巴黎人送28元”例程,因为我们不做任何涉及led切换的操作。

WDTCTL = WDTPW + WDTHOLD;

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

P1DIR |= BIT0;		   

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

P1DIR before        00000000+  
BIT0                00000001=	
P1DIR after         00000001

这样,所有的Port1引脚都被巴黎人送28元为输入方向,除了P1.0就是我们的led。

P1输出&= ~BIT0;

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

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

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

__bis_SR_register(GIE);

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

 而(1)  {}			   

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

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

此函数的第一行(P1OUT ^ = BIT0;)通过异或切换引脚状态。然后,将中断标志巴黎人送28元回0,以侦听另一个中断。

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

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

如果一切顺利,您应该看到,如果按一下机载按钮,则红色指示灯将亮起和熄灭。
如果是这样,恭喜!您已经构建了第一个MSP430程序!

这是此示例的完整代码:

 #包括  "msp430g2231.h"  //Contains all definitions for registers and built-in functions 
int main(void)//主程序
{
   WDTCTL = WDTPW + WDTHOLD; //停止看门狗定时器
  
   P1DIR | = BIT0; //将P1.0巴黎人送28元为输出 and P1.3 to input direction
   P1OUT &=〜BIT0; //将P1.0巴黎人送28元为“关”
   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)
{
    P1OUT ^ = BIT0; //切换P1.0
    P1IFG &=〜BIT3; //清除P1.3中断标志
}					   

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

祝您编码愉快!


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

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

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

P1DIR | = BIT0; //将P1.0巴黎人送28元为输出
P1OUT &=〜BIT0; //将P1.0巴黎人送28元为“关”

P2DIR &=〜BIT1; //将P2.1巴黎人送28元为输入
P2REN | = BIT1; //启用P2.1的上拉电阻(默认:GND)
P2OUT | = BIT1; //将上拉电阻巴黎人送28元为有效(+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)
{
P1OUT ^ = BIT0; //切换P1.0
P2IFG &=〜BIT1; //清除P2.1中断标志
}
[-]
评论者 卡洛斯80 2013年9月30日
感谢分享。
[-]
评论者 理查德84 2014年2月20日
解决了。
在我的板上没有安装Rpull和反跳电容。
我在代码上添加按钮上拉
P1REN | = BIT3; //启用上拉(P1.3)
,然后我添加(不需要空格)
P1IES | = BIT3; // P1.3高/低边缘
选择中断激活的边沿。
[-]
评论者 理查德84 2014年2月19日
嗨,卡洛斯,我在教程“第2部分”中看到,您也有MSP430G2553板。
您是否已成功执行此“第1部分”代码?
我的启动板无法识别按下按钮。那你的董事会呢?
非常感谢。
[-]
评论者 Mik232014年11月19日
理查德84 ,非常感谢。
真的。
我也正在使用2553,但不知道为什么我没有得到预期的结果。

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

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

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

谢谢,

真棒和启发性的教程
[-]
评论者 理查德84 2014年2月19日
嗨,我是一位优秀的硬件设计师,但在Code C中却是个糟糕的新手。

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

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

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

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

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

while(1)
{
//do something
}

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

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

代码:

#包括

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

P1DIR |= BIT6;
P1OUT &=~BIT6;

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

while(1){
}
}

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

你好,

这行是什么意思?

#pragma vector = PORT1_VECTOR

巴黎人送28元中断后,MSP430如何知道应跳至该功能? 

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

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

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

朋友给我发送了MSP430 C程序 

1)两个数的除法 

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

3)从BCD到ASCII,反之亦然

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

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

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

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

注册

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

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