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