generated from Template/H563ZI-HAL-CMake-Template
gps could receive but not parese
This commit is contained in:
@@ -89,7 +89,11 @@ TX_QUEUE im948_uart_rx_queue;
|
||||
|
||||
/* Private function prototypes -----------------------------------------------*/
|
||||
/* USER CODE BEGIN PFP */
|
||||
#define GPS_TASK_STACK_SIZE 2048
|
||||
#define GPS_TASK_PRIORITY 11
|
||||
|
||||
TX_THREAD gps_task;
|
||||
ULONG gps_task_stack[GPS_TASK_STACK_SIZE / sizeof(ULONG)];
|
||||
|
||||
/* USER CODE END 1 */
|
||||
/* USER CODE END 1 */
|
||||
@@ -158,8 +162,26 @@ UINT App_ThreadX_Init(VOID *memory_ptr)
|
||||
TX_1_ULONG, // sizeof(ULONG) bytes per entry
|
||||
im948_rx_queue_buffer,
|
||||
IM948_RX_QUEUE_SIZE * sizeof(ULONG));
|
||||
if(status != TX_SUCCESS)
|
||||
{
|
||||
return status;
|
||||
}
|
||||
|
||||
status = tx_thread_create(&gps_task,
|
||||
"GPS Task",
|
||||
gps_thread_entry,
|
||||
0,
|
||||
gps_task_stack,
|
||||
GPS_TASK_STACK_SIZE,
|
||||
GPS_TASK_PRIORITY,
|
||||
GPS_TASK_PRIORITY,
|
||||
TX_NO_TIME_SLICE,
|
||||
TX_AUTO_START);
|
||||
|
||||
if(status != TX_SUCCESS)
|
||||
{
|
||||
return status;
|
||||
}
|
||||
HCBle_SendData("✅ BLE RX/TX 线程和队列初始化完成\r\n");
|
||||
|
||||
return TX_SUCCESS;
|
||||
|
||||
@@ -103,6 +103,7 @@ int main(void)
|
||||
/* USER CODE BEGIN 2 */
|
||||
|
||||
imu600_init();
|
||||
GPS_Init();
|
||||
// HCBle_InitDMAReception();
|
||||
// HAL_Delay(200);
|
||||
// GPS_Init();
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -252,6 +252,11 @@
|
||||
<WinNumber>2</WinNumber>
|
||||
<ItemText>AngleZ</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>5</count>
|
||||
<WinNumber>2</WinNumber>
|
||||
<ItemText>GPS_DMA_RX_BUF[GPS_DMA_RX_BUF_LEN]</ItemText>
|
||||
</Ww>
|
||||
</WatchWindow2>
|
||||
<Tracepoint>
|
||||
<THDelay>0</THDelay>
|
||||
|
||||
Binary file not shown.
@@ -27,11 +27,16 @@ Project File Date: 07/01/2025
|
||||
<h2>Output:</h2>
|
||||
*** Using Compiler 'V6.21', folder: 'D:\keil5\ARM\ARMCLANG\Bin'
|
||||
Build target 'AutoGuideStick'
|
||||
compiling imu948.c...
|
||||
compiling gps.c...
|
||||
../fun/HCBle.c(140): warning: illegal character encoding in string literal [-Winvalid-source-encoding]
|
||||
140 | HCBle_SendData("? <BD><E2><CE><F6>ʧ<B0><DC>: %s\r\n", frame);
|
||||
| ^~~~~~~~~~~~~~~~ ~~~~~~~~
|
||||
1 warning generated.
|
||||
compiling HCBle.c...
|
||||
linking...
|
||||
Program Size: Code=82196 RO-data=1164 RW-data=20 ZI-data=12836
|
||||
Program Size: Code=83580 RO-data=1428 RW-data=20 ZI-data=15532
|
||||
FromELF: creating hex file...
|
||||
"AutoGuideStick\AutoGuideStick.axf" - 0 Error(s), 0 Warning(s).
|
||||
"AutoGuideStick\AutoGuideStick.axf" - 0 Error(s), 1 Warning(s).
|
||||
|
||||
<h2>Software Packages used:</h2>
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,7 +1,7 @@
|
||||
Dependencies for Project 'AutoGuideStick', Target 'AutoGuideStick': (DO NOT MODIFY !)
|
||||
CompilerVersion: 6210000::V6.21::ARMCLANG
|
||||
F (startup_stm32h563xx.s)(0x68634847)(--target=arm-arm-none-eabi -mcpu=cortex-m33 -mfpu=fpv5-sp-d16 -mfloat-abi=hard -masm=auto -Wa,armasm,--diag_suppress=A1950W -c
|
||||
|
||||
|
||||
-gdwarf-4 -Wa,armasm,--pd,"__MICROLIB SETA 1" -I ../Core/Inc -I ../AZURE_RTOS/App -I ../Drivers/STM32H5xx_HAL_Driver/Inc -I ../Drivers/STM32H5xx_HAL_Driver/Inc/Legacy -I ../Middlewares/ST/threadx/common/inc -I ../Drivers/CMSIS/Device/ST/STM32H5xx/Include -I ../Middlewares/ST/threadx/ports/cortex_m33/ac6/inc -I ../Drivers/CMSIS/Include
|
||||
|
||||
-I./RTE/_AutoGuideStick
|
||||
@@ -141,8 +141,8 @@ I (..\Drivers\STM32H5xx_HAL_Driver\Inc\stm32h5xx_hal_tim_ex.h)(0x683FA4DD)
|
||||
-ID:/keil5/ARM/PACK/Keil/STM32H5xx_DFP/1.3.0/Drivers/CMSIS/Device/ST/STM32H5xx/Include
|
||||
|
||||
-D__UVISION_VERSION="539" -D_RTE_ -DSTM32H563xx -D_RTE_ -DTX_INCLUDE_USER_DEFINE_FILE -DTX_SINGLE_MODE_NON_SECURE="1" -DUSE_HAL_DRIVER -DSTM32H563xx
|
||||
|
||||
-o autoguidestick/gpdma.o -MD)
|
||||
|
||||
-o autoguidestick/gpdma.o -MD)
|
||||
I (..\Core\Inc\main.hc.\Drivers\STM32H5xx_HAL_Driver\Inc\stm32h5xx_hal.h)(0x00000000)
|
||||
I (..\Core\Inc\stm32h5xx_hal_conf.h)(0x685C2A98)
|
||||
I (..\Drivers\STM32H5xx_HAL_Driver\Inc\stm32h5xx_hal_rcc.h)(0x683FA4DD)
|
||||
@@ -216,7 +216,7 @@ I (..\Drivers\STM32H5xx_HAL_Driver\Inc\stm32h5xx_hal_tim_ex.h)(0x683FA4DD)
|
||||
I (..\Drivers\STM32H5xx_HAL_Driver\Inc\stm32h5xx_hal_flash_ex.h)(0x683FA4DD)
|
||||
I (..\Drivers\STM32H5xx_HAL_Driver\Inc\stm32h5xx_hal_pwr.h)(0x683FA4DD)
|
||||
I (..\Drivers\STM32H5xx_HAL_Driver\Inc\stm32h5xx_hal_pwr_ex.h)(0x683FA4DD)
|
||||
I (..\Drivers\STM32H5xx_HAL_Driver\Inc\stm32h5xx_hal_tim.h)(0x683FA4DD)
|
||||
I (..\Drivers\STM32H5xx_HAL_Driver\Inc\stm32h5xx_hal_tim.h)(0x683FA4DD)
|
||||
I (..\Drivers\STM32H5xx_HAL_Driver\Inc\stm32h5xx_hal_tim_ex.h)(0x683FA4DD)
|
||||
I (..\Drivers\STM32H5xx_HAL_Driver\Inc\stm32h5xx_hal_uart.h)(0x683FA4DD)
|
||||
I (..\Drivers\STM32H5xx_HAL_Driver\Inc\stm32h5xx_hal_uart_ex.h)(0x683FA4DD)
|
||||
@@ -2074,7 +2074,7 @@ I (..\Middlewares\ST\threadx\ports\cortex_m33\ac6\inc\tx_port.h)(0x683FA4D9)
|
||||
|
||||
-o autoguidestick/tx_event_flags_info_get.o -MD)
|
||||
I (..\Middlewares\ST\threadx\common\inc\tx_api.h)(0x683FA4DA)
|
||||
I (..\Middlewares\ST\threadx\ports\cortex_m33\ac6\inc\tx_port.h)(0x683FA4D9)
|
||||
I (..\Middlewares\ST\threadx\ports\cortex_m33\ac6\inc\tx_port.h)(0x683FA4D9)
|
||||
I (..\Core\Inc\tx_user.he:\keil5\ARM\ARMCLANG\include\stdlib.h)(0x00000000)
|
||||
I (D:\keil5\ARM\ARMCLANG\include\string.h)(0x6569B012)
|
||||
I (..\Middlewares\ST\threadx\common\inc\tx_trace.h)(0x683FA4DA)
|
||||
@@ -2118,7 +2118,7 @@ I (..\fun\Shake_Motor.hG.\fun\Ultrasound.h..\fun\Buzzer.h)(0x00000000)
|
||||
I (..\Middlewares\ST\threadx\ports\cortex_m33\ac6\inc\tx_port.h)(0x683FA4D9)
|
||||
I (..\Core\Inc\tx_user.he:\keil5\ARM\ARMCLANG\include\stdlib.h)(0x00000000)
|
||||
I (D:\keil5\ARM\ARMCLANG\include\string.h)(0x6569B012)
|
||||
I (..\Middlewares\ST\threadx\common\inc\tx_trace.h)(0x683FA4DA)
|
||||
I (..\Middlewares\ST\threadx\common\inc\tx_trace.h)(0x683FA4DA)
|
||||
I (..\Middlewares\ST\threadx\common\inc\tx_thread.h)(0x683FA4DA)
|
||||
I (..\Middlewares\ST\threadx\common\inc\tx_event_flags.h)(0x683FA4DA)
|
||||
F (../Middlewares/ST/threadx/common/src/tx_event_flags_set_notify.c)(0x683FA4DA)(-xc -std=c11 --target=arm-arm-none-eabi -mcpu=cortex-m33 -mfpu=fpv5-sp-d16 -mfloat-abi=hard -c
|
||||
@@ -2160,7 +2160,7 @@ I (D:\keil5\ARM\ARMCLANG\include\stdio.h)(0x6569B012)
|
||||
I (..\Middlewares\ST\threadx\common\inc\tx_api.h)(0x683FA4DA)
|
||||
I (..\Middlewares\ST\threadx\ports\cortex_m33\ac6\inc\tx_port.h)(0x683FA4D9)
|
||||
I (..\Core\Inc\tx_user.he:\keil5\ARM\ARMCLANG\include\stdlib.h)(0x00000000)
|
||||
I (D:\keil5\ARM\ARMCLANG\include\string.h)(0x6569B012)
|
||||
I (D:\keil5\ARM\ARMCLANG\include\string.h)(0x6569B012)
|
||||
I (..\Middlewares\ST\threadx\common\inc\tx_thread.h)(0x683FA4DA)
|
||||
I (..\Middlewares\ST\threadx\common\inc\tx_mutex.h)(0x683FA4DA)
|
||||
F (../Middlewares/ST/threadx/common/src/tx_mutex_create.c)(0x683FA4DA)(-xc -std=c11 --target=arm-arm-none-eabi -mcpu=cortex-m33 -mfpu=fpv5-sp-d16 -mfloat-abi=hard -c
|
||||
@@ -2293,7 +2293,7 @@ I (D:\keil5\ARM\ARMCLANG\include\stdarg.h)(0x6569B012)
|
||||
I (..\Middlewares\ST\threadx\common\inc\tx_thread.h)(0x683FA4DA)
|
||||
I (..\Middlewares\ST\threadx\common\inc\tx_mutex.h)(0x683FA4DA)
|
||||
F (../Middlewares/ST/threadx/common/src/tx_mutex_priority_change.c)(0x683FA4DA)(-xc -std=c11 --target=arm-arm-none-eabi -mcpu=cortex-m33 -mfpu=fpv5-sp-d16 -mfloat-abi=hard -c
|
||||
|
||||
|
||||
-fno-rtti -funsigned-char -fshort-enums -fshort-wchar
|
||||
|
||||
-D__MICROLIB -gdwarf-4 -O0 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ../Core/Inc -I ../AZURE_RTOS/App -I ../Drivers/STM32H5xx_HAL_Driver/Inc -I ../Drivers/STM32H5xx_HAL_Driver/Inc/Legacy -I ../Middlewares/ST/threadx/common/inc -I ../Drivers/CMSIS/Device/ST/STM32H5xx/Include -I ../Middlewares/ST/threadx/ports/cortex_m33/ac6/inc -I ../Drivers/CMSIS/Include -I ../fun
|
||||
@@ -2335,7 +2335,7 @@ I (D:\keil5\ARM\ARMCLANG\include\stdio.h)(0x6569B012)
|
||||
I (..\Middlewares\ST\threadx\common\inc\tx_trace.h)(0x683FA4DA)
|
||||
I (..\Middlewares\ST\threadx\common\inc\tx_thread.h)(0x683FA4DA)
|
||||
I (..\Middlewares\ST\threadx\common\inc\tx_mutex.h)(0x683FA4DA)
|
||||
F (../Middlewares/ST/threadx/common/src/tx_queue_cleanup.c)(0x683FA4DA)(-xc -std=c11 --target=arm-arm-none-eabi -mcpu=cortex-m33 -mfpu=fpv5-sp-d16 -mfloat-abi=hard -c
|
||||
F (../Middlewares/ST/threadx/common/src/tx_queue_cleanup.c)(0x683FA4DA)(-xc -std=c11 --target=arm-arm-none-eabi -mcpu=cortex-m33 -mfpu=fpv5-sp-d16 -mfloat-abi=hard -c
|
||||
|
||||
-fno-rtti -funsigned-char -fshort-enums -fshort-wchar
|
||||
|
||||
@@ -2379,7 +2379,7 @@ I (D:\keil5\ARM\ARMCLANG\include\stdarg.h)(0x6569B012)
|
||||
I (..\Middlewares\ST\threadx\common\inc\tx_queue.h)(0x683FA4DA)
|
||||
F (../Middlewares/ST/threadx/common/src/tx_queue_delete.c)(0x683FA4DA)(-xc -std=c11 --target=arm-arm-none-eabi -mcpu=cortex-m33 -mfpu=fpv5-sp-d16 -mfloat-abi=hard -c
|
||||
|
||||
-fno-rtti -funsigned-char -fshort-enums -fshort-wchar
|
||||
-fno-rtti -funsigned-char -fshort-enums -fshort-wchar
|
||||
|
||||
-D__MICROLIB -gdwarf-4 -O0 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ../Core/Inc -I ../AZURE_RTOS/App -I ../Drivers/STM32H5xx_HAL_Driver/Inc -I ../Drivers/STM32H5xx_HAL_Driver/Inc/Legacy -I ../Middlewares/ST/threadx/common/inc -I ../Drivers/CMSIS/Device/ST/STM32H5xx/Include -I ../Middlewares/ST/threadx/ports/cortex_m33/ac6/inc -I ../Drivers/CMSIS/Include -I ../fun
|
||||
|
||||
@@ -2422,5 +2422,5 @@ I (D:\keil5\ARM\ARMCLANG\include\stdio.h)(0x6569B012)
|
||||
I (..\Middlewares\ST\threadx\common\inc\tx_thread.h)(0x683FA4DA)
|
||||
I (..\Middlewares\ST\threadx\common\inc\tx_queue.h)(0x683FA4DA)
|
||||
F (../Middlewares/ST/threadx/common/src/tx_queue_front_send.c)(0x683FA4DA)(-xc -std=c11 --target=arm-arm-none-eabi -mcpu=cortex-m33 -mfpu=fpv5-sp-d16 -mfloat-abi=hard -c
|
||||
|
||||
-fno-rtti -funsigned-char -fshort-enums -fshort-wchar
|
||||
|
||||
-fno-rtti -funsigned-char -fshort-enums -fshort-wchar
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
32
fun/HCBle.c
32
fun/HCBle.c
@@ -42,6 +42,7 @@ TX_EVENT_FLAGS_GROUP ble_event_flags;
|
||||
|
||||
void HCBle_InitEventFlags(void)
|
||||
{ tx_event_flags_create(&ble_event_flags, "BLE Events");
|
||||
tx_event_flags_create(&system_events,"gps Events");
|
||||
// tx_event_flags_create(&sensor_events,"Sensor Events");
|
||||
}
|
||||
|
||||
@@ -101,15 +102,19 @@ void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
|
||||
}
|
||||
else if(huart->Instance == USART2) // gps<70>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
// // <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
|
||||
|
||||
tx_event_flags_set(&system_events, EVENT_GPS_DATA_READY, TX_OR);
|
||||
// // <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
|
||||
//
|
||||
// tx_event_flags_set(&system_events, EVENT_GPS_DATA_READY, TX_OR);
|
||||
for (uint16_t i = 0; i < Size; ++i) { /* <20><><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><D0BB><EFBFBD> */
|
||||
GPS_LinePush(GPS_DMA_RX_BUF[i]);
|
||||
}
|
||||
//<2F><><EFBFBD>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
HAL_UARTEx_ReceiveToIdle_IT(&huart2,GPS_DMA_RX_BUF,GPS_DMA_RX_BUF_LEN);
|
||||
|
||||
// HAL_UARTEx_ReceiveToIdle_DMA(&huart2,GPS_DMA_RX_BUF,GPS_DMA_RX_BUF_LEN);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -189,17 +194,16 @@ void ble_rx_task_entry(ULONG thread_input)
|
||||
// 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) {
|
||||
char recv_msg[128];
|
||||
BleMessage msg;
|
||||
while(1) {
|
||||
|
||||
HCBle_SendData("#{\"lat\":%.6f,\"lon\":%.6f,\"angle\":%.2f}\n",23.123456, 113.654321, 95.0);
|
||||
tx_thread_sleep(500);
|
||||
// if(tx_queue_receive(&ble_tx_queue,&msg,TX_WAIT_FOREVER) == TX_SUCCESS)
|
||||
// {
|
||||
// HCBle_SendData("#{\"lat\":%.6f,\"lon\":%.6f,\"angle\":%.1f}\n",
|
||||
// 23.123456, 113.654321,msg.angle);
|
||||
// }
|
||||
// HCBle_SendData("#{\"lat\":%.6f,\"lon\":%.6f,\"angle\":%.2f}\n",23.123456, 113.654321, 95.0);
|
||||
// tx_thread_sleep(500);
|
||||
if(tx_queue_receive(&ble_tx_queue,&msg,TX_WAIT_FOREVER) == TX_SUCCESS)
|
||||
{
|
||||
HCBle_SendData("#{\"lat\":%.6f,\"lon\":%.6f,\"angle\":%.1f}\n",
|
||||
msg.lat, msg.lon,0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
267
fun/gps.c
267
fun/gps.c
@@ -26,68 +26,206 @@ _GPSData GPS;
|
||||
void GPS_Init(void)
|
||||
{
|
||||
HAL_UARTEx_ReceiveToIdle_IT(&huart2, GPS_DMA_RX_BUF, GPS_DMA_RX_BUF_LEN);
|
||||
// __HAL_DMA_DISABLE_IT(&handle_GPDMA1_Channel3, DMA_IT_HT); // <20><><EFBFBD>ð봫<C3B0><EBB4AB>
|
||||
// HAL_UARTEx_ReceiveToIdle_DMA(&huart2,GPS_DMA_RX_BUF,GPS_DMA_RX_BUF_LEN);
|
||||
}
|
||||
|
||||
#ifdef parse
|
||||
// GPS<50><53><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD>
|
||||
void parseGpsBuffer()
|
||||
//void parseGpsBuffer()
|
||||
//{
|
||||
// char *subString;
|
||||
// char *subStringNext;
|
||||
// char i = 0;
|
||||
//
|
||||
// if(GPS.isGetData)
|
||||
// {
|
||||
// GPS.isGetData = 0; // <20>ѱ<EFBFBD>־λ<D6BE><CEBB>Ϊ1
|
||||
//
|
||||
// char usefullBuffer[2] = {0};
|
||||
// for(i = 0; i <= 6; i++)
|
||||
// {
|
||||
// if(i == 0)
|
||||
// {
|
||||
//
|
||||
// subString = strstr(GPS.GPS_Buffer,",");
|
||||
// if(!subString)return;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// subString++;
|
||||
// subStringNext = strstr(subString,",");
|
||||
// if(!subStringNext)return;
|
||||
//
|
||||
// switch(i)
|
||||
// {
|
||||
// case 1:
|
||||
// memcpy(GPS.UTCTime,subString,subStringNext - subString);
|
||||
// break;
|
||||
// case 2:
|
||||
// memcpy(usefullBuffer,subString,subStringNext - subString);
|
||||
// break;
|
||||
// case 3:
|
||||
// memcpy(GPS.latitude,subString,subStringNext - subString);
|
||||
// break;
|
||||
// case 4:
|
||||
// memcpy(GPS.N_S,subString,subStringNext - subString);
|
||||
// break;
|
||||
// case 5:
|
||||
// memcpy(GPS.longitude,subString,subStringNext - subString);
|
||||
// break;
|
||||
// case 6:
|
||||
// memcpy(GPS.E_W,subString,subStringNext - subString);
|
||||
// break;
|
||||
// default:break;
|
||||
// }
|
||||
//
|
||||
// subString = subStringNext;
|
||||
// }
|
||||
//
|
||||
// }
|
||||
// GPS.isParseData = 1;
|
||||
// GPS.isUsefull = (usefullBuffer[0] == 'A') ? 1 : 0;
|
||||
// }
|
||||
//
|
||||
//}
|
||||
|
||||
|
||||
//void parseGpsBuffer(void)
|
||||
//{
|
||||
// if (!GPS.isGetData) return;
|
||||
// GPS.isGetData = 0;
|
||||
|
||||
// /* ----------- <20><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD> ------------ */
|
||||
// const char *p = GPS.GPS_Buffer;
|
||||
|
||||
// /* <20><> RMC ----------------------------------------------------- */
|
||||
// if (!strncmp(p, "$GNRMC", 6) || !strncmp(p, "$GPRMC", 6))
|
||||
// {
|
||||
// char status, lat[16], ns[3], lon[16], ew[3];
|
||||
// if (sscanf(p,
|
||||
// "$%*[^,],%*[^,],%c,%15[^,],%2[^,],%15[^,],%2[^,],",
|
||||
// &status, lat, ns, lon, ew) == 5)
|
||||
// {
|
||||
// if (status == 'A') /* <20><>λ<EFBFBD><CEBB>Ч */
|
||||
// {
|
||||
// strcpy(GPS.latitude, lat);
|
||||
// strcpy(GPS.N_S, ns);
|
||||
// strcpy(GPS.longitude, lon);
|
||||
// strcpy(GPS.E_W, ew);
|
||||
// GPS.isParseData = 1;
|
||||
// GPS.isUsefull = 1;
|
||||
// }
|
||||
// }
|
||||
// return;
|
||||
// }
|
||||
|
||||
// /* <20><> GGA ----------------------------------------------------- */
|
||||
// if (!strncmp(p, "$GNGGA", 6) || !strncmp(p, "$GPGGA", 6))
|
||||
// {
|
||||
// int q; char lat[16], ns[3], lon[16], ew[3];
|
||||
// if (sscanf(p,
|
||||
// "$%*[^,],%*[^,],%15[^,],%2[^,],%15[^,],%2[^,],%d,",
|
||||
// lat, ns, lon, ew, &q) == 5)
|
||||
// {
|
||||
// if (q > 0) /* q=0 <20><EFBFBD>λ */
|
||||
// {
|
||||
// strcpy(GPS.latitude, lat);
|
||||
// strcpy(GPS.N_S, ns);
|
||||
// strcpy(GPS.longitude, lon);
|
||||
// strcpy(GPS.E_W, ew);
|
||||
// GPS.isParseData = 1;
|
||||
// GPS.isUsefull = 1;
|
||||
// }
|
||||
// }
|
||||
// return;
|
||||
// }
|
||||
|
||||
// /* <20><> GLL ----------------------------------------------------- */
|
||||
// if (!strncmp(p, "$GNGLL", 6) || !strncmp(p, "$GPGLL", 6))
|
||||
// {
|
||||
// char status, lat[16], ns[3], lon[16], ew[3];
|
||||
// if (sscanf(p,
|
||||
// "$%*[^,],%15[^,],%2[^,],%15[^,],%2[^,],%*[^,],%c",
|
||||
// lat, ns, lon, ew, &status) == 5)
|
||||
// {
|
||||
// if (status == 'A')
|
||||
// {
|
||||
// strcpy(GPS.latitude, lat);
|
||||
// strcpy(GPS.N_S, ns);
|
||||
// strcpy(GPS.longitude, lon);
|
||||
// strcpy(GPS.E_W, ew);
|
||||
// GPS.isParseData = 1;
|
||||
// GPS.isUsefull = 1;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
|
||||
/* === <20><> <20>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD> & <20><><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD> === */
|
||||
static char line_buf[GPS_Buffer_Length];
|
||||
static uint16_t line_w = 0;
|
||||
|
||||
void GPS_LinePush(uint8_t ch)
|
||||
{
|
||||
char *subString;
|
||||
char *subStringNext;
|
||||
char i = 0;
|
||||
|
||||
if(GPS.isGetData)
|
||||
{
|
||||
GPS.isGetData = 0; // <20>ѱ<EFBFBD>־λ<D6BE><CEBB>Ϊ1
|
||||
|
||||
char usefullBuffer[2] = {0};
|
||||
for(i = 0; i <= 6; i++)
|
||||
{
|
||||
if(i == 0)
|
||||
{
|
||||
|
||||
subString = strstr(GPS.GPS_Buffer,",");
|
||||
if(!subString)return;
|
||||
if (ch == '\n') { /* һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
line_buf[line_w] = '\0';
|
||||
strncpy(GPS.GPS_Buffer, line_buf, GPS_Buffer_Length);
|
||||
line_w = 0;
|
||||
GPS.isGetData = 1;
|
||||
tx_event_flags_set(&system_events, EVENT_GPS_DATA_READY, TX_OR);
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
subString++;
|
||||
subStringNext = strstr(subString,",");
|
||||
if(!subStringNext)return;
|
||||
|
||||
switch(i)
|
||||
{
|
||||
case 1:
|
||||
memcpy(GPS.UTCTime,subString,subStringNext - subString);
|
||||
break;
|
||||
case 2:
|
||||
memcpy(usefullBuffer,subString,subStringNext - subString);
|
||||
break;
|
||||
case 3:
|
||||
memcpy(GPS.latitude,subString,subStringNext - subString);
|
||||
break;
|
||||
case 4:
|
||||
memcpy(GPS.N_S,subString,subStringNext - subString);
|
||||
break;
|
||||
case 5:
|
||||
memcpy(GPS.longitude,subString,subStringNext - subString);
|
||||
break;
|
||||
case 6:
|
||||
memcpy(GPS.E_W,subString,subStringNext - subString);
|
||||
break;
|
||||
default:break;
|
||||
}
|
||||
|
||||
subString = subStringNext;
|
||||
}
|
||||
|
||||
}
|
||||
GPS.isParseData = 1;
|
||||
GPS.isUsefull = (usefullBuffer[0] == 'A') ? 1 : 0;
|
||||
}
|
||||
|
||||
if (line_w < GPS_Buffer_Length - 1)
|
||||
line_buf[line_w++] = ch; /* <20><>ͨ<EFBFBD>ַ<EFBFBD> */
|
||||
}
|
||||
|
||||
/* === <20><> <20>½<EFBFBD><C2BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻҪ<D6BB><D2AA>γ<EFBFBD><CEB3> === */
|
||||
void parseGpsBuffer(void)
|
||||
{
|
||||
if (!GPS.isGetData) return;
|
||||
GPS.isGetData = 0;
|
||||
GPS.isParseData = 0;
|
||||
GPS.isUsefull = 0;
|
||||
|
||||
const char *p = GPS.GPS_Buffer;
|
||||
/* ---- $GxRMC ---- */
|
||||
if (!strncmp(p, "$GNRMC", 6) || !strncmp(p, "$GPRMC", 6)) {
|
||||
char s, lat[16], ns[3], lon[16], ew[3];
|
||||
if (sscanf(p,
|
||||
"$%*[^,],%*[^,],%c,%15[^,],%2[^,],%15[^,],%2[^,],",
|
||||
&s, lat, ns, lon, ew) == 5 && s == 'A') {
|
||||
strcpy(GPS.latitude, lat); strcpy(GPS.N_S, ns);
|
||||
strcpy(GPS.longitude, lon); strcpy(GPS.E_W, ew);
|
||||
GPS.isParseData = GPS.isUsefull = 1;
|
||||
}
|
||||
return;
|
||||
}
|
||||
/* ---- $GxGGA ---- */
|
||||
if (!strncmp(p, "$GNGGA", 6) || !strncmp(p, "$GPGGA", 6)) {
|
||||
int q; char lat[16], ns[3], lon[16], ew[3];
|
||||
if (sscanf(p,
|
||||
"$%*[^,],%*[^,],%15[^,],%2[^,],%15[^,],%2[^,],%d,",
|
||||
lat, ns, lon, ew, &q) == 5 && q > 0) {
|
||||
strcpy(GPS.latitude, lat); strcpy(GPS.N_S, ns);
|
||||
strcpy(GPS.longitude, lon); strcpy(GPS.E_W, ew);
|
||||
GPS.isParseData = GPS.isUsefull = 1;
|
||||
}
|
||||
return;
|
||||
}
|
||||
/* ---- $GxGLL ---- */
|
||||
if (!strncmp(p, "$GNGLL", 6) || !strncmp(p, "$GPGLL", 6)) {
|
||||
char s, lat[16], ns[3], lon[16], ew[3];
|
||||
if (sscanf(p,
|
||||
"$%*[^,],%15[^,],%2[^,],%15[^,],%2[^,],%*[^,],%c",
|
||||
lat, ns, lon, ew, &s) == 5 && s == 'A') {
|
||||
strcpy(GPS.latitude, lat); strcpy(GPS.N_S, ns);
|
||||
strcpy(GPS.longitude, lon); strcpy(GPS.E_W, ew);
|
||||
GPS.isParseData = GPS.isUsefull = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#else // <20><><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD><C7B6>ڸĽ<DAB8><C4BD><EFBFBD><EFBFBD><EFBFBD>parse <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>в<EFBFBD><D0B2><EFBFBD>
|
||||
void parseGpsBuffer()
|
||||
{
|
||||
@@ -172,7 +310,7 @@ void GPS_Data_CLR(void)
|
||||
//
|
||||
// tx_event_flags_set(&system_events, EVENT_GPS_DATA_READY, TX_OR);
|
||||
// //<2F><><EFBFBD>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// HAL_UARTEx_ReceiveToIdle_DMA(&huart2,GPS_DMA_RX_BUF,GPS_DMA_RX_BUF_LEN);
|
||||
// HAL_UARTEx_ReceiveToIdle_IT(&huart2,GPS_DMA_RX_BUF,GPS_DMA_RX_BUF_LEN);
|
||||
// }
|
||||
//
|
||||
//}
|
||||
@@ -186,25 +324,28 @@ void gps_thread_entry(ULONG thread_input)
|
||||
{
|
||||
GPS_Init();
|
||||
static int gps_first_fix_sent = 0;
|
||||
|
||||
BleMessage msg;
|
||||
while (1)
|
||||
{
|
||||
ULONG events;
|
||||
tx_event_flags_get(&system_events, EVENT_GPS_DATA_READY, TX_OR_CLEAR, &events, TX_WAIT_FOREVER);
|
||||
|
||||
parseGpsBuffer();
|
||||
|
||||
HCBle_SendData("[GPS] isGetData=%d, isParseData=%d, isUsefull=%d, Buffer=%s\r\n",
|
||||
GPS.isGetData, GPS.isParseData, GPS.isUsefull, GPS.GPS_Buffer);
|
||||
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);
|
||||
|
||||
char msg[128];
|
||||
snprintf(msg, sizeof(msg), "#{\"lat\":%.6f,\"lon\":%.6f,\"angle\":%.2f}\n",
|
||||
current_location.lat,
|
||||
current_location.lon,
|
||||
current_location.angle);
|
||||
|
||||
msg.lat = current_location.lat;
|
||||
msg.lon = current_location.lon;
|
||||
// snprintf(msg, sizeof(msg), "#{\"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);
|
||||
|
||||
}
|
||||
|
||||
@@ -6,11 +6,11 @@
|
||||
#define USART_REC_LEN 200
|
||||
#define EN_USART2_RX 1 //ʹ<>ܽ<EFBFBD><DCBD><EFBFBD> --- 1 <20><>֮ 0
|
||||
|
||||
#define GPS_DMA_RX_BUF_LEN 200 //<2F>ɸ<EFBFBD><C9B8><EFBFBD>NMEA<45><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define GPS_DMA_RX_BUF_LEN 220 //<2F>ɸ<EFBFBD><C9B8><EFBFBD>NMEA<45><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>gps<70>ṹ<EFBFBD><E1B9B9>
|
||||
#define GPS_Buffer_Length 80
|
||||
#define GPS_Buffer_Length 256
|
||||
#define UTCTime_Length 11
|
||||
#define latitude_Length 11
|
||||
#define N_S_Length 2
|
||||
@@ -36,5 +36,6 @@ double Convert_to_degrees(char *data);
|
||||
void parseGpsBuffer();
|
||||
void gps_thread_entry(ULONG thread_input);
|
||||
void GPS_Init(void);
|
||||
void GPS_LinePush(uint8_t ch);
|
||||
|
||||
#endif
|
||||
@@ -82,8 +82,8 @@ void imu_angle_ble_task_entry(ULONG thread_input)
|
||||
{
|
||||
isNewData = 0;
|
||||
|
||||
float angle = AngleZ;
|
||||
HCBle_SendData("Z:%.2f\r\n",AngleZ);
|
||||
float angle = AngleZ * 0.0054931640625f;
|
||||
// HCBle_SendData("Z:%.2f\r\n",AngleZ);
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>angle<6C><65>ä<EFBFBD>ȳ<EFBFBD><C8B3><EFBFBD><EFBFBD>ж<EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>:
|
||||
if(angle > 30.0f) {
|
||||
|
||||
Reference in New Issue
Block a user