CH573读取IO口只要放在中断中读取就一直出错

CH573读取IO口只要放在中断中读取就一直出错,始终是错误的电平信号,但是只要放在while(1)中读取就完整正确,实在不知道是什么情况

#define PUL_IO_INIT()   GPIOB_ModeCfg(GPIO_Pin_7, GPIO_ModeOut_PP_5mA)
#define DIR_IO_INIT()   GPIOB_ModeCfg(GPIO_Pin_4, GPIO_ModeOut_PP_5mA)
#define PUL_OUT_H()     GPIOB_SetBits(GPIO_Pin_7)
#define PUL_OUT_L()     GPIOB_ResetBits(GPIO_Pin_7)
#define DIR_OUT_H()     GPIOB_SetBits(GPIO_Pin_4)
#define DIR_OUT_L()     GPIOB_ResetBits(GPIO_Pin_4)

#define STEP_MOTOR_DIR_CCW()        DIR_OUT_H()
#define STEP_MOTOR_DIR_CW()         DIR_OUT_L()

#define STEP_MOTOR_START_TIMER()    R8_TMR0_CTRL_MOD=RB_TMR_COUNT_EN
#define STEP_MOTOR_STOP_TIMER()     R8_TMR0_CTRL_MOD=0

#define IN1_IO_INIT()   GPIOB_ModeCfg(GPIO_Pin_12, GPIO_ModeIN_PU)
#define IN2_IO_INIT()   GPIOB_ModeCfg(GPIO_Pin_13, GPIO_ModeIN_PU)
#define LIM1_IO_INIT()  GPIOB_ModeCfg(GPIO_Pin_14, GPIO_ModeIN_PU)
#define LIM2_IO_INIT()  GPIOB_ModeCfg(GPIO_Pin_15, GPIO_ModeIN_PU)

#define IN1_READ()      ((GPIOB_ReadPortPin(GPIO_Pin_12) == 0x00)?1:0)
#define IN2_READ()      ((GPIOB_ReadPortPin(GPIO_Pin_13) == 0x00)?1:0)
#define LIM1_READ()     ((GPIOB_ReadPortPin(GPIO_Pin_14) == 0x00)?1:0)
#define LIM2_READ()     ((GPIOB_ReadPortPin(GPIO_Pin_15) == 0x00)?1:0)

//while(1)中
            if(LIM1_READ())
            {
                printf("Lim1\n");
            }
            if(LIM2_READ())
            {
                printf("Lim2\n");
            }
            if(IN1_READ())
            {
                printf("in1\n");
            }
            if(IN2_READ())
            {
                printf("in2\n");
            }
//中断中
//    //起始点限位判断
//    if(LIM1_READ())
//    {
//        //解除限制反转
//        step_motor_limit &= (uint8_t)(~((uint8_t)STEP_MOTOR_LIMIT_CCW));
//    }
//    else
//    {
//        //限制反转
//        step_motor_limit |= (uint8_t)STEP_MOTOR_LIMIT_CCW;
//        printf("lim1");
//    }
//    //结束点限位判断
//    if(LIM2_READ())
//    {
//        //解除限制正转
//        step_motor_limit &= (uint8_t)(~((uint8_t)STEP_MOTOR_LIMIT_CW));
//    }
//    else
//    {
//        //限制正转
//        step_motor_limit |= (uint8_t)STEP_MOTOR_LIMIT_CW;
//        printf("lim2");
//    }

只要进中断就一直输出限位信息,放大循环中就只有触发才会输出信息

啊嘞,脑子不好用了,中断中的判断条件是反的

cheems-meme.jpg


只有登录才能回复,可以选择微信账号登录