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.

[参考译文] 编译器/MSP430FR6989:数字输入(PxIN)未按预期工作(MSP430FR6989)

Guru**** 2568565 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/658309/compiler-msp430fr6989-digital-input-pxin-does-not-work-as-expected-msp430fr6989

部件号:MSP430FR6989

工具/软件:TI C/C++编译器

嘿,

我正在与MSP430 FR6989一起阅读Launchpad的输入/输出引脚。

如果我使用以下代码,则一切正常。 如果按下按钮,我可以打开和关闭LED:

#include <driverlib.h>

int main(void)
{
WDTCTL = WDTPW | WDTHOLD;/* STOP监视程序计时器*/
PM5CTL0 &=~LOCKLPM2;

//将WFP 1.0 设置为输出方向
P1DIR |= BIT0;/* WFP 1.0 (LED1:P1DIR.0 =1)-> OUTPUT */
P1OUT &=~BIT0;/* Clear WFP 1.0 (LED1 OFF)*/

GPIO_setAsInputPinWithPullUp阻 器(GPIO_PORT_P1, GPIO_PIN1);

同时(1)
{
如果(!(P1IN & BIT1))/* TEST 1.1 (按下?) */
{
P1OUT || BIT0;/* Set*/

}
否则
{
P1OUT &=~BIT0;/* Clear*/
}
}
} 

但是,如果我只是更改线路GPIO_setAsInputPinWithPullUpResister(GPIO_PORT_P1, GPIO_PIN1),并将寄存器设置为作为输入端口(P1REN.1=1和P1DIR.1=0)工作,它将不再工作。 或者更准确地说,在我编译并首次刷新它之后,它就可以工作了。 但如果我从PC断开主板的连接(没有USB连接,没有电源)并再次开机,它将无法识别特定端口上的任何输入。 我甚至可以刷新代码,我不会帮助,如果我按按钮,输入寄存器不会更改

以下是已修改的代码:

#include <msp430fr6989.h>

int main(void)
{
WDTCTL = WDTPW | WDTHOLD;/* STOP监视程序计时器*/
PM5CTL0 &=~LOCKLPM2;

//将WFP 1.0 设置为输出方向
P1DIR |= BIT0;/* WFP 1.0 (LED1: P1DIR.0 =1)-> OUTPUT */
P1OUT &=~BIT0;/* Clear WFP 1.0 (LED1 OFF)*/

P1DIR &=~BIT1;/* WFP 1.1 (S2:P1DIR.1 = 0)-> input*/
P1REN || BIT1;/*启用WFP 1.1 P1REN.1=1*/

同时(1)
{
如果(!(P1IN & BIT1))/* TEST 1.1 (按下?) */
{
P1OUT || BIT0;/* Set*/

}
否则
{
P1OUT &=~BIT0;/* Clear*/
}
}
} 

我修改的代码有什么问题吗?

Stefan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我看不到您的更新代码,但从您的描述中,我猜测您没有将P1OUT.1=1设置为指定上拉(而不是下拉)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的,出错了。 以下是已修改的代码:

    #include <msp430fr6989.h>
    
    int main(void)
    {
    WDTCTL = WDTPW | WDTHOLD;/* STOP监视程序计时器*/
    PM5CTL0 &=~LOCKLPM2;
    
    //将WFP 1.0 设置为输出方向
    P1DIR |= BIT0;/* WFP 1.0 (LED1: P1DIR.0 =1)-> OUTPUT */
    P1OUT &=~BIT0;/* Clear WFP 1.0 (LED1 OFF)*/
    
    P1DIR &=~BIT1;/* WFP 1.1 (S2:P1DIR.1 = 0)-> input*/
    P1REN || BIT1;/*启用WFP 1.1 P1REN.1=1*/
    
    同时(1)
    {
    如果(!(P1IN & BIT1))/* TEST 1.1 (按下?) */
    {
    P1OUT || BIT0;/* Set*/
    
    }
    否则
    {
    P1OUT &=~BIT0;/* Clear*/
    }
    }
    } 

    如果我尝试使用FR5969代码,一切都正常。 我是否可以中断MC?

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

    您没有将P1OUT.1=1设置为指定上拉(而不是下拉)。 另请参阅SLAU367N表12-1。

    [编辑:固定表号typo]

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    非常感谢! 我还查看了用户指南。 这里有我需要的所有信息;-)