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.

MSP432E401Y: Keil MSP432 读取I/O问题

Part Number: MSP432E401Y

我用的是MSP432E401Y系列,现在只能读取到PL0的I/O,其他四个均无法读取,请问有人知道这是什么原因吗?

#include 
#include 
#include "ti/devices/msp432e4/driverlib/driverlib.h"
 
#include "delay.h"
 
#define MIN_DUTY 20
#define MID_DUTY 30
#define MAX_DUTY 40
#define GPIO_PIN_RESET 0
#define GPIO_PIN_SET 1
//#define TURN_LEFT_TIME 1100
//#define TURN_RIGHT_TIME 1100
#define TURN_SMALL 100
#define TURN_BIG 300
#define BUZZER_ON GPIOPinWrite(GPIO_PORTN_BASE, GPIO_PIN_1, GPIO_PIN_1);
#define BUZZER_OFF GPIOPinWrite(GPIO_PORTN_BASE, GPIO_PIN_1, 0x0);
#define READ_L2 GPIOPinRead(GPIO_PORTL_BASE, GPIO_PIN_0)
#define READ_L1 GPIOPinRead(GPIO_PORTL_BASE, GPIO_PIN_1)
#define READ_M GPIOPinRead(GPIO_PORTL_BASE, GPIO_PIN_2)
#define READ_R1 GPIOPinRead(GPIO_PORTL_BASE, GPIO_PIN_3)
#define READ_R2 GPIOPinRead(GPIO_PORTL_BASE, GPIO_PIN_4)
 
uint8_t dir = 0;
// uint16_t pwmcnt = 0;
 
#ifdef DEBUG
void __error__(char *pcFilename, uint32_t ui32Line)
{
    while (1)
        ;
}
#endif
/*驱动板接线
电机
P27-PG1 PWML
P26-PK4 PWMR*/
void delay(uint32_t us)
{
    volatile uint32_t ui32Loop; // Enable the GPIO port that is used for the on-board LED.
    us *= 20;
    for (ui32Loop = 0; ui32Loop < us; ui32Loop++)
    {
    }
}
 
void key_init(void)
{
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOJ);
    GPIOPinTypeGPIOInput(GPIO_PORTJ_BASE, GPIO_PIN_0);
    GPIOPadConfigSet(GPIO_PORTJ_BASE, GPIO_PIN_0,
                     GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU);
    GPIOPinTypeGPIOInput(GPIO_PORTJ_BASE, GPIO_PIN_1);
    GPIOPadConfigSet(GPIO_PORTJ_BASE, GPIO_PIN_1,
                     GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU);
}
 
uint8_t scankeys()
{
    if (GPIOPinRead(GPIO_PORTJ_BASE, GPIO_PIN_0) == GPIO_PIN_RESET)
    {
        dir = 0;
        return 1;
    }
    else if (GPIOPinRead(GPIO_PORTJ_BASE, GPIO_PIN_1) == GPIO_PIN_RESET)
    {
        dir = 1;
        return 1;
    }
    else
        return 0;
}
 
void lpwm_init()
{
    MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM0);
    while (!(MAP_SysCtlPeripheralReady(SYSCTL_PERIPH_PWM0)))
        ;
    MAP_PWMClockSet(PWM0_BASE, PWM_SYSCLK_DIV_1);
    MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
    while (!MAP_SysCtlPeripheralReady(SYSCTL_PERIPH_GPIOF))
        ;
    MAP_GPIOPinConfigure(GPIO_PF0_M0PWM0);
    MAP_GPIOPinConfigure(GPIO_PF1_M0PWM1);
    MAP_GPIOPinTypePWM(GPIO_PORTF_BASE, (GPIO_PIN_0 | GPIO_PIN_1));
    MAP_PWMGenConfigure(PWM0_BASE, PWM_GEN_0, PWM_GEN_MODE_UP_DOWN | PWM_GEN_MODE_NO_SYNC);
    MAP_PWMGenPeriodSet(PWM0_BASE, PWM_GEN_0, 64000);
    MAP_PWMPulseWidthSet(PWM0_BASE, PWM_OUT_0,MAP_PWMGenPeriodGet(PWM0_BASE, PWM_GEN_0) / 4);
    MAP_PWMPulseWidthSet(PWM0_BASE, PWM_OUT_1,MAP_PWMGenPeriodGet(PWM0_BASE, PWM_GEN_0) / 4);
    //  MAP_IntMasterEnable();
    //  MAP_PWMGenIntTrigEnable(PWM0_BASE, PWM_GEN_0,
    //                            PWM_INT_CNT_ZERO | PWM_INT_CNT_LOAD |
    //                            PWM_INT_CNT_AU | PWM_INT_CNT_AD);
    //  MAP_IntEnable(INT_PWM0_0);
    //  MAP_PWMIntEnable(PWM0_BASE, PWM_INT_GEN_0);
    MAP_PWMOutputState(PWM0_BASE, PWM_OUT_0_BIT | PWM_OUT_1_BIT, true);
}
 
