diff --git a/.settings/language.settings.xml b/.settings/language.settings.xml index 8fd06af..3531210 100644 --- a/.settings/language.settings.xml +++ b/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + @@ -16,7 +16,7 @@ - + diff --git a/Core/Inc/global_var.h b/Core/Inc/global_var.h index b5da019..4f5fa85 100644 --- a/Core/Inc/global_var.h +++ b/Core/Inc/global_var.h @@ -19,9 +19,9 @@ extern IMU_mng_t IMU_mng_ST; // typedef IMU from ST extern IMU_mng_t IMU_mng_TDK; // typedef IMU from TDK extern sys_time_t SYS_TIME; // typedef TIME from system /* def buffer */ -extern uint8_t U2_Rx_buf[UART_BF_SIZE]; // UART buff - +extern uint8_t U2_Rx_buf[UART_BF_SIZE]; // UART2 RX buff +extern uint8_t U1_TX_buf[UART_BF_SIZE]; // UART1 TX buff /* define var */ extern uint8_t ST_IMU_INT, TDK_IMU_INT; // IMU INT flag - +extern uint8_t U1_DMA_BUSY; #endif /* INC_GLOBAL_VAR_H_ */ diff --git a/Core/Src/global_var.c b/Core/Src/global_var.c index f141d64..c17d994 100644 --- a/Core/Src/global_var.c +++ b/Core/Src/global_var.c @@ -14,9 +14,9 @@ IMU_mng_t IMU_mng_ST={0}; // typedef IMU from ST IMU_mng_t IMU_mng_TDK={0}; // typedef IMU from TDK sys_time_t SYS_TIME = {0}; // typedef TIME from system /* def buffer */ -uint8_t U2_Rx_buf[UART_BF_SIZE]; // UART buff - +uint8_t U2_Rx_buf[UART_BF_SIZE]={0}; // UART buff +uint8_t U1_TX_buf[UART_BF_SIZE]={0}; /* define var */ uint8_t ST_IMU_INT = 0, TDK_IMU_INT = 0; // IMU INT flag - +uint8_t U1_DMA_BUSY = 0; int GPS_week; diff --git a/Core/Src/main.c b/Core/Src/main.c index b8ba5c8..89250a0 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -200,25 +200,27 @@ void SystemClock_Config(void) uint8_t IMUdate_to_uart(UART_HandleTypeDef *huart, IMU_mng_t *imu_msg) { - uint8_t str_buf[256]; - if (imu_msg->lock == 1 && imu_msg->ready == 1) + + if (1 == imu_msg->lock && 1 == imu_msg->ready && 0 == U1_DMA_BUSY) { + memset(U1_TX_buf, 0, UART_BF_SIZE); if (imu_msg->gpstime.time == 0) { - sprintf((char*) str_buf, "$GYOACC,%s,,%.2lf,%.2lf,%.2lf,%.2lf,%.2lf,%.2lf\r\n", imu_msg->name, + sprintf((char*) U1_TX_buf, "$GYOACC,%s,,%.2lf,%.2lf,%.2lf,%.2lf,%.2lf,%.2lf\r\n", imu_msg->name, imu_msg->IMU_acc[0], imu_msg->IMU_acc[1], imu_msg->IMU_acc[2], imu_msg->IMU_gyro[0], imu_msg->IMU_gyro[1], imu_msg->IMU_gyro[2]); } else { - sprintf((char*) str_buf, "$GYOACC,%s,%.4lf,%.4lf,%.4lf,%.4lf,%.4lf,%.4lf,%.4lf\r\n", imu_msg->name, + sprintf((char*) U1_TX_buf, "$GYOACC,%s,%.4lf,%.4lf,%.4lf,%.4lf,%.4lf,%.4lf,%.4lf\r\n", imu_msg->name, imu_msg->gpstime.time + imu_msg->gpstime.sec, imu_msg->IMU_acc[0], imu_msg->IMU_acc[1], imu_msg->IMU_acc[2], imu_msg->IMU_gyro[0], imu_msg->IMU_gyro[1], imu_msg->IMU_gyro[2]); } -// HAL_UART_Transmit_DMA(&huart1, str_buf, strlen((char*) str_buf)); -// HAL_UART_Transmit_IT(&huart1, str_buf, strlen((char*) str_buf)); - HAL_UART_Transmit(&huart1, str_buf, strlen((char*) str_buf), 0x04); + HAL_UART_Transmit_DMA(&huart1, U1_TX_buf, strlen((char*) U1_TX_buf)); + U1_DMA_BUSY = 1; +// HAL_UART_Transmit_IT(&huart1, str_buf, strlen((char*) str_buf)); +// HAL_UART_Transmit(&huart1, str_buf, strlen((char*) str_buf), 0x04); imu_msg->lock = 0; imu_msg->ready = 0; } diff --git a/Core/Src/stm32f1xx_it.c b/Core/Src/stm32f1xx_it.c index f830937..653c574 100644 --- a/Core/Src/stm32f1xx_it.c +++ b/Core/Src/stm32f1xx_it.c @@ -288,7 +288,11 @@ void USART1_IRQHandler(void) /* USER CODE END USART1_IRQn 0 */ HAL_UART_IRQHandler(&huart1); /* USER CODE BEGIN USART1_IRQn 1 */ - + if(__HAL_UART_GET_FLAG(&huart1,UART_FLAG_TC) != RESET) + { + __HAL_UART_CLEAR_FLAG(&huart1,UART_FLAG_TC); + U1_DMA_BUSY = 0; + } /* USER CODE END USART1_IRQn 1 */ } @@ -319,6 +323,7 @@ void USART2_IRQHandler(void) { SYS_TIME.SYS_GPST_TIME = nmea_rmc.sol.gpsttime; SYS_TIME.SYS_UTC_TIME = nmea_rmc.sol.utctime; + SYS_TIME.NMEA_GET = 1; break; } } @@ -351,8 +356,8 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_RESET); printf("ERROR -> TDK IMU RD TIME OUT! \r\n"); printf("Go to loop! please reboot MCU! \r\n"); - while (1) - ; +// while (1) +// ; } HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin); } @@ -373,8 +378,8 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) printf("ERROR -> STM IMU RD TIME OUT! \r\n"); printf("Go to loop! please reboot MCU! \r\n"); - while (1) - ; +// while (1) +// ; } HAL_GPIO_TogglePin(LED0_GPIO_Port, LED0_Pin); } @@ -382,8 +387,12 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { /* Neet to add sec and clean Tim CNT */ __HAL_TIM_SET_COUNTER(&htim3, 0); // clean TIM3 CNT - SYS_TIME.SYS_GPST_TIME.time += 1; - SYS_TIME.SYS_UTC_TIME.time += 1; + if (SYS_TIME.NMEA_GET == 1) + { + SYS_TIME.SYS_GPST_TIME.time += 1; + SYS_TIME.SYS_UTC_TIME.time += 1; + } + } } diff --git a/nmea/rtklib.h b/nmea/rtklib.h index 1ea92e4..1d1c39c 100644 --- a/nmea/rtklib.h +++ b/nmea/rtklib.h @@ -28,9 +28,10 @@ typedef struct } gtime_t; typedef struct -{ /* sys time struct */ +{ /* sys time struct */ gtime_t SYS_UTC_TIME; // typedef TIME from UTC gtime_t SYS_GPST_TIME; // typedef TIME from UTC + uint8_t NMEA_GET; } sys_time_t; typedef struct