1

我有 MSP430 的以下示例程序,我希望重新排列它,以便该行PM5CTL0 &= ~LOCKLPM5;出现在P2SEL1 |= BIT0 | BIT1;. 如果我这样做会有问题吗?IE。如果我在之后配置 GPIO 引脚会不会有问题如果我在禁用高阻抗模式

我的应用程序/电路方面没有任何问题。我只是对可能产生意外的任何瞬态电流或其他不稳定性感到好奇?还是在配置 GPIO 后禁用高阻抗模式只是一种仪式/惯例?

#include "msp430.h"

int main(void)
{
  WDTCTL = WDTPW | WDTHOLD;                 // Stop Watchdog

  // Configure GPIO
  P2SEL1 |= BIT0 | BIT1;                    // USCI_A0 UART operation
  P2SEL0 &= ~(BIT0 | BIT1);

  // Disable the GPIO power-on default high-impedance mode to activate
  // previously configured port settings
  PM5CTL0 &= ~LOCKLPM5;

  // rest of program
}
4

2 回答 2

2

我看到这段代码缺少两件事

  1. RX 引脚未配置为输入(而 TX 未配置为输出)
  2. 并且没有为 RX 引脚启用上拉(假设您没有外部上拉)

MSP430 遵循的“拇指”规则之一 :) 也许您已经在其他地方处理过它。

关于 LOCKLPM5,请查看用户指南的内容

进入 LPMx.5 后,驻留在 PMM 模块的 PM5CTL0 中的 LOCKLPM5 会自动置位。I/O 引脚状态根据进入 LPMx.5 之前的设置进行保持和锁定。请注意,仅保留引脚条件。所有其他端口配置寄存器设置,例如 PxDIR、PxREN、PxOUT、PxDS、PxIES 和 PxIE 内容都将丢失。

“仪式”背后有一些逻辑!

假设您正在处理唤醒事件:从 LPMx.5 状态唤醒后,您的外围设备处于默认状态。如果您要在不配置外设的情况下清除 LOCKLPM5 位,那么您的引脚将处于默认状态,即没有上拉,全部配置为输入等。让门打开以防意外故障。由于喜欢避免这种不确定性,因此首先配置外设,然后清除 LOCKLPM5。

瞬态“默认”状态的影响还取决于您如何回答以下问题->

  • 当 TX 引脚为输入时,您的电路能处理这种情况吗?(很可能是的,否则你会在问题上与权力抗衡)
  • RX 引脚没有内部上拉,所以 RX 线会下降到“0”,即启动条件吗?这会导致电路中其他地方的中断吗?
于 2014-07-24T16:07:41.283 回答
1

在我看来,在完成引脚重新配置后禁用高阻抗比以前好一点。这是因为处于高阻抗状态时,触点就像与外部电路断开一样,这保证了不会出现任何可能的噪声、失真或短峰曲折反弹。

您的外部电路很可能不会做出反应,但理论上可能会有一个电路通过这样的“信号”改变其行为,换句话说,电线的另一端可能有一些敏感的东西会受到这样的影响弹跳。

于 2014-07-27T11:04:21.153 回答