From e78a282522ad8d2adadf0147566c6d83a4a31fe6 Mon Sep 17 00:00:00 2001 From: Winston Qu Date: Mon, 19 Dec 2022 17:11:15 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BD=BF=E7=94=A8DMA?= =?UTF-8?q?=E6=A8=A1=E5=BC=8F=E8=BF=9B=E8=A1=8C=E4=BC=A0=E8=BE=93,=20?= =?UTF-8?q?=E4=BC=A0=E8=BE=93=E5=8E=9F=E7=90=86=E6=98=AF=20DMA=E5=AE=8C?= =?UTF-8?q?=E6=88=90=E5=90=8E=E4=BC=9A=E5=87=BA=E5=8F=91UART=20TC=E4=B8=AD?= =?UTF-8?q?=E6=96=AD,=E5=9C=A8=E4=B8=AD=E6=96=AD=E9=87=8C=E5=AF=B9?= =?UTF-8?q?=E6=A0=87=E5=BF=97=E4=BD=8D=E8=BF=9B=E8=A1=8C=E7=BD=AE=E4=BD=8D?= =?UTF-8?q?,=20=E5=85=81=E8=AE=B8=E4=B8=8B=E6=AC=A1=E5=8F=91=E9=80=81,=20?= =?UTF-8?q?=E6=AD=A4=E5=A4=96,=E5=8E=9F=E5=85=88DMA=E4=B8=8D=E6=88=90?= =?UTF-8?q?=E5=8A=9F=E7=9A=84=E5=8E=9F=E5=9B=A0=E6=98=AF=E5=9B=A0=E4=B8=BA?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E4=BA=86=E4=B8=B4=E6=97=B6=E5=8F=98=E9=87=8F?= =?UTF-8?q?=E4=BD=9C=E4=B8=BATx=5Fbuf,=20=E6=AF=8F=E6=AC=A1=E8=BF=9B?= =?UTF-8?q?=E5=85=A5=E6=88=96=E8=80=85=E7=A6=BB=E5=BC=80=E5=87=BD=E6=95=B0?= =?UTF-8?q?=E7=9A=84=E6=97=B6=E5=80=99=E5=8F=98=E9=87=8F=E8=A2=AB=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E6=88=96=E8=80=85=E8=A2=AB=E5=A4=8D=E7=94=A8,?= =?UTF-8?q?=E4=BD=86=E6=98=AFDMA=E8=BF=98=E6=B2=A1=E5=8F=91=E9=80=81?= =?UTF-8?q?=E5=AE=8C=E6=AF=95,=E5=AF=BC=E8=87=B4=E4=B9=B1=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .settings/language.settings.xml | 4 ++-- Core/Inc/global_var.h | 6 +++--- Core/Src/global_var.c | 6 +++--- Core/Src/main.c | 16 +++++++++------- Core/Src/stm32f1xx_it.c | 23 ++++++++++++++++------- nmea/rtklib.h | 3 ++- 6 files changed, 35 insertions(+), 23 deletions(-) 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