我一直试图打开MSP430G2553上的LED,但它无法正常工作。我已经尝试过TI的代码示例,预生成的代码编辑器工作室LED闪烁项目,甚至以前的代码都是在MSP430上运行的。他们似乎都没有工作。可能是什么问题呢?它可能是有缺陷的硬件吗?这是我的代码:
#include <msp430.h>
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
P1DIR |= 0x01; // Set P1.0 to output direction
for (;;)
{
volatile unsigned int i;
volatile unsigned int j;
P1OUT ^= 0x01; // Toggle P1.0 using exclusive-OR
i = 25000; // Delay
while(i--) {
j = 2;
while(j--);
}
}
}
答案 0 :(得分:0)
你可以尝试这个版本(仍然是一个轮询循环,但让它保持基本)?
#include <msp430.h>
int main(void) {
volatile int i;
WDTCTL = WDTPW | WDTHOLD;
P1DIR |= 0x01;
P1OUT = 0x00;
for (;;) {
P1OUT ^= 0x01;
for (i = 0x6000; i > 0; i--) { };
}
return 0;
}
当我在2010年使用MSP430时,我从我的一个旧例子中得到了这个......
答案 1 :(得分:0)
尝试用__delay_cycles(1000000);
替换while循环。
即使循环变量标记为volatile
,编译器也可以优化掉空循环。
#include <msp430.h>
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
P1DIR |= 0x01; // Set P1.0 to output direction
for (;;)
{
P1OUT ^= 0x01; // Toggle P1.0 using exclusive-OR
__delay_cycles(1000000);
}
}
答案 2 :(得分:0)
我遇到了MSP430FR5994开发板的问题,在眨眼的示例中LED不会打开,但在“开箱即用体验”项目中它们会打开。比较代码,我确定与pmm.c的区别在于此行:
//For FRAM devices, at start up, the GPO power-on default
//high-impedance mode needs to be disabled to activate previously
//configured port settings. This can be done by clearing the LOCKLPM5
//bit in PM5CTL0 register
PM5CTL0 &= ~LOCKLPM5;
将其放置在main()的顶部似乎可以解决所有问题,并且LED的行为符合预期。