This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430FR2433:无法获取 P1.0 - P1.3在 LaunchPad 上工作

Guru**** 2540720 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1050469/msp430fr2433-cannot-get-p1-0---p1-3-to-work-on-launchpad

器件型号:MSP430FR2433

我已经尝试过位操作、十六进制和二进制分配、设置 P1SEL0、P1SEL1。 无论我尝试什么、只有 P1.4 - P1.7按预期工作。 P1.0 - P1.3中没有任何内容。 我在这里遗漏了一些基本的东西、但无法弄清它是什么。

以下代码应切换所有 P1引脚、但仅上部字节有效。 我测试同一 LED 上的所有引脚、因此这不是电路问题:

#include

int main (void){
  WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器
  P1DIR = 0xFF;//P1所有输出
  P1OUT = 0x00;//最初将所有引脚设置为低电平
  unsigned int i;//delay 变量
  while (1)
  {
    P1OUT ^= 0xFF;//切换所有 P1引脚
    for (i=0;i<30000;i++){//切换之间的延迟
    }
  }

以下代码应该只打开 P1.1、但不起作用。 如果我将其更改为'BIT6'或高字节中的任何其他位、它们将相应地工作:

#include

int main (空)

  WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器

  P1SEL0 = 0;
  P1SEL1 = 0;
  P1DIR |= BIT1;
  P1OUT |= BIT1;

  while (1);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您是否在 Launchpad 上? 它们已将 LED 连接到1.0和1.1。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    此外、别忘了

    > PM5CTL0 &&~LOCKLPM5;//启用 GPIO

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    太疯狂了。 数据表中只有一个模糊的小注释。 您认为这是 TI 希望关注的问题。 谢谢! 很高兴我联系到了、而不是在数据表中旋转我的轮子。 此外、为什么您不能用'&='明确地将 LOCKLPM5设置为零? 为什么您还必须仅在一个位上执行按位而非(~)? 再次感谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    "&=~"是关闭位的一个习惯。 "&="(不带"~")会关闭所有其他位。

    当我忘记这一行时、编译器会向我发出警告。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    明白了。 我不熟悉 TI、因此这些细节非常有用。 希望我不会让自己太烦恼。 我尝试在提出问题之前浏览数据表、但与 Microchip 或 NXP 有根本不同的东西。 我不知道我还会如何学习这些知识、而是通过提问来学习。 示例代码和项目过于依赖标头文件、而这些文件中的一些基本原理被埋没。 再次感谢! 非常感谢。