MSP430启动板教程-第1部分-基础
TI的LaunchPad是一个完整的MSP430开发环境:您所需要做的就是下载并安装CCS IDE(需要登录),使用随附的mini-usb电缆将支持G2231的LaunchPad连接到计算机,并且可以开始编写代码了!
快速链接
- 第1部分: MSP430启动板教程-第1部分-基础
- 第2部分: MSP430 Launchpad教程-第2部分-中断和计时器
- 第3部分: MSP430 LaunchPad教程-第3部分-ADC
- 第4部分: MSP430 LaunchPad教程-第4部分-UART传输
因此,让我们看看如何在Code Composer Studio中启动新项目。该IDE派生自Eclipse,因此,如果您在使用它之前就不会有太大问题。
我们将编写一个简单的程序,当我们按一下板载按钮时,它将切换一个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部分-中断和计时器

#包括“ 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中断标志
}


在我的板上没有安装Rpull向上和抗抖动电容器。
我在代码上添加按钮上拉
P1REN | = BIT3; //启用上拉(P1.3)
,然后我添加(不需要空格)
P1IES | = BIT3; // P1.3高/低边缘
选择中断激活边缘。

您是否已成功执行此“第1部分”代码?
我的启动板无法识别按下按钮。那你的董事会呢?
非常感谢。

真。
我也正在使用2553,但不知道为什么我没有得到预期的结果。
上拉电阻修复确实是我需要的,谢谢。


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

__interrupt void Port_1(void)
{
P1输出^= BIT0; // Toggle P1.0
P1IFG&=〜BIT3; //清除P1.3中断标志
}
此代码显示语法错误和其他声明错误 太...请 改正它


谢谢,
很棒的通知教程

我使用带有MSP430G2553的Launchpad尝试您的代码。
红色指示灯仍在P1.0上,而按钮仍在P1.3上。
如果我将手指移到LED更改状态的按钮附近(大约1mm或2),如果我用塑料笔按下按钮,则什么也不会发生。
可以将该引脚设置为电容式触摸引脚吗?
如果是,如何禁用它? (我只尝试将控制位P1SEL和P2SEL设置为0)
如果没有,那可能是什么?
好文章,干得好!谢谢

在我的板上没有安装Rpull向上和抗抖动电容器。
我在代码上添加按钮上拉
P1REN | = BIT3; //启用上拉(P1.3)
,然后我添加(不需要空格)
P1IES | = BIT3; // P1.3高/低边缘
选择中断激活边缘。


刚刚购买了MSP430F5529LP,我正在尝试使用开关按钮编写代码。
在以下代码中,将开关定义为输入(P1.1 = 0-默认情况下)
无效main()
{
WDTCTL = WDTPW + WDTHOLD; //停止看门狗定时器
P1DIR | = 0x01; //红色LED输出
P1REN | = 0x02; //启用上拉/下拉
而(1)
{
//做点什么
}
}
不知何故,当我调试此代码时,当我按下开关时,P1IN保持不变(P1IN不会根据按下的开关而变化)
我对此不知所措,因为我知道PxIN是readonlt寄存器,可提供有关输入的指示。
谢谢!


码:
#包括
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;
}

你好,
这行是什么意思?
#pragma vector = PORT1_VECTOR
设置中断后,MSP430如何知道应跳至该功能?

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

朋友给我发送了MSP430 C程序
1)两个数的除法
2)查找数组中的最大元素
3)从BCD到ASCII,反之亦然
4)ASCII转换为十进制,反之亦然
5)十六进制到十进制,反之亦然
要发布对评论的回复,请单击每个评论所附的“回复”按钮。要发布新评论(而不是回复评论),请查看评论顶部的“写评论”标签。
注册后,您可以参加所有相关网站上的论坛,并获得所有pdf下载的访问权限。