void rpwm_init()
{
    MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM0);
    while (!(MAP_SysCtlPeripheralReady(SYSCTL_PERIPH_PWM0)))
        ;
    MAP_PWMClockSet(PWM0_BASE, PWM_SYSCLK_DIV_1);
    MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
    while (!MAP_SysCtlPeripheralReady(SYSCTL_PERIPH_GPIOF))
        ;
    MAP_GPIOPinConfigure(GPIO_PF2_M0PWM2);
    MAP_GPIOPinConfigure(GPIO_PF3_M0PWM3);
    MAP_GPIOPinTypePWM(GPIO_PORTF_BASE, (GPIO_PIN_2 | GPIO_PIN_3));
    MAP_PWMGenConfigure(PWM0_BASE, PWM_GEN_1, PWM_GEN_MODE_UP_DOWN | PWM_GEN_MODE_NO_SYNC);
    MAP_PWMGenPeriodSet(PWM0_BASE, PWM_GEN_1, 64000);
    MAP_PWMPulseWidthSet(PWM0_BASE, PWM_OUT_2,MAP_PWMGenPeriodGet(PWM0_BASE, PWM_GEN_1) / 4);
    MAP_PWMPulseWidthSet(PWM0_BASE, PWM_OUT_3,MAP_PWMGenPeriodGet(PWM0_BASE, PWM_GEN_1) / 4);
    //  MAP_IntMasterEnable();
    //  MAP_PWMGenIntTrigEnable(PWM0_BASE, PWM_GEN_0,
    //                            PWM_INT_CNT_ZERO | PWM_INT_CNT_LOAD |
    //                            PWM_INT_CNT_AU | PWM_INT_CNT_AD);
    //  MAP_IntEnable(INT_PWM0_0);
    //  MAP_PWMIntEnable(PWM0_BASE, PWM_INT_GEN_0);
    MAP_PWMOutputState(PWM0_BASE, PWM_OUT_2_BIT | PWM_OUT_3_BIT, true);
}
 
// void PWM0_0_IRQHandler(void)
//{
//     uint32_t getIntStatus;
//     getIntStatus = MAP_PWMGenIntStatus(PWM0_BASE, PWM_GEN_0, true);
//     MAP_PWMGenIntClear(PWM0_BASE, PWM_GEN_0, getIntStatus);
// }
 
// 0左前1右前2左后3右后
 
void duty_set_l(uint8_t dutyl)
{
    MAP_PWMPulseWidthSet(PWM0_BASE, PWM_OUT_0, 640 * dutyl);
    MAP_PWMPulseWidthSet(PWM0_BASE, PWM_OUT_2, 640 * dutyl);
}
 
void duty_set_r(uint8_t dutyr)
{
    MAP_PWMPulseWidthSet(PWM0_BASE, PWM_OUT_1, 640 * dutyr);
    MAP_PWMPulseWidthSet(PWM0_BASE, PWM_OUT_3, 640 * dutyr);
}
 
void duty_set_all(uint8_t duty)
{
    MAP_PWMPulseWidthSet(PWM0_BASE, PWM_OUT_0, 640 * duty);
    MAP_PWMPulseWidthSet(PWM0_BASE, PWM_OUT_1, 640 * duty);
    MAP_PWMPulseWidthSet(PWM0_BASE, PWM_OUT_2, 640 * duty);
    MAP_PWMPulseWidthSet(PWM0_BASE, PWM_OUT_3, 640 * duty);
}
 
void car_front()
{
    duty_set_all(MID_DUTY);
    MAP_PWMOutputState(PWM0_BASE, PWM_OUT_0_BIT, true);
    MAP_PWMOutputState(PWM0_BASE, PWM_OUT_1_BIT, true);
    MAP_PWMOutputState(PWM0_BASE, PWM_OUT_2_BIT, false);
    MAP_PWMOutputState(PWM0_BASE, PWM_OUT_3_BIT, false);
}
 
