我无法在两个 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:连接两块板的每根电缆都工作正常,并且在正确的引脚上。
你怎么看呢?我无法摆脱这个问题!