From 5ed416bc559ca0781b6ff9fde1e201b6626870d1 Mon Sep 17 00:00:00 2001 From: EN Date: Sat, 13 Jul 2024 15:59:44 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E8=93=9D=E7=89=99=E5=8D=8F?= =?UTF-8?q?=E8=AE=AE=E8=A7=A3=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Core/Src/bluetooth.c | 96 ++++++++++++++++++++------------------------ 1 file changed, 43 insertions(+), 53 deletions(-) diff --git a/Core/Src/bluetooth.c b/Core/Src/bluetooth.c index e8df2cc..0cd2f27 100644 --- a/Core/Src/bluetooth.c +++ b/Core/Src/bluetooth.c @@ -1,75 +1,65 @@ #include "bluetooth.h" #include "usart.h" #include "control.h" -#include "stdio.h" +#include +#include #define BUFFER_SIZE 100 #define MESSAGE_SIZE 19 #define CMD_NUM 9 -static uint8_t rxBuffer[BUFFER_SIZE], rxSize; -static uint8_t txBuffer[BUFFER_SIZE], txSize; +static int8_t rxBuffer[BUFFER_SIZE], txBuffer[BUFFER_SIZE]; static uint8_t cmdIndex; void BLUETOOTH_Init(void) { - rxSize = 0; - HAL_UART_Receive_IT(&huart2, rxBuffer, 1); + HAL_UARTEx_ReceiveToIdle_DMA(&huart2, rxBuffer, 100); } -void receiveCmd() +void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size) { - // 通用协议 - if (rxBuffer[2] == ',') + if (huart == &huart2 && rxBuffer[0] == '$' && rxBuffer[Size - 1] == '#') { - cmdIndex = 0; - for (uint8_t i = 1; i < MESSAGE_SIZE; i += 2) - if (rxBuffer[i] == '0') - ++cmdIndex; - else - break; - if (cmdIndex == CMD_NUM) + // 通用协议 + if (rxBuffer[2] == ',') + { cmdIndex = 0; - CONTROL_CommonCmd(cmdIndex, rxBuffer[cmdIndex * 2 + 1]); - } - else - { - static uint16_t num[6]; - switch (rxBuffer[5]) - { - // 机械手 - case 'S': - break; - // 舵机云台 - case 'P': - break; - // 七彩灯 - case 'C': - sscanf(rxBuffer + 5, "%*3s%hu,%*3s%hu,%*3s%hu", num, num + 1, num + 2); - CONTROL_RGB(num[0], num[1], num[2]); - break; - - // 模式选择 - case 'M': - sscanf(rxBuffer + 5, "%*4s%lc%lc", num, num + 1); - CONTROL_Mode(num[0] - '0', num[1] - '0'); - break; + for (uint8_t i = 1; i < MESSAGE_SIZE; i += 2) + if (rxBuffer[i] == '0') + ++cmdIndex; + else + break; + if (cmdIndex == CMD_NUM) + cmdIndex = 0; + CONTROL_CommonCmd(cmdIndex, rxBuffer[cmdIndex * 2 + 1]); } - } - HAL_UART_Transmit(&huart1, rxBuffer, rxSize, 1000); -} - -void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) -{ - if (huart == &huart2) - { - if (rxSize && rxBuffer[rxSize] == '#') + else { - if (++rxSize > 10) - receiveCmd(); - BLUETOOTH_Init(); + static uint16_t num[6]; + switch (rxBuffer[5]) + { + // 机械手 + case 'S': + break; + // 舵机云台 + case 'P': + break; + // 七彩灯 + case 'C': + sscanf(rxBuffer + 5, "%*3s%hu,%*3s%hu,%*3s%hu", num, num + 1, num + 2); + CONTROL_RGB(num[0], num[1], num[2]); + break; + + // 模式选择 + case 'M': + sscanf(rxBuffer + 5, "%*4s%c%c", num, num + 1); + CONTROL_Mode(num[0] - '0', num[1] - '0'); + break; + } } - else if (rxSize++ == 0 && rxBuffer[0] == '$') - HAL_UART_Receive_IT(&huart2, rxBuffer + rxSize, 1); + memcpy(txBuffer, rxBuffer, Size); + printf("%s", txBuffer); + HAL_UART_Transmit_IT(&huart2, txBuffer, Size); + BLUETOOTH_Init(); } }