void car_back()
{
    duty_set_all(MID_DUTY);
    MAP_PWMOutputState(PWM0_BASE, PWM_OUT_0_BIT, false);
    MAP_PWMOutputState(PWM0_BASE, PWM_OUT_1_BIT, false);
    MAP_PWMOutputState(PWM0_BASE, PWM_OUT_2_BIT, true);
    MAP_PWMOutputState(PWM0_BASE, PWM_OUT_3_BIT, true);
}
 
void car_right()
{
    duty_set_all(MAX_DUTY);
    MAP_PWMOutputState(PWM0_BASE, PWM_OUT_0_BIT, true);
    MAP_PWMOutputState(PWM0_BASE, PWM_OUT_1_BIT, false);
    MAP_PWMOutputState(PWM0_BASE, PWM_OUT_2_BIT, false);
    MAP_PWMOutputState(PWM0_BASE, PWM_OUT_3_BIT, true);
}
 
void car_left()
{
    duty_set_all(MAX_DUTY);
    MAP_PWMOutputState(PWM0_BASE, PWM_OUT_0_BIT, false);
    MAP_PWMOutputState(PWM0_BASE, PWM_OUT_1_BIT, true);
    MAP_PWMOutputState(PWM0_BASE, PWM_OUT_2_BIT, true);
    MAP_PWMOutputState(PWM0_BASE, PWM_OUT_3_BIT, false);
}
 
void brake()
{
    duty_set_all(0);
    MAP_PWMOutputState(PWM0_BASE, PWM_OUT_0_BIT, false);
    MAP_PWMOutputState(PWM0_BASE, PWM_OUT_1_BIT, false);
    MAP_PWMOutputState(PWM0_BASE, PWM_OUT_2_BIT, false);
    MAP_PWMOutputState(PWM0_BASE, PWM_OUT_3_BIT, false);
}
 
void gs_init()
{
    MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOL);
    while (!MAP_SysCtlPeripheralReady(SYSCTL_PERIPH_GPIOL))
        ;
    MAP_GPIOPinTypeGPIOInput(GPIO_PORTL_BASE, (GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4));
    // MAP_GPIOPadConfigSet(GPIO_PORTL_BASE, (GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4),GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU);
    // GPIOPinTypeGPIOInput(GPIO_PORTL_BASE, GPIO_PIN_0);
    // GPIOPadConfigSet(GPIO_PORTL_BASE, GPIO_PIN_0,
    //                  GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_OD);
    // GPIOPinTypeGPIOInput(GPIO_PORTL_BASE, GPIO_PIN_1);
    // GPIOPadConfigSet(GPIO_PORTL_BASE, GPIO_PIN_1,
    //                  GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_OD);
    // GPIOPinTypeGPIOInput(GPIO_PORTL_BASE, GPIO_PIN_2);
    // GPIOPadConfigSet(GPIO_PORTL_BASE, GPIO_PIN_2,
    //                  GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_OD);
    // GPIOPinTypeGPIOInput(GPIO_PORTL_BASE, GPIO_PIN_3);
    // GPIOPadConfigSet(GPIO_PORTL_BASE, GPIO_PIN_3,
    //                  GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_OD);
    // GPIOPinTypeGPIOInput(GPIO_PORTL_BASE, GPIO_PIN_4);
    // GPIOPadConfigSet(GPIO_PORTL_BASE, GPIO_PIN_4,
    //                  GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_OD);
}
 
