新增BLE接收,DMA空闲中断

This commit is contained in:
2025-06-09 11:04:36 +08:00
parent a502e81566
commit d963a10872
30 changed files with 6529 additions and 4406 deletions

View File

@@ -2,6 +2,8 @@
// <20>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
extern UART_HandleTypeDef huart1;
extern DMA_HandleTypeDef handle_GPDMA1_Channel5;
extern DMA_HandleTypeDef handle_GPDMA1_Channel4;
/*
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
@@ -12,6 +14,19 @@ volatile uint16_t rx_index = 0; //
volatile uint8_t data_received = 0; // 0 --- δ<><CEB4><EFBFBD><EFBFBD> 1 --- <20><><EFBFBD><EFBFBD>
uint8_t rx_data; //<2F><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>
// dma
uint8_t uart_dma_rx_buf[UART_DMA_RX_BUF_SIZE];
RingBuffer ble_rx_ring = {0}; //<2F><>ʼ<EFBFBD><CABC>
MotorCommand cmd;
//<2F><>ʼ<EFBFBD><CABC>DMA<4D><41><EFBFBD>պ<EFBFBD><D5BA><EFBFBD>
void HCBle_InitDMAReception(void)
{
HAL_UART_Receive_DMA(&huart1,uart_dma_rx_buf,UART_DMA_RX_BUF_SIZE);
__HAL_UART_ENABLE_IT(&huart1,UART_IT_IDLE); //ʹ<>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD>ж<EFBFBD>
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
@@ -24,9 +39,11 @@ void HCBle_SendData(char *p,...)
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#ifdef DEBUG_EN
// <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
HAL_UART_Transmit(&huart1,(uint8_t *)HC_Send_Data,strlen(HC_Send_Data),1);
HAL_UART_Transmit(&huart1,(uint8_t *)HC_Send_Data,strlen(HC_Send_Data),100);
// HAL_UART_Transmi(&huart1,(uint8_t *)formatBuf,strlen(formatBuf),1);
// <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB>ʹ<EFBFBD><CAB9><EFBFBD>жϵĴ<CFB5><C4B4>ڷ<EFBFBD><DAB7>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#else
HAL_UART_Transmit_DMA(&huart1, (uint8_t *)HC_Send_Data, strlen(HC_Send_Data));
#endif
}
@@ -66,3 +83,50 @@ void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD><C7B6><EFBFBD> Json<6F><6E><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD> <20>Լ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݸ<EFBFBD><DDB8>ֻ<EFBFBD>App
// Json<6F><6E><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD> <20><><EFBFBD><EFBFBD>ʹ<EFBFBD>õ<EFBFBD>Thread x <20><><EFBFBD>н<EFBFBD><D0BD><EFBFBD>
void HCBle_ExtractAndParseFrame(void)
{
static char json_buf[128];
static int idx = 0;
static int in_frame = 0;
while (ble_rx_ring.tail != ble_rx_ring.head)
{
char c = ble_rx_ring.buffer[ble_rx_ring.tail];
ble_rx_ring.tail = (ble_rx_ring.tail + 1) % RING_BUFFER_SIZE;
// ֡<><D6A1>ʼ<EFBFBD><CABC>#
if (c == '#') {
idx = 0;
in_frame = 1;
json_buf[idx++] = c;
}
else if (in_frame) {
if (idx < sizeof(json_buf) - 1) {
json_buf[idx++] = c;
// ֡<><D6A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\n
if (c == '\n') {
json_buf[idx] = '\0';
// ? JSON<4F><4E><EFBFBD><EFBFBD>
if (strstr(json_buf, "leftSpeed") && strstr(json_buf, "rightSpeed")) {
sscanf(json_buf, "#{\"leftSpeed\":%d,\"rightSpeed\":%d}", &cmd.LeftSpeed, &cmd.RightSpeed);
//SetMotorSpeed(cmd.LeftSpeed, cmd.RightSpeed); <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
in_frame = 0;
idx = 0;
}
} else {
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǿ<EFBFBD><C7BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
in_frame = 0;
idx = 0;
}
}
}
}

View File

@@ -2,6 +2,10 @@
#define __HCBLE_H
#include "headfile.h"
//#define DEBUG_EN 1 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> ʹ<><CAB9>DMA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9> <20><><EFBFBD><EFBFBD>ʽ
#define RX_DataSize 128
#define RING_BUFFER_SIZE 256
#define UART_DMA_RX_BUF_SIZE 64
// HCBle <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݶ<EFBFBD><DDB6><EFBFBD>
typedef struct
@@ -17,11 +21,20 @@ typedef struct
float angle;
}LocationData;
typedef struct
{
uint8_t buffer[RING_BUFFER_SIZE];
volatile uint16_t head; // ͷָ<CDB7><D6B8>
volatile uint16_t tail; // βָ<CEB2><D6B8>
}RingBuffer;
#define DEBUG_EN 1
#define RX_DataSize 128
extern uint8_t rx_data;
extern RingBuffer ble_rx_ring; //<2F><>ʼ<EFBFBD><CABC>
extern uint8_t uart_dma_rx_buf[UART_DMA_RX_BUF_SIZE];
void HCBle_InitDMAReception(void);
void HCBle_ExtractAndParseFrame(void);
#endif

View File

@@ -6,6 +6,7 @@
#include "memorymap.h"
#include "usart.h"
#include "gpio.h"
#include "gpdma.h"
#include "stdio.h"
#include "stdlib.h"