1

我正在努力初始化 MSP432p401R LaunchPad 上的 LED 和按钮。

问题:

编写一个代码,读取两个按钮 S1 和 S2(P1.1 和 P1.4)的输入并相应地更改 LED 的状态:无 - 关闭 S1 - 红色 S2 - 两者都绿色 - 蓝色

这是一些代码:

#define RED         BIT0        // Red LED connected to Port 1.0
#define GREEN       BIT1
#define BLUE        BIT2
#define S1          BIT1
#define S2          BIT4
#define SBOTH       (BIT1 | BIT4)
#define PB1_PRESSED()   ((P1->IN & S1) == 0)
#define PB2_PRESSED()   ((P1->IN & S2) == 0)
#define BOTH_PRESSED()  ((P1->IN & SBOTH) == 0)



P2->OUT |= OFF;     // turn off LEDs   
P2->DIR |= (RED | GREEN | BLUE);     // set LEDs for output
P2->REN |= (RED | GREEN | BLUE);   // turn on resistors

我的 if 语句如下所示:

if (BOTH_PRESSED())
        {
            P2->REN |= BLUE;
            P2->OUT |= BLUE;
        }

我在初始化时做错了什么?

4

1 回答 1

0

我正在查看文档,并会指出您可能遗漏的一些细节。您能否提供 LED 的当前行为?是否只有一种颜色被激活(红色、绿色、蓝色)变亮,没有颜色被激活或 RGB 组件之间的混合被激活?

1. 您需要为 P1.1 和 P1.4 启用上拉电阻

转到启动板的原理图并寻找到微控制器的按钮连接,我们可以在图 29 原理图(6 个中的 2 个)中看到连接到 P1.1 和 P1.4 的按钮都接地:

因此,您应该根据 MSP432P4xx SimpleLink™ 微控制器技术参考手册第 12.2.4 节的表 12.1在两个 I/O 上启用上拉电阻:

这种拓扑结构的结果,其中按钮接地并且有一个上拉电阻是负逻辑:如果按钮被按下,则输入接地,因此 MCU 读取 0;如果未按下按钮,则输入通过上拉电阻从 VCC 获取信号,因此 MCU 读取 1;总之:按下按钮 = 0,打开按钮 = 1。

2. 您不需要为 LED 输出启用电阻

回到图 29中的启动板原理图,在那里我们可以看到连接到 P2.0、P2.1 和 P2.2 的 LED 在阳极中已经有一个电阻,我认为不需要拉上拉或下拉电阻。没有电阻你应该没问题:

3. 您可能需要在输出端口启用高驱动强度

由于 LED 以共阴极方式排列,因此 MSP432 I/O 引脚将需要驱动电流以点亮它(与共阳极配置中发生的情况相反)。因此,您需要激活引脚 P2.0、P2.1 和 P2.2 的高强度驱动器。再次回到MSP432P4xx SimpleLink™ 微控制器技术参考手册的第12.2.5 节输出驱动强度选择寄存器 (PxDS),我们可以看到我们需要在 P2DS 寄存器中设置 BIT0、BIT1 和 BIT2 以允许它们使用高强度IO驱动

于 2020-10-14T14:14:33.913 回答