void scanline()
{
    if (READ_L2 == GPIO_PIN_SET && READ_L1 == GPIO_PIN_SET && READ_M == GPIO_PIN_SET && READ_R1 == GPIO_PIN_SET && READ_R2 == GPIO_PIN_SET)
    {
        brake();
        BUZZER_ON;
        delay_ms(500);
        BUZZER_OFF;
        delay_ms(500);
        brake();
    }
    else if (READ_L2 == GPIO_PIN_RESET && READ_L1 == GPIO_PIN_RESET && READ_M == GPIO_PIN_RESET && READ_R1 == GPIO_PIN_RESET && READ_R2 == GPIO_PIN_RESET)
    {
        duty_set_all(MID_DUTY);
        car_front();
    }
    else if (READ_M == GPIO_PIN_SET)
    {
        BUZZER_OFF;
        duty_set_all(MID_DUTY);
        car_front();
        //        if(READ_L1 == GPIO_PIN_SET && READ_L2 == GPIO_PIN_SET){
        //            BUZZER_ON;
        //            car_left();
        //            delay_ms(TURN_LEFT_TIME);
        //            BUZZER_OFF;
        //            duty_set_all(MID_DUTY);
        //            car_front();
        //        }
        //        else if(READ_R1 == GPIO_PIN_SET && READ_R2 == GPIO_PIN_SET){
        //            BUZZER_ON;
        //            car_right();
        //            delay_ms(TURN_RIGHT_TIME);
        //            BUZZER_OFF;
        //            duty_set_all(MID_DUTY);
        //            car_front();
        //        }
    }
    else
    {
        BUZZER_ON;
        delay_ms(100);
        BUZZER_OFF;
        if (READ_L1 == GPIO_PIN_SET)
        {
            car_left();
            //            if(READ_L2 == GPIO_PIN_SET){
            //                car_right();
            //                delay_ms(TURN_RIGHT_TIME - TURN_SMALL);
            //            }
            delay_ms(TURN_SMALL);
        }
        else if (READ_L2 == GPIO_PIN_SET)
        {
            car_left();
            //            if(READ_L1 == GPIO_PIN_SET){
            //                car_right();
            //                delay_ms(TURN_RIGHT_TIME - TURN_BIG);
            //            }
            delay_ms(TURN_BIG);
        }
        else if (READ_R1 == GPIO_PIN_SET)
        {
            car_right();
            //            if(READ_R2 == GPIO_PIN_SET){
            //                car_left();
            //                delay_ms(TURN_LEFT_TIME - TURN_SMALL);
            //            }
            delay_ms(TURN_SMALL);
        }
        else if (READ_R2 == GPIO_PIN_SET)
        {
            car_right();
            //            if(READ_R1 == GPIO_PIN_SET){
            //                car_left();
            //                delay_ms(TURN_LEFT_TIME - TURN_BIG);
            //            }
            delay_ms(TURN_BIG);
        }
        duty_set_all(MID_DUTY);
    }
}
 
int main(void)
{
    // MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | SYSCTL_OSC_MAIN |SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480),120000000);
    MAP_SysCtlClockFreqSet((SYSCTL_OSC_INT | SYSCTL_USE_OSC), 16000000);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPION);        // Check if the peripheral access is enabled.
    GPIOPinTypeGPIOOutput(GPIO_PORTN_BASE, GPIO_PIN_0); // LED
    GPIOPinTypeGPIOOutput(GPIO_PORTN_BASE, GPIO_PIN_1);
    GPIOPinWrite(GPIO_PORTN_BASE, GPIO_PIN_1, GPIO_PIN_1);
    GPIOPinWrite(GPIO_PORTN_BASE, GPIO_PIN_0, GPIO_PIN_0);
    Delay_Init();
    GPIOPinWrite(GPIO_PORTN_BASE, GPIO_PIN_1, 0x0);
    GPIOPinWrite(GPIO_PORTN_BASE, GPIO_PIN_0, 0x0);
    key_init();
    gs_init();
    lpwm_init();
    rpwm_init();
    MAP_PWMGenEnable(PWM0_BASE, PWM_GEN_0);
    MAP_PWMGenEnable(PWM0_BASE, PWM_GEN_1);
    brake();
    BUZZER_ON;
    delay_ms(500);
    BUZZER_OFF;
    while (1)
    {
        if (scankeys() == 1)
            break;
    }
    BUZZER_ON;
    delay_ms(500);
    BUZZER_OFF;
    while (1) // Loop forever.
    {
        //scanline();
        if(READ_L1 == GPIO_PIN_SET){
            BUZZER_ON;
            delay_ms(80);
            BUZZER_OFF;
            delay_ms(80);
        }
        if(READ_L2 == GPIO_PIN_SET){
            BUZZER_ON;
            delay_ms(80);
            BUZZER_OFF;
            delay_ms(80);
            BUZZER_ON;
            delay_ms(80);
            BUZZER_OFF;
            delay_ms(80);
        }
        if(READ_M == GPIO_PIN_SET){
            BUZZER_ON;
            delay_ms(80);
            BUZZER_OFF;
            delay_ms(80);
            BUZZER_ON;
            delay_ms(80);
            BUZZER_OFF;
            delay_ms(80);
            BUZZER_ON;
            delay_ms(80);
            BUZZER_OFF;
            delay_ms(80);
        }
        if(READ_R2 == GPIO_PIN_SET){
            BUZZER_ON;
            delay_ms(80);
            BUZZER_OFF;
            delay_ms(80);
            BUZZER_ON;
            delay_ms(80);
            BUZZER_OFF;
            delay_ms(80);
        }
        if(READ_R1 == GPIO_PIN_SET){
            BUZZER_ON;
            delay_ms(80);
            BUZZER_OFF;
            delay_ms(80);
        }
        delay_ms(200);
    }
}