Add ble,gps,imu and others in threadx,need test

This commit is contained in:
2025-06-25 14:25:28 +08:00
parent 64f668fc5f
commit 957d1df05f
41 changed files with 3469 additions and 3025 deletions

115
fun/gps.c
View File

@@ -1,5 +1,11 @@
#include "gps.h"
//#define TEST 1 //<2F><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><><C8A5><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ԽӴ<D4BD><D3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD>
#define parse 1 // <20><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
/**
<EFBFBD><EFBFBD>ʾ: <20><>Ȼ BLE <20>Լ<EFBFBD> GPS<50><53><EFBFBD><EFBFBD>DMA+ UART<52><54><EFBFBD>գ<EFBFBD><D5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD><C7B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ
BLE --- DMA + IDLE <20>ж<EFBFBD> ѭ<><D1AD> DMA + <20><><EFBFBD><EFBFBD><EFBFBD>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UART IDLE
@@ -17,47 +23,12 @@ extern DMA_HandleTypeDef handle_GPDMA1_Channel3;
uint8_t GPS_DMA_RX_BUF[GPS_DMA_RX_BUF_LEN]; //<2F><><EFBFBD><EFBFBD>DMA<4D><41><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD>
_GPSData GPS;
// TEST <20>ǽ<EFBFBD><C7BD><EFBFBD><EFBFBD>߼<EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>Ĵ<EFBFBD><C4B4>룬else֮<65><D6AE><EFBFBD><EFBFBD><EFBFBD>Ǽ<EFBFBD><C7BC>뵽Thread X<><58>ʵ<EFBFBD>ʿ<EFBFBD><CABF>ƴ<EFBFBD><C6B4><EFBFBD>
#ifdef TEST
//void GPS_DMA_Start(void)
//{
// HAL_UART_Receive_DMA(&huart2,GPS_DMA_RX_BUF,GPS_DMA_RX_BUF_LEN);
// __HAL_DMA_ENABLE_IT(huart2.hdmarx,DMA_IT_HT); //<2F><EFBFBD><EBB4AB><EFBFBD>ж<EFBFBD>
// __HAL_DMA_ENABLE_IT(huart2.hdmarx,DMA_IT_TC); //ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
//}
void GPS_Init(void)
{
HAL_UARTEx_ReceiveToIdle_DMA(&huart2, GPS_DMA_RX_BUF, GPS_DMA_RX_BUF_LEN);
__HAL_DMA_DISABLE_IT(&handle_GPDMA1_Channel3, DMA_IT_HT); // <20><><EFBFBD>ð봫<C3B0><EBB4AB>
}
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{
if(huart->Instance == USART2)
{
// <20><><EFBFBD><EFBFBD> Size <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
memcpy(GPS.GPS_Buffer,GPS_DMA_RX_BUF,Size);
GPS.GPS_Buffer[Size] = '\0';
GPS.isGetData = 1; //<2F><><EFBFBD>ݽ<EFBFBD><DDBD>ձ<EFBFBD>־λ<D6BE><CEBB>Ϊ1
//<2F><><EFBFBD>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
HAL_UARTEx_ReceiveToIdle_DMA(&huart2,GPS_DMA_RX_BUF,GPS_DMA_RX_BUF_LEN);
__HAL_DMA_DISABLE_IT(&handle_GPDMA1_Channel3,DMA_IT_HT);
}
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void GPS_Data_CLR(void)
{
memset(GPS_DMA_RX_BUF,0,GPS_DMA_RX_BUF_LEN);
}
#ifdef parse
// GPS<50><53><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD>
void parseGpsBuffer()
@@ -172,7 +143,6 @@ void parseGpsBuffer()
*/
#endif
// ת<><D7AA><EFBFBD>Ƕ<EFBFBD>
double Convert_to_degrees(char *data)
{
@@ -181,11 +151,82 @@ double Convert_to_degrees(char *data)
double min = temp - deg * 100;
return deg + (min / 60.0);
}
#else // <20>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Thread X
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void GPS_Data_CLR(void)
{
memset(GPS_DMA_RX_BUF,0,GPS_DMA_RX_BUF_LEN);
}
//void GPS_DMA_Start(void)
//{
// HAL_UART_Receive_DMA(&huart2,GPS_DMA_RX_BUF,GPS_DMA_RX_BUF_LEN);
// __HAL_DMA_ENABLE_IT(huart2.hdmarx,DMA_IT_HT); //<2F><EFBFBD><EBB4AB><EFBFBD>ж<EFBFBD>
// __HAL_DMA_ENABLE_IT(huart2.hdmarx,DMA_IT_TC); //ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
//}
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{
if(huart->Instance == USART2)
{
// <20><><EFBFBD><EFBFBD> Size <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
memcpy(GPS.GPS_Buffer,GPS_DMA_RX_BUF,Size);
GPS.GPS_Buffer[Size] = '\0';
GPS.isGetData = 1; //<2F><><EFBFBD>ݽ<EFBFBD><DDBD>ձ<EFBFBD>־λ<D6BE><CEBB>Ϊ1
//<2F><><EFBFBD>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
HAL_UARTEx_ReceiveToIdle_DMA(&huart2,GPS_DMA_RX_BUF,GPS_DMA_RX_BUF_LEN);
__HAL_DMA_DISABLE_IT(&handle_GPDMA1_Channel3,DMA_IT_HT);
}
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫʹ<D2AA>õ<EFBFBD>ThreadX <20>Ͱ<EFBFBD>gps.h<>е<EFBFBD> TEST <20><EFBFBD><EAB6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#ifdef TEST
void gps_thread_entry(ULONG thread_input)
{
GPS_Init();
static int gps_first_fix_sent = 0;
while (1)
{
ULONG events;
tx_event_flags_get(&system_events, EVENT_GPS_DATA_READY, TX_OR_CLEAR, &events, TX_WAIT_FOREVER);
parseGpsBuffer();
if (GPS.isParseData && GPS.isUsefull)
{
current_location.lat = Convert_to_degrees(GPS.latitude);
current_location.lon = Convert_to_degrees(GPS.longitude);
tx_event_flags_set(&system_events, EVENT_LOCATION_UPDATED, TX_OR);
BLE_Message msg;
msg.msg_type = 1;
snprintf(msg.data, sizeof(msg.data), "#{\"lat\":%.6f,\"lon\":%.6f,\"angle\":%.2f}\n",
current_location.lat,
current_location.lon,
current_location.angle);
tx_queue_send(&ble_tx_queue, &msg, TX_WAIT_FOREVER);
if (!gps_first_fix_sent)
{
gps_first_fix_sent = 1;
BLE_Message fix_msg;
fix_msg.msg_type = 2;
snprintf(fix_msg.data, sizeof(fix_msg.data), "#{\"info\":\"GPS fixed and ready\"}\n");
tx_queue_send(&ble_tx_queue, &fix_msg, TX_WAIT_FOREVER);
}
}
}
}
#endif