BLE transmit and receive success

This commit is contained in:
2025-06-26 01:41:18 +08:00
parent 331d7dedb7
commit 59f65128b0
29 changed files with 8421 additions and 7601 deletions

View File

@@ -38,8 +38,9 @@ float imu_angle = 0.0f;
//<2F><>ʼ<EFBFBD><CABC>DMA<4D><41><EFBFBD>պ<EFBFBD><D5BA><EFBFBD>
void HCBle_InitDMAReception(void)
{
HAL_UART_Receive_DMA(&huart4,uart_dma_rx_buf,UART_DMA_RX_BUF_SIZE);
__HAL_UART_ENABLE_IT(&huart4,UART_IT_IDLE); //ʹ<>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD>ж<EFBFBD>
HAL_UARTEx_ReceiveToIdle_DMA(&huart4, uart_dma_rx_buf, UART_DMA_RX_BUF_SIZE);
// ֻ<><D6BB>Ҫֱ<D2AA>Ӵ<EFBFBD><D3B4><EFBFBD> <20><><EFBFBD>ڿ<EFBFBD><DABF>н<EFBFBD><D0BD><EFBFBD>
// HAL_UARTEx_RxEventCallback --- <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>
}
@@ -66,38 +67,27 @@ void HCBle_SendData(char *p,...)
// <20><><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD>һ<EFBFBD><D2BB>DMA
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{
if (huart->Instance == UART4)
{
//// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD>
//void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
//{
// if(huart->Instance == UART4)
// {
// if(rx_data == '\n')
// {
// if(rx_index > 0)
// {
// HC_Recevie[rx_index] = '\0';
// data_received = 1;
// rx_index = 0; //<2F><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD> <20><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD> memset
// }else if(rx_index < RX_DataSize - 1)
// {
//
// }else
// {
// rx_index = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// memset(HC_Recevie,'\0',RX_DataSize);
// }
// }
//
// HAL_UART_Receive_IT(huart,&rx_data,1);
// }
//}
uint16_t data_len = UART_DMA_RX_BUF_SIZE - __HAL_DMA_GET_COUNTER(huart->hdmarx);
for (uint16_t i = 0; i < data_len; i++)
{
ble_rx_ring.buffer[ble_rx_ring.head] = uart_dma_rx_buf[i];
ble_rx_ring.head = (ble_rx_ring.head + 1) % RING_BUFFER_SIZE;
}
// memset(uart_dma_rx_buf, '\0', data_len);
// <20><><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> uart_rx_buf[0..Size-1] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>߼<EFBFBD>
HAL_UARTEx_ReceiveToIdle_DMA(&huart4, uart_dma_rx_buf, UART_DMA_RX_BUF_SIZE);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>գ<EFBFBD>HAL<41><4C><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD>ˣ<EFBFBD>
}
}
// <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
uint8_t flag;
// Json<6F><6E><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD> <20><><EFBFBD><EFBFBD>ʹ<EFBFBD>õ<EFBFBD>Thread x <20><><EFBFBD>н<EFBFBD><D0BD><EFBFBD>
void HCBle_ExtractAndParseFrame(void)
@@ -145,7 +135,7 @@ void HCBle_ExtractAndParseFrame(void)
}
}
#ifdef TEST //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>app_thread.h<><68>
// BLE<4C><45><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void ble_rx_task_entry(ULONG thread_input)
{
@@ -154,25 +144,40 @@ void ble_rx_task_entry(ULONG thread_input)
while(1)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
HCBle_ExtractAndParseFrame();
tx_thread_sleep(10);
HCBle_ExtractAndParseFrame(); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>JSON<4F><4E><EFBFBD><EFBFBD>
tx_thread_sleep(10); //ÿ10ms<6D><73>ѯ1<D1AF><31>
}
}
// "#{\"lat\":%.6f,\"lon\":%.6f,\"angle\":%.2f}\n",23.123456, 113.654321, 95.0);
// HCBle_SendData("#{\"lat\":%.6f,\"lon\":%.6f,\"angle\":%.2f}\n",
// current_location.lat, current_location.lon, current_location.angle);
void ble_tx_task_entry(ULONG thread_input) {
BLE_Message msg;
HCBle_SendData("BLE TX <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\r\n");
while(1) {
HCBle_SendData("fuck");
if (tx_queue_receive(&ble_tx_queue, &msg, TX_WAIT_FOREVER) == TX_SUCCESS) {
// HCBle_SendData("%s", msg.data);
HCBle_SendData("#{\"lat\":%.6f,\"lon\":%.6f,\"angle\":%.2f}\n",
23.123456, 113.654321, 95.0);
switch (msg.msg_type)
{
case 1: // <20><><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>λ<EFBFBD>ϱ<EFBFBD>
HCBle_SendData("#{\"lat\":%.6f,\"lon\":%.6f,\"angle\":%.2f}\n",23.123456, 113.654321, 95.0);
break;
case 2: // ACK <20><><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>
HCBle_SendData("%s", msg.data);
break;
default:
HCBle_SendData("δ֪<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ\n");
break;
}
}
}
}
#endif