0

我无法在两个 STM32F3 Discovery 板之间进行非常简单的传输。让我解释一下我在做什么。

我将 Board-A 通过 i2c 连接到 LCD 20x4,Board-B 通过 i2c 连接到 Qrobot 3D 手势传感器,目标是捕捉 Board-B 的运动,闪烁同一板上的一些 LED 并通过UART (uart4) 到 BoardA。

问题是虽然debug显示传输发生了,但实际上Board-A并没有进入RxCpltCallback的回调中。在深入探讨该主题之前,让我向您展示代码:

这是 Board-A 的 Receive 回调。(此外,此问题已测试通过 Uart4 从另一个 F3 接收(F3 也通过 uart4 发送,但在 BushButton 的回调中))

void HAL_UART_RxCpltCallback(UART_HandleTypeDef * huart)
{

switch (recvbuff)
    {

        case 1:
            HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_9);
            lcd_send_string(up);
            for(int i=0;i<5000000;i++){
                count1=count+1;
            }
            count1=0;

            lcd_send_cmd (0x01);

        break; //causa l'uscita immediata dallo switch
        case 2:
            HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_10);
            lcd_send_string(down);
            for(int i=0;i<5000000;i++){
                count1=count+1;
            }
            count1=0;

            lcd_send_cmd (0x01);


        break;
        case 3:
            HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_11);
            lcd_send_string(left);
            for(int i=0;i<5000000;i++){
                count1=count+1;
            }
            count1=0;

            lcd_send_cmd (0x01);


        break;
        case 4:
            HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_12);
            lcd_send_string(right);
            for(int i=0;i<5000000;i++){
                count1=count+1;
            }
            count1=0;

            lcd_send_cmd (0x01);



        break;
        case 5:
            HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_13);
            lcd_send_string(forward);
            for(int i=0;i<5000000;i++){
                count1=count+1;
            }
            count1=0;

            lcd_send_cmd (0x01);



        break;
        case 6:HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_14);
            lcd_send_string(backward);
            for(int i=0;i<5000000;i++){
                count1=count+1;
            }
            count1=0;

            lcd_send_cmd (0x01);



        break;
        case 7:
            HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_15);
            lcd_send_string(clockwise);
            for(int i=0;i<5000000;i++){
                count1=count+1;
            }
            count1=0;

            lcd_send_cmd (0x01);



        break;
        case 8:
            lcd_send_string(anticlockwise);
            for(int i=0;i<5000000;i++){
                count1=count+1;
            }
            count1=0;

            lcd_send_cmd (0x01);



        break;
        case 9:
            lcd_send_string(wave);
            for(int i=0;i<5000000;i++){
                count1=count+1;
            }
            count1=0;

            lcd_send_cmd (0x01);



        break;
        default:

        break;
    }
HAL_UART_Receive_IT(&huart4, (uint8_t*)&recvbuff, sizeof(uint32_t));

}

这似乎工作正常,我认为问题不在这里。

让我们看一下 Board-B 的代码:这个程序必须在一个循环中检查一些代表手势的标志,当出现时闪烁​​一些 LED 并通过 huart 发送一个数字,这是一个非常简单的任务!

   while (1)
   {
         /* USER CODE END WHILE */
         Gesture_Data = DEV_I2C_ReadWord(PAJ_INT_FLAG1);
            if (Gesture_Data)
            {
            switch (Gesture_Data)
            {
                case PAJ_UP:                         { send(1);
                                                       HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_9);                    
                                                      break;}
                case PAJ_DOWN:                       { send(2);
                                                       HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_13);                                       
                                                       break;}
                case PAJ_LEFT:                       { send(3);
                                                       HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_15);                       
                                                       break;}
                case PAJ_RIGHT:                      { send(4);                                                       
                                                       break;}

                /* other cases */
                default: break;
            }
            Gesture_Data=0;
            DEV_Delay_ms(50);
        }

}

为了通过调试和断点进行测试,我仅为传输创建了一个单独的函数(还尝试了 HAL_UART_Transimit(&huart4, (uint8_t *)num, sizeof (uint32_t), HAL_MAX_DELAY)):

void send(uint32_t num)
{
HAL_UART_Transmit_IT(&huart4, (uint8_t *)num, sizeof (uint32_t));
}

当我在板上尝试此代码时,传感器识别手势并闪烁正确的 LED,在调试中我可以清楚地看到我输入了 trasmit 的函数 sed() 但没有任何东西到达另一块板上。PS:连接两块板的每根电缆都工作正常,并且在正确的引脚上。

你怎么看呢?我无法摆脱这个问题!

4

0 回答 0