我在 launchpad 上有一个20引脚的 g2452、我无法读取 P2.6或 P2.7。 我在文档中注意到、它说:
注:
MSP430G22x0:这些器件具有数字 I/O 引脚 P1.2、P1.5、P1.6和 P1.7。 GPIO P1.0、P1.1、P1.3、P1.4、P2.6、和 P2.7在这个器件上被执行、但是在器件引脚上不可用。 为了避免输入悬空、这些 GPIO、应通过运行启动代码来正确初始化这些数字 I/O。 请参阅下面的初始化代码:
MOV.b #0x1B、P1REN;;正确终止不可用的 Port1引脚;在启用下拉的情况下配置为输入
XOR.b #0x20、BCSCTL3;;选择 VLO 作为低频率时钟
初始化代码将 GPIO P1.0、P1.1、P1.3和 P1.4配置为启用下拉电阻的输入(即 P1REN.x = 1)、并通过选择 VLOCLK 作为 ACLK 来终止 GPIO P2.6和 P2.7–有关详细信息、请参阅基本时钟系统一章。 寄存器 P1OUT、P1DIR、P1IFG、P1IE、P1IES 中 P1.0、P1.1、P1.3和 P1.4的寄存器位 P1SEL 和 P1REN 不应在初始化代码执行后改变。 此外、不应更改所有端口2寄存器。
我这样做的原因是 g2452也与晶振引脚共享 p2.6和 p2.7、即使 G22X0看起来不包含 G2452。 但是、读取 P2IN、我每次只得到全0。 我是否缺少其他东西?
以下是我的代码:
#include
#define LED_RED BIT5
#define LED_GREEN BIT6
#define LED_BLUE BIT7
#define button_1 BIT7 //p2.7
#define button_2 BIT6 //p2.6
#define bitRead (value、bit)(value 和 bit)
#define bitSet (value、bit)(value || bit)
#define bitClear (value、bit)(value &=~(bit))
#define bitWrite (value、bit、bitvalue)(bitvalue? bitSet (value、bit):bitClear (value、bit))(bitClear (value、bit))(bitSet (值、位):bit
空 LED (绿色、红色、蓝色){
P1OUT =绿色? bitClear (P1OUT、LED_GREEN):bitSet (P1OUT、LED_GREEN);
}
int main (空)
{
WDTCTL = WDTPW + WDTHOLD; //停止看门狗计时器
P1DIR |= LED_GREEN|LED_RELED_LED_BLUE; //输出 LED。
P2DIR &=~(button_1|button_2); //进行按钮输入。
BCSCTL3 |= LFXT1S_2; //使用 ACLK 的内部时钟。 这应该让我使用引脚2.6和2.7作为 GPIO
while (1)
{
int btn1 = bitRead (P2IN、button_1);
int btn2 = bitRead (P2IN、button_2);
LED (btn1、btn2、0);
}
返回0;
}