generated from Template/H563ZI-HAL-CMake-Template
新增BLE接收,DMA空闲中断
This commit is contained in:
66
fun/HCBle.c
66
fun/HCBle.c
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user