yincheng.zhong
3 天以前 26db5e14522173c274ac954c867d2ebe5d8ca3ac
python和STM32数据双向调通,准备下一阶段GPS测试。
已修改16个文件
5602 ■■■■■ 文件已修改
STM32H743/APL/app.c 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
STM32H743/Core/Inc/FreeRTOSConfig.h 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
STM32H743/Core/Inc/stm32h7xx_it.h 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
STM32H743/Core/Src/main.c 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
STM32H743/Core/Src/stm32h7xx_hal_msp.c 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
STM32H743/Core/Src/stm32h7xx_it.c 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
STM32H743/FML/GPS.c 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
STM32H743/FML/GPS.h 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
STM32H743/FML/SBUS.c 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
STM32H743/FML/SBUS.h 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
STM32H743/HAL/Uart.c 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
STM32H743/HAL/Uart.h 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
STM32H743/MDK-ARM/STM32H743.uvoptx 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
STM32H743/MDK-ARM/STM32H743.uvprojx 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
STM32H743/MDK-ARM/STM32H743/STM32H743.map 4947 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
STM32H743/STM32H743.ioc 98 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
STM32H743/APL/app.c
@@ -15,6 +15,7 @@
#include "TCPClient.h"
#include "SBUS.h"
#include "pwm_ctrol.h"
#include "PythonLink.h"
static osSemaphoreId_t g_semaphoreHandle = NULL;
extern uint8_t restart_num;
void IdleTask(void)
@@ -42,10 +43,11 @@
    TCPClient_Init();
    BT_Init();
    SBUS_Init();
    PythonLink_Init();
    while (1)
    {
        //HIDO_UINT32 timeout = HIDO_TimerGetNearestTimeout(1000);
        HIDO_UINT32 timeout = 100;
        HIDO_UINT32 timeout = 5;
        if (xSemaphoreTake(g_semaphoreHandle, timeout / portTICK_PERIOD_MS) == pdTRUE)
        {
@@ -53,6 +55,7 @@
        DBG_Poll();
        BT_Poll();
        SBUS_Poll();
        PythonLink_Poll();
        HIDO_ATLitePoll();
        Internet_Poll();
        GPS_Poll();
STM32H743/Core/Inc/FreeRTOSConfig.h
@@ -68,7 +68,7 @@
#define configTICK_RATE_HZ                       ((TickType_t)1000)
#define configMAX_PRIORITIES                     ( 56 )
#define configMINIMAL_STACK_SIZE                 ((uint16_t)128)
#define configTOTAL_HEAP_SIZE                    ((size_t)15360)
#define configTOTAL_HEAP_SIZE                    ((size_t)32768)  /* å¢žåŠ åˆ°32KB,原15KB可能不够 */
#define configMAX_TASK_NAME_LEN                  ( 16 )
#define configUSE_TRACE_FACILITY                 1
#define configUSE_16_BIT_TICKS                   0
STM32H743/Core/Inc/stm32h7xx_it.h
@@ -67,7 +67,10 @@
void USART3_IRQHandler(void);
void DMA1_Stream7_IRQHandler(void);
void UART4_IRQHandler(void);
void UART5_IRQHandler(void);
void DMA2_Stream0_IRQHandler(void);
void DMA2_Stream1_IRQHandler(void);
void DMA2_Stream2_IRQHandler(void);
void USART6_IRQHandler(void);
void TIM17_IRQHandler(void);
/* USER CODE BEGIN EFP */
STM32H743/Core/Src/main.c
@@ -51,11 +51,14 @@
TIM_HandleTypeDef htim4;
UART_HandleTypeDef huart4;
UART_HandleTypeDef huart5;
UART_HandleTypeDef huart1;
UART_HandleTypeDef huart2;
UART_HandleTypeDef huart3;
UART_HandleTypeDef huart6;
DMA_HandleTypeDef hdma_uart4_rx;
DMA_HandleTypeDef hdma_uart5_rx;
DMA_HandleTypeDef hdma_uart5_tx;
DMA_HandleTypeDef hdma_usart1_rx;
DMA_HandleTypeDef hdma_usart1_tx;
DMA_HandleTypeDef hdma_usart2_rx;
@@ -90,6 +93,7 @@
static void MX_USART6_UART_Init(void);
static void MX_TIM4_Init(void);
static void MX_UART4_Init(void);
static void MX_UART5_Init(void);
void StartDefaultTask(void *argument);
/* USER CODE BEGIN PFP */
@@ -149,12 +153,14 @@
  MX_USART6_UART_Init();
  MX_TIM4_Init();
  MX_UART4_Init();
  MX_UART5_Init();
  /* USER CODE BEGIN 2 */
  UART6_StartReceive();
    Uart_Register(UART_ID_DBG, &huart1);
    Uart_Register(UART_ID_GPS, &huart2);
    Uart_Register(UART_ID_4G, &huart3);
    Uart_Register(UART_ID_SBUS, &huart4);
    Uart_Register(UART_ID_PYTHON, &huart5);
     Uart_Register(UART_ID_BT, &huart6);
     HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);   // MOTOR_TIM
@@ -600,6 +606,54 @@
}
/**
  * @brief UART5 Initialization Function
  * @param None
  * @retval None
  */
static void MX_UART5_Init(void)
{
  /* USER CODE BEGIN UART5_Init 0 */
  /* USER CODE END UART5_Init 0 */
  /* USER CODE BEGIN UART5_Init 1 */
  /* USER CODE END UART5_Init 1 */
  huart5.Instance = UART5;
  huart5.Init.BaudRate = 921600;
  huart5.Init.WordLength = UART_WORDLENGTH_8B;
  huart5.Init.StopBits = UART_STOPBITS_1;
  huart5.Init.Parity = UART_PARITY_NONE;
  huart5.Init.Mode = UART_MODE_TX_RX;
  huart5.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  huart5.Init.OverSampling = UART_OVERSAMPLING_16;
  huart5.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  huart5.Init.ClockPrescaler = UART_PRESCALER_DIV1;
  huart5.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  if (HAL_UART_Init(&huart5) != HAL_OK)
  {
    Error_Handler();
  }
  if (HAL_UARTEx_SetTxFifoThreshold(&huart5, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
  {
    Error_Handler();
  }
  if (HAL_UARTEx_SetRxFifoThreshold(&huart5, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
  {
    Error_Handler();
  }
  if (HAL_UARTEx_DisableFifoMode(&huart5) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN UART5_Init 2 */
  /* USER CODE END UART5_Init 2 */
}
/**
  * @brief USART1 Initialization Function
  * @param None
  * @retval None
@@ -831,6 +885,12 @@
  /* DMA2_Stream0_IRQn interrupt configuration */
  HAL_NVIC_SetPriority(DMA2_Stream0_IRQn, 5, 0);
  HAL_NVIC_EnableIRQ(DMA2_Stream0_IRQn);
  /* DMA2_Stream1_IRQn interrupt configuration */
  HAL_NVIC_SetPriority(DMA2_Stream1_IRQn, 5, 0);
  HAL_NVIC_EnableIRQ(DMA2_Stream1_IRQn);
  /* DMA2_Stream2_IRQn interrupt configuration */
  HAL_NVIC_SetPriority(DMA2_Stream2_IRQn, 5, 0);
  HAL_NVIC_EnableIRQ(DMA2_Stream2_IRQn);
}
STM32H743/Core/Src/stm32h7xx_hal_msp.c
@@ -25,6 +25,10 @@
/* USER CODE END Includes */
extern DMA_HandleTypeDef hdma_uart4_rx;
extern DMA_HandleTypeDef hdma_uart5_rx;
extern DMA_HandleTypeDef hdma_uart5_tx;
extern DMA_HandleTypeDef hdma_usart1_rx;
extern DMA_HandleTypeDef hdma_usart1_tx;
@@ -381,6 +385,80 @@
    /* USER CODE END UART4_MspInit 1 */
  }
  else if(huart->Instance==UART5)
  {
    /* USER CODE BEGIN UART5_MspInit 0 */
    /* USER CODE END UART5_MspInit 0 */
  /** Initializes the peripherals clock
  */
    PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_UART5;
    PeriphClkInitStruct.Usart234578ClockSelection = RCC_USART234578CLKSOURCE_D2PCLK1;
    if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
    {
      Error_Handler();
    }
    /* Peripheral clock enable */
    __HAL_RCC_UART5_CLK_ENABLE();
    __HAL_RCC_GPIOB_CLK_ENABLE();
    /**UART5 GPIO Configuration
    PB12     ------> UART5_RX
    PB13     ------> UART5_TX
    */
    GPIO_InitStruct.Pin = GPIO_PIN_12|GPIO_PIN_13;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    GPIO_InitStruct.Alternate = GPIO_AF14_UART5;
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
    /* UART5 DMA Init */
    /* UART5_RX Init */
    hdma_uart5_rx.Instance = DMA2_Stream1;
    hdma_uart5_rx.Init.Request = DMA_REQUEST_UART5_RX;
    hdma_uart5_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
    hdma_uart5_rx.Init.PeriphInc = DMA_PINC_DISABLE;
    hdma_uart5_rx.Init.MemInc = DMA_MINC_ENABLE;
    hdma_uart5_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
    hdma_uart5_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
    hdma_uart5_rx.Init.Mode = DMA_CIRCULAR;
    hdma_uart5_rx.Init.Priority = DMA_PRIORITY_LOW;
    hdma_uart5_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
    if (HAL_DMA_Init(&hdma_uart5_rx) != HAL_OK)
    {
      Error_Handler();
    }
    __HAL_LINKDMA(huart,hdmarx,hdma_uart5_rx);
    /* UART5_TX Init */
    hdma_uart5_tx.Instance = DMA2_Stream2;
    hdma_uart5_tx.Init.Request = DMA_REQUEST_UART5_TX;
    hdma_uart5_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
    hdma_uart5_tx.Init.PeriphInc = DMA_PINC_DISABLE;
    hdma_uart5_tx.Init.MemInc = DMA_MINC_ENABLE;
    hdma_uart5_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
    hdma_uart5_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
    hdma_uart5_tx.Init.Mode = DMA_NORMAL;
    hdma_uart5_tx.Init.Priority = DMA_PRIORITY_LOW;
    hdma_uart5_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
    if (HAL_DMA_Init(&hdma_uart5_tx) != HAL_OK)
    {
      Error_Handler();
    }
    __HAL_LINKDMA(huart,hdmatx,hdma_uart5_tx);
    /* UART5 interrupt Init */
    HAL_NVIC_SetPriority(UART5_IRQn, 5, 0);
    HAL_NVIC_EnableIRQ(UART5_IRQn);
    /* USER CODE BEGIN UART5_MspInit 1 */
    /* USER CODE END UART5_MspInit 1 */
  }
  else if(huart->Instance==USART1)
  {
    /* USER CODE BEGIN USART1_MspInit 0 */
@@ -711,6 +789,30 @@
    /* USER CODE END UART4_MspDeInit 1 */
  }
  else if(huart->Instance==UART5)
  {
    /* USER CODE BEGIN UART5_MspDeInit 0 */
    /* USER CODE END UART5_MspDeInit 0 */
    /* Peripheral clock disable */
    __HAL_RCC_UART5_CLK_DISABLE();
    /**UART5 GPIO Configuration
    PB12     ------> UART5_RX
    PB13     ------> UART5_TX
    */
    HAL_GPIO_DeInit(GPIOB, GPIO_PIN_12|GPIO_PIN_13);
    /* UART5 DMA DeInit */
    HAL_DMA_DeInit(huart->hdmarx);
    HAL_DMA_DeInit(huart->hdmatx);
    /* UART5 interrupt DeInit */
    HAL_NVIC_DisableIRQ(UART5_IRQn);
    /* USER CODE BEGIN UART5_MspDeInit 1 */
    /* USER CODE END UART5_MspDeInit 1 */
  }
  else if(huart->Instance==USART1)
  {
    /* USER CODE BEGIN USART1_MspDeInit 0 */
STM32H743/Core/Src/stm32h7xx_it.c
@@ -60,6 +60,8 @@
extern TIM_HandleTypeDef htim3;
extern TIM_HandleTypeDef htim4;
extern DMA_HandleTypeDef hdma_uart4_rx;
extern DMA_HandleTypeDef hdma_uart5_rx;
extern DMA_HandleTypeDef hdma_uart5_tx;
extern DMA_HandleTypeDef hdma_usart1_rx;
extern DMA_HandleTypeDef hdma_usart1_tx;
extern DMA_HandleTypeDef hdma_usart2_rx;
@@ -69,6 +71,7 @@
extern DMA_HandleTypeDef hdma_usart6_rx;
extern DMA_HandleTypeDef hdma_usart6_tx;
extern UART_HandleTypeDef huart4;
extern UART_HandleTypeDef huart5;
extern UART_HandleTypeDef huart1;
extern UART_HandleTypeDef huart2;
extern UART_HandleTypeDef huart3;
@@ -388,6 +391,20 @@
}
/**
  * @brief This function handles UART5 global interrupt.
  */
void UART5_IRQHandler(void)
{
  /* USER CODE BEGIN UART5_IRQn 0 */
  /* USER CODE END UART5_IRQn 0 */
  HAL_UART_IRQHandler(&huart5);
  /* USER CODE BEGIN UART5_IRQn 1 */
  /* USER CODE END UART5_IRQn 1 */
}
/**
  * @brief This function handles DMA2 stream0 global interrupt.
  */
void DMA2_Stream0_IRQHandler(void)
@@ -402,6 +419,34 @@
}
/**
  * @brief This function handles DMA2 stream1 global interrupt.
  */
void DMA2_Stream1_IRQHandler(void)
{
  /* USER CODE BEGIN DMA2_Stream1_IRQn 0 */
  /* USER CODE END DMA2_Stream1_IRQn 0 */
  HAL_DMA_IRQHandler(&hdma_uart5_rx);
  /* USER CODE BEGIN DMA2_Stream1_IRQn 1 */
  /* USER CODE END DMA2_Stream1_IRQn 1 */
}
/**
  * @brief This function handles DMA2 stream2 global interrupt.
  */
void DMA2_Stream2_IRQHandler(void)
{
  /* USER CODE BEGIN DMA2_Stream2_IRQn 0 */
  /* USER CODE END DMA2_Stream2_IRQn 0 */
  HAL_DMA_IRQHandler(&hdma_uart5_tx);
  /* USER CODE BEGIN DMA2_Stream2_IRQn 1 */
  /* USER CODE END DMA2_Stream2_IRQn 1 */
}
/**
  * @brief This function handles USART6 global interrupt.
  */
void USART6_IRQHandler(void)
STM32H743/FML/GPS.c
@@ -14,6 +14,7 @@
#include "GPIO.h"
#include "Uart.h"
#include "UDPClient.h"
#include "PythonLink.h"
// #include "global_param.h"
#include "TTS.h"
@@ -222,25 +223,28 @@
    l_stGPRMI.m_dLatitude = atof((HIDO_CHAR *)astFields[3].m_pData);
    l_stGPRMI.m_dLongitude = atof((HIDO_CHAR *)astFields[4].m_pData);
    l_stGPRMI.m_fAltitude = (HIDO_FLOAT)atof((HIDO_CHAR *)astFields[5].m_pData);
    l_stGPRMI.m_fEastStdDev = (HIDO_FLOAT)atof((HIDO_CHAR *)astFields[6].m_pData);
    l_stGPRMI.m_fNorthStdDev = (HIDO_FLOAT)atof((HIDO_CHAR *)astFields[7].m_pData);
    l_stGPRMI.m_fLatStdDev = (HIDO_FLOAT)atof((HIDO_CHAR *)astFields[6].m_pData);
    l_stGPRMI.m_fLonStdDev = (HIDO_FLOAT)atof((HIDO_CHAR *)astFields[7].m_pData);
    l_stGPRMI.m_fAltStdDev = (HIDO_FLOAT)atof((HIDO_CHAR *)astFields[8].m_pData);
    l_stGPRMI.m_fEastVelocity = (HIDO_FLOAT)atof((HIDO_CHAR *)astFields[9].m_pData);
    l_stGPRMI.m_fNorthVelocity = (HIDO_FLOAT)atof((HIDO_CHAR *)astFields[10].m_pData);
    l_stGPRMI.m_fUpVelocity = (HIDO_FLOAT)atof((HIDO_CHAR *)astFields[11].m_pData);
    l_stGPRMI.m_fEastVelStdDev = (HIDO_FLOAT)atof((HIDO_CHAR *)astFields[12].m_pData);
    l_stGPRMI.m_fNorthVelStdDev = (HIDO_FLOAT)atof((HIDO_CHAR *)astFields[13].m_pData);
    l_stGPRMI.m_fUpVelStdDev = (HIDO_FLOAT)atof((HIDO_CHAR *)astFields[14].m_pData);
    l_stGPRMI.m_fHorizontalVelStdDev = (HIDO_FLOAT)atof((HIDO_CHAR *)astFields[12].m_pData);
    l_stGPRMI.m_fHeadingAngle = (HIDO_FLOAT)atof((HIDO_CHAR *)astFields[13].m_pData);
    l_stGPRMI.m_fPitchAngle = (HIDO_FLOAT)atof((HIDO_CHAR *)astFields[14].m_pData);
    l_stGPRMI.m_fRollAngle = (HIDO_FLOAT)atof((HIDO_CHAR *)astFields[15].m_pData);
    l_stGPRMI.m_fPitchAngleStdDev = (HIDO_FLOAT)atof((HIDO_CHAR *)astFields[16].m_pData);
    l_stGPRMI.m_fRollAngleStdDev = (HIDO_FLOAT)atof((HIDO_CHAR *)astFields[17].m_pData);
    l_stGPRMI.m_fHeadingAngleStdDev = (HIDO_FLOAT)atof((HIDO_CHAR *)astFields[18].m_pData);
    l_stGPRMI.m_fHeadingAngleStdDev = (HIDO_FLOAT)atof((HIDO_CHAR *)astFields[16].m_pData);
    l_stGPRMI.m_fPitchAngleStdDev = (HIDO_FLOAT)atof((HIDO_CHAR *)astFields[17].m_pData);
    l_stGPRMI.m_fRollAngleStdDev = (HIDO_FLOAT)atof((HIDO_CHAR *)astFields[18].m_pData);
    l_stGPRMI.m_fBaselineDistance = (HIDO_FLOAT)atof((HIDO_CHAR *)astFields[19].m_pData);
    l_stGPRMI.m_u8SatelliteCount = (HIDO_UINT8)atoi((HIDO_CHAR *)astFields[20].m_pData);
    l_stGPRMI.m_u8ReservedFlags = (HIDO_UINT8)atoi((HIDO_CHAR *)astFields[21].m_pData);
    l_stGPRMI.m_u8FixedAmbiguityCount = (HIDO_UINT8)atoi((HIDO_CHAR *)astFields[21].m_pData);
    l_stGPRMI.m_u8PositionQuality = (HIDO_UINT8)atoi((HIDO_CHAR *)astFields[22].m_pData);
    
    l_stGPRMI.m_bValid = HIDO_TRUE;
    // ç«‹å³å‘送GPS数据到Python (10Hz更新)
    PythonLink_SendGPSData(&l_stGPRMI);
    
    return HIDO_OK;
}
@@ -257,7 +261,7 @@
 *******************************************************************************/
static HIDO_INT32 GPS_ParseGPIMU(HIDO_CHAR *_pcData, HIDO_UINT32 _u32Len)
{
    HIDO_DataStruct astFields[9];
    HIDO_DataStruct astFields[8];  // 8个数据字段
    HIDO_UINT8 u8CalcChecksum = 0;
    HIDO_UINT32 i = 0;
    HIDO_CHAR *pCheckStart = HIDO_NULL;
@@ -266,12 +270,12 @@
    memset(&l_stGPIMU, 0, sizeof(ST_GPIMU));
    l_stGPIMU.m_bValid = HIDO_FALSE;
    
    // è§£æž9个字段: $GPIMU,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>*<CR><LF>
    // è§£æž8个字段: $GPIMU,<时间>,<AccX>,<AccY>,<AccZ>,<GyroX>,<GyroY>,<GyroZ>,<温度>*<校验和>
    // å®žé™…数据示例: $GPIMU,102728.808,-0.010,-0.281,-1.000,0.092,-0.214,-0.031,29.00*5B
    if (HIDO_UtilParseFormat((HIDO_UINT8 *)_pcData, _u32Len,
        "$GPIMU,%p,%p,%p,%p,%p,%p,%p,%p,%p*%**",
        "$GPIMU,%p,%p,%p,%p,%p,%p,%p,%p*%**",
        &astFields[0], &astFields[1], &astFields[2], &astFields[3],
        &astFields[4], &astFields[5], &astFields[6], &astFields[7],
        &astFields[8]) < 10)
        &astFields[4], &astFields[5], &astFields[6], &astFields[7]) < 8)
    {
        return HIDO_ERR;
    }
@@ -291,7 +295,7 @@
        }
    }
    
    // è§£æžå„字段
    // è§£æžå„字段: æ—¶é—´ã€3轴加速度、3轴角速度、温度
    l_stGPIMU.m_u32UTCTime = (HIDO_UINT32)(atof((HIDO_CHAR *)astFields[0].m_pData) * 1000);  // è½¬æ¢ä¸ºæ¯«ç§’
    l_stGPIMU.m_fAccelX = (HIDO_FLOAT)atof((HIDO_CHAR *)astFields[1].m_pData);
    l_stGPIMU.m_fAccelY = (HIDO_FLOAT)atof((HIDO_CHAR *)astFields[2].m_pData);
@@ -301,14 +305,17 @@
    l_stGPIMU.m_fGyroZ = (HIDO_FLOAT)atof((HIDO_CHAR *)astFields[6].m_pData);
    l_stGPIMU.m_fTemperature = (HIDO_FLOAT)atof((HIDO_CHAR *)astFields[7].m_pData);
    
    // ç¬¬9个字段是异或校验,直接解析
    l_stGPIMU.m_u8Checksum = (HIDO_UINT8)atoi((HIDO_CHAR *)astFields[8].m_pData);
    // æ ¡éªŒå’Œå·²ç”±HIDO_UtilParseFormat处理(格式字符串中的*%**)
    l_stGPIMU.m_u8Checksum = 0;  // ä¸éœ€è¦å•独存储
    
    // éªŒè¯æ ¡éªŒå’Œ (根据文档,这是异或校验)
    // æ³¨æ„: æ–‡æ¡£ä¸­æ˜¾ç¤ºæ ¡éªŒå€¼åœ¨æœ€åŽï¼Œéœ€è¦æ ¹æ®å®žé™…协议确定是否验证
    
    l_stGPIMU.m_bValid = HIDO_TRUE;
    
    // ç«‹å³å‘送IMU数据到Python (100Hz更新)
    PythonLink_SendIMUData(&l_stGPIMU);
    return HIDO_OK;
}
u16 g_spsum, g_snum;
STM32H743/FML/GPS.h
@@ -68,25 +68,25 @@
    HIDO_UINT16 m_u16WeekNumber;        // <2> Week number, å‘¨æ•°
    HIDO_UINT32 m_u32TimeOfWeek;        // <3> Time of week, å‘¨å†…ç§’, æ ¼å¼ä¸º(ss.mmm)
    HIDO_DOUBLE m_dLatitude;             // <4> çº¬åº¦(°), æ­£æ•°ä¸ºåŒ—纬
    HIDO_DOUBLE m_dLongitude;            // <5> ç»åº¦(°), æ­£æ•°ä¸ºè¥¿ç»
    HIDO_DOUBLE m_dLongitude;            // <5> ç»åº¦(°), æ­£æ•°ä¸ºä¸œç»
    HIDO_FLOAT m_fAltitude;              // <6> é«˜ç¨‹(m)
    HIDO_FLOAT m_fEastStdDev;            // <7> çº¬åº¦æ ‡å‡†å·®(m)
    HIDO_FLOAT m_fNorthStdDev;           // <8> ç»åº¦æ ‡å‡†å·®(m)
    HIDO_FLOAT m_fLatStdDev;             // <7> çº¬åº¦æ ‡å‡†å·®(m)
    HIDO_FLOAT m_fLonStdDev;             // <8> ç»åº¦æ ‡å‡†å·®(m)
    HIDO_FLOAT m_fAltStdDev;             // <9> é«˜ç¨‹æ ‡å‡†å·®(m)
    HIDO_FLOAT m_fEastVelocity;          // <10> ä¸œæ–¹å‘上的速度(m/s)
    HIDO_FLOAT m_fNorthVelocity;         // <11> åŒ—方向上的速度(m/s)
    HIDO_FLOAT m_fUpVelocity;            // <12> å¤©é¡¶æ–¹å‘的速度(m/s)
    HIDO_FLOAT m_fEastVelStdDev;         // <13> æ°´å¹³é€Ÿåº¦æ ‡å‡†å·®(m/s)
    HIDO_FLOAT m_fNorthVelStdDev;        // <14> ä¿¯ä»°è§’(°)
    HIDO_FLOAT m_fUpVelStdDev;           // <15> ä¾§å€¾è§’(°)
    HIDO_FLOAT m_fRollAngle;             // <16> ç¿»æ»šè§’(°)
    HIDO_FLOAT m_fPitchAngleStdDev;      // <17> ä¿¯ä»°è§’标准差(°)
    HIDO_FLOAT m_fRollAngleStdDev;       // <18> ä¾§å€¾è§’标准差(°)
    HIDO_FLOAT m_fHeadingAngleStdDev;    // <19> ç¿»æ»šè§’标准差(°)
    HIDO_FLOAT m_fHorizontalVelStdDev;   // <13> æ°´å¹³é€Ÿåº¦æ ‡å‡†å·®(m/s)
    HIDO_FLOAT m_fHeadingAngle;          // <14> èˆªå‘è§’(°)
    HIDO_FLOAT m_fPitchAngle;            // <15> ä¿¯ä»°è§’(°)
    HIDO_FLOAT m_fRollAngle;             // <16> æ¨ªæ»šè§’(°)
    HIDO_FLOAT m_fHeadingAngleStdDev;    // <17> èˆªå‘角标准差(°)
    HIDO_FLOAT m_fPitchAngleStdDev;      // <18> ä¿¯ä»°è§’标准差(°)
    HIDO_FLOAT m_fRollAngleStdDev;       // <19> æ¨ªæ»šè§’标准差(°)
    HIDO_FLOAT m_fBaselineDistance;      // <20> åŸºçº¿è·ç¦»(m)
    HIDO_UINT8 m_u8SatelliteCount;       // <21> å¤©çº¿å¯è§å«æ˜Ÿæ•°é‡
    HIDO_UINT8 m_u8ReservedFlags;        // <22> è½½æ³¢æ•´å‘¨å›ºå®šæ¨¡ç³Šå€¼ä¸ªæ•°ï¼Œä»…对固定定整意义
    HIDO_UINT8 m_u8PositionQuality;      // <23> å®šä½è´¨é‡æŒ‡ç¤ºï¼Œ0=无效,1=单点,2=差分,4=固定,5=浮点
    HIDO_UINT8 m_u8FixedAmbiguityCount;  // <22> è½½æ³¢æ•´å‘¨å›ºå®šè§‚测量个数(仅固定解有效)
    HIDO_UINT8 m_u8PositionQuality;      // <23> å®šä½è´¨é‡æŒ‡ç¤º
    HIDO_BOOL m_bValid;                  // æ•°æ®æœ‰æ•ˆæ ‡å¿—
}ST_GPRMI;
STM32H743/FML/SBUS.c
@@ -15,6 +15,7 @@
#include "stm32h7xx_hal_dma.h"
#include <string.h>
#include "pwm_ctrol.h"
#include "PythonLink.h"
/*******************************************************************************
 *                                  Macro                                      *
@@ -48,6 +49,9 @@
static HIDO_UINT32 g_u32DebugLastDmaRemaining = 0;
// SBUS failsafe active flag
static volatile HIDO_UINT8 g_bSBUSFailsafeActive = 0;
// æŽ§åˆ¶æ¨¡å¼çŠ¶æ€ (0=手动遥控器, 1=自动Python)
static volatile HIDO_UINT8 g_u8ControlMode = 0;
/*******************************************************************************
 *                             Local Function                                  *
@@ -106,13 +110,33 @@
    g_stSBUSData.m_u32LastUpdateTick = HAL_GetTick();
    g_stSBUSData.m_u32FrameCount++;
    // 5. æ£€æŸ¥ CH8 (通道7, ç´¢å¼•7) å†³å®šæŽ§åˆ¶æ¨¡å¼
    // CH8 > 1500: è‡ªåŠ¨æ¨¡å¼ (Python控制)
    // CH8 < 1500: æ‰‹åŠ¨æ¨¡å¼ (遥控器控制)
    HIDO_UINT16 ch8_value = g_stSBUSData.m_au16Channels[7];
    if (ch8_value > 1500)
    {
        // è‡ªåŠ¨æ¨¡å¼: ä¸æ›´æ–° PWM, ç”± Python æŽ§åˆ¶
        g_u8ControlMode = 1;
    }
    else
    {
        // æ‰‹åŠ¨æ¨¡å¼: ä½¿ç”¨é¥æŽ§å™¨ä¿¡å·æŽ§åˆ¶
        g_u8ControlMode = 0;
    }
    // è§£æžæˆåŠŸåŽç«‹å³è§¦å‘ PWM æŽ§åˆ¶ï¼ˆæœ€å°å»¶è¿Ÿï¼‰
    // åŒæ—¶æ¸…除 failsafe æ ‡å¿—(如果之前触发过)
    if (g_bSBUSFailsafeActive)
    {
        g_bSBUSFailsafeActive = 0;
    }
    // åªæœ‰åœ¨æ‰‹åŠ¨æ¨¡å¼ä¸‹æ‰æ›´æ–° PWM
    if (g_u8ControlMode == 0)
    {
    SBUS_Control_PWM();
    }
    return HIDO_TRUE;
}
@@ -283,6 +307,28 @@
            g_bSBUSFailsafeActive = 1;
        }
    }
    // è‡ªåŠ¨æ¨¡å¼: åº”用Python下发的控制命令
    if (g_u8ControlMode == 1)
    {
        HIDO_UINT16 steering_pwm = 1500;
        HIDO_UINT16 throttle_pwm = 1500;
        HIDO_UINT32 cmd_timestamp = 0;
        // èŽ·å–Python控制命令
        if (PythonLink_GetControl(&steering_pwm, &throttle_pwm, &cmd_timestamp) == HIDO_TRUE)
        {
            // åº”用控制命令到PWM输出
            Set_Steering_Pulse(steering_pwm);
            Set_Motor_Pulse(throttle_pwm);
        }
        else
        {
            // æ²¡æœ‰æœ‰æ•ˆçš„Python命令时,使用安全的中位值
            Set_Steering_Pulse(1500);
            Set_Motor_Pulse(1500);
        }
    }
}
/**
@@ -430,3 +476,13 @@
    }
    HIDO_Debug2("====================================\r\n\r\n");
}
/**
 * @brief åˆ¤æ–­æ˜¯å¦å¤„于自动模式
 * @return HIDO_TRUE: è‡ªåŠ¨æ¨¡å¼ (CH8 > 1500, Python控制)
 *         HIDO_FALSE: æ‰‹åŠ¨æ¨¡å¼ (CH8 < 1500, é¥æŽ§å™¨æŽ§åˆ¶)
 */
HIDO_BOOL SBUS_IsAutoMode(HIDO_VOID)
{
    return (g_u8ControlMode == 1) ? HIDO_TRUE : HIDO_FALSE;
}
STM32H743/FML/SBUS.h
@@ -113,6 +113,14 @@
// SBUS Debug function (使用 HIDO_Debug2 è¾“出到 UART_ID_DBG)
HIDO_VOID SBUS_PrintDebugInfo(void);
/**
 * @brief æ£€æŸ¥æ˜¯å¦ä¸ºè‡ªåŠ¨æ¨¡å¼ (Python控制)
 *        - CH8 (通道7) > 1500: è‡ªåŠ¨æ¨¡å¼ (Python控制)
 *        - CH8 (通道7) < 1500: æ‰‹åŠ¨æ¨¡å¼ (遥控器控制)
 * @return HIDO_TRUE: è‡ªåŠ¨æ¨¡å¼, HIDO_FALSE: æ‰‹åŠ¨æ¨¡å¼
 */
HIDO_BOOL SBUS_IsAutoMode(HIDO_VOID);
// å£°æ˜Ž HIDO_Debug2 å‡½æ•°
extern HIDO_INT32 HIDO_Debug2(const HIDO_CHAR *_pcFmt, ...);
STM32H743/HAL/Uart.c
@@ -1,8 +1,8 @@
/*******************************************************************************
 * File Name         : Uart.c
 * Description       :
 * Created on        : 2018å¹´4月24日
 * Author            : æœé”®
 * Created on        : 2018��4��24��
 * Author            : ï¿½Å¼ï¿½
 *******************************************************************************/
/*******************************************************************************
@@ -50,6 +50,7 @@
    HIDO_UINT32 m_u32TxBufSize;
    HIDO_UINT32 m_u32TxQueueMemberCnt;
    HIDO_VLQStruct m_stTxVLQueue;
    HIDO_BOOL m_bTxBusy;
    HIDO_UINT32 m_u32RxValue;
    HIDO_UINT32 m_u32Flag;
@@ -122,12 +123,12 @@
 * Input             :
 * Output            :
 * Return            :
 * Author            : æœé”®
 * Modified Date:    : 2018å¹´4月24日
 * Author            : ï¿½Å¼ï¿½
 * Modified Date:    : 2018��4��24��
 *******************************************************************************/
static HIDO_VOID Uart_RXDMAEnable(E_UartID _eUartID)
{
    /* å½“产生溢出错误时,需要将数据读空 */
    /* ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ê±ï¿½ï¿½ï¿½ï¿½Òªï¿½ï¿½ï¿½ï¿½ï¿½Ý¶ï¿½ï¿½ï¿½ */
    while (l_astUartInfo[_eUartID].m_pstUart->Instance->ISR & UART_FLAG_ORE)
    {
        volatile HIDO_UINT16 u16Data = l_astUartInfo[_eUartID].m_pstUart->Instance->RDR;
@@ -140,7 +141,7 @@
    l_astUartInfo[_eUartID].m_pu8RxLastPos = l_astUartInfo[_eUartID].m_pu8RxBuf;
    l_astUartInfo[_eUartID].m_pu8RxBufEnd = l_astUartInfo[_eUartID].m_pu8RxBuf + l_astUartInfo[_eUartID].m_u32RxBufSize - 1;
    /* å¯åЍDMA接收 */
    /* ï¿½ï¿½ï¿½ï¿½DMA���� */
    HAL_UARTEx_ReceiveToIdle_DMA(l_astUartInfo[_eUartID].m_pstUart, l_astUartInfo[_eUartID].m_pu8RxBuf, l_astUartInfo[_eUartID].m_u32RxBufSize);
}
@@ -150,12 +151,12 @@
 * Input             :
 * Output            :
 * Return            :
 * Author            : æœé”®
 * Modified Date:    : 2018å¹´4月24日
 * Author            : ï¿½Å¼ï¿½
 * Modified Date:    : 2018��4��24��
 *******************************************************************************/
static HIDO_VOID Uart_RXINTEnable(E_UartID _eUartID)
{
    /* å½“产生溢出错误时,需要将数据读空 */
    /* ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ê±ï¿½ï¿½ï¿½ï¿½Òªï¿½ï¿½ï¿½ï¿½ï¿½Ý¶ï¿½ï¿½ï¿½ */
    while (l_astUartInfo[_eUartID].m_pstUart->Instance->ISR & UART_FLAG_ORE)
    {
        volatile HIDO_UINT16 u16Data = l_astUartInfo[_eUartID].m_pstUart->Instance->RDR;
@@ -165,7 +166,7 @@
        __HAL_UART_CLEAR_OREFLAG(l_astUartInfo[_eUartID].m_pstUart);
    }
    /* å¯åЍINT接收 */
    /* ï¿½ï¿½ï¿½ï¿½INT���� */
    HAL_UART_Receive_IT(l_astUartInfo[_eUartID].m_pstUart, (HIDO_UINT8 *)&l_astUartInfo[_eUartID].m_u32RxValue, sizeof(HIDO_UINT8));
}
@@ -178,8 +179,8 @@
 * Input             :
 * Output            :
 * Return            :
 * Author            : æœé”®
 * Modified Date:    : 2018å¹´4月24日
 * Author            : ï¿½Å¼ï¿½
 * Modified Date:    : 2018��4��24��
 *******************************************************************************/
HIDO_INT32 Uart_GetHandle(E_UartID _eUartID, HIDO_VOID **_ppUart)
{
@@ -199,8 +200,8 @@
 * Input             :
 * Output            :
 * Return            :
 * Author            : æœé”®
 * Modified Date:    : 2018å¹´4月24日
 * Author            : ï¿½Å¼ï¿½
 * Modified Date:    : 2018��4��24��
 *******************************************************************************/
HIDO_INT32 Uart_Register(E_UartID _eUartID, HIDO_VOID *_pUart)
{
@@ -209,7 +210,7 @@
        return HIDO_ERR;
    }
    /* åˆå§‹åŒ–参数 */
    /* ï¿½ï¿½Ê¼ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ */
    HIDO_UtilBzero(&l_astUartInfo[_eUartID], sizeof(ST_UartInfo));
    l_astUartInfo[_eUartID].m_pstUart = (UART_HandleTypeDef *)_pUart;
@@ -223,8 +224,8 @@
 * Input             :
 * Output            :
 * Return            :
 * Author            : æœé”®
 * Modified Date:    : 2018å¹´4月24日
 * Author            : ï¿½Å¼ï¿½
 * Modified Date:    : 2018��4��24��
 *******************************************************************************/
HIDO_INT32 Uart_Init(E_UartID _eUartID, ST_UartInit *_pstInit)
{
@@ -269,16 +270,17 @@
            _pstInit->m_pu8TxBuf,
            _pstInit->m_u32TxBufSize,
            _pstInit->m_u32TxQueueMemberCnt);
        l_astUartInfo[_eUartID].m_bTxBusy = HIDO_FALSE;
    }
    if (UART_RX_MODE_DMA == _pstInit->m_eRxMode)
    {
        /* å¯åЍDMA接收 */
        /* ï¿½ï¿½ï¿½ï¿½DMA���� */
        Uart_RXDMAEnable(_eUartID);
    }
    else if (UART_RX_MODE_INT == _pstInit->m_eRxMode || UART_RX_MODE_INT_ISR == _pstInit->m_eRxMode)
    {
        /* å¯åЍINT接收 */
        /* ï¿½ï¿½ï¿½ï¿½INT���� */
        Uart_RXINTEnable(_eUartID);
    }
@@ -291,8 +293,8 @@
 * Input             :
 * Output            :
 * Return            :
 * Author            : æœé”®
 * Modified Date:    : 2018å¹´4月24日
 * Author            : ï¿½Å¼ï¿½
 * Modified Date:    : 2018��4��24��
 *******************************************************************************/
HIDO_INT32 Uart_ReInit(E_UartID _eUartID)
{
@@ -317,16 +319,17 @@
            l_astUartInfo[_eUartID].m_pu8TxBuf,
            l_astUartInfo[_eUartID].m_u32TxBufSize,
            l_astUartInfo[_eUartID].m_u32TxQueueMemberCnt);
        l_astUartInfo[_eUartID].m_bTxBusy = HIDO_FALSE;
    }
    if (UART_RX_MODE_DMA == l_astUartInfo[_eUartID].m_eRxMode)
    {
        /* å¯åЍDMA接收 */
        /* ï¿½ï¿½ï¿½ï¿½DMA���� */
        Uart_RXDMAEnable(_eUartID);
    }
    else if (UART_RX_MODE_INT == l_astUartInfo[_eUartID].m_eRxMode || UART_RX_MODE_INT_ISR == l_astUartInfo[_eUartID].m_eRxMode)
    {
        /* å¯åЍINT接收 */
        /* ï¿½ï¿½ï¿½ï¿½INT���� */
        Uart_RXINTEnable(_eUartID);
    }
@@ -339,8 +342,8 @@
 * Input             :
 * Output            :
 * Return            :
 * Author            : æœé”®
 * Modified Date:    : 2018å¹´4月24日
 * Author            : ï¿½Å¼ï¿½
 * Modified Date:    : 2018��4��24��
 *******************************************************************************/
HIDO_INT32 Uart_ReConfigBaudRate(E_UartID _eUartID, HIDO_UINT32 _u32BaudRate)
{
@@ -364,8 +367,8 @@
 * Input             :
 * Output            :
 * Return            :
 * Author            : æœé”®
 * Modified Date:    : 2018å¹´4月24日
 * Author            : ï¿½Å¼ï¿½
 * Modified Date:    : 2018��4��24��
 *******************************************************************************/
HIDO_VOID Uart_RxErrorFromISR(HIDO_VOID *_pUart)
{
@@ -377,12 +380,12 @@
        {
            if (UART_RX_MODE_DMA == l_astUartInfo[eUartID].m_eRxMode)
            {
                /* å¯åЍDMA接收 */
                /* ï¿½ï¿½ï¿½ï¿½DMA���� */
                Uart_RXDMAEnable(eUartID);
            }
            else if (UART_RX_MODE_INT == l_astUartInfo[eUartID].m_eRxMode || UART_RX_MODE_INT_ISR == l_astUartInfo[eUartID].m_eRxMode)
            {
                /* å¯åЍINT接收 */
                /* ï¿½ï¿½ï¿½ï¿½INT���� */
                Uart_RXINTEnable(eUartID);
            }
            break;
@@ -396,8 +399,8 @@
 * Input             :
 * Output            :
 * Return            :
 * Author            : æœé”®
 * Modified Date:    : 2018å¹´4月24日
 * Author            : ï¿½Å¼ï¿½
 * Modified Date:    : 2018��4��24��
 *******************************************************************************/
HIDO_VOID Uart_TxOverFromISR(HIDO_VOID *_pUart)
{
@@ -420,6 +423,10 @@
                    HAL_UART_Transmit_DMA(l_astUartInfo[eUartID].m_pstUart, pstMember->m_pDataAddr,
                                          pstMember->m_u32DataLen);
                }
                else
                {
                    l_astUartInfo[eUartID].m_bTxBusy = HIDO_FALSE;
                }
            }
            else if (UART_TX_MODE_INT == l_astUartInfo[eUartID].m_eTxMode)
            {
@@ -434,6 +441,10 @@
                    HAL_UART_Transmit_IT(l_astUartInfo[eUartID].m_pstUart, pstMember->m_pDataAddr,
                                         pstMember->m_u32DataLen);
                }
                else
                {
                    l_astUartInfo[eUartID].m_bTxBusy = HIDO_FALSE;
                }
            }
            break;
@@ -447,8 +458,8 @@
 * Input             :
 * Output            :
 * Return            :
 * Author            : æœé”®
 * Modified Date:    : 2018å¹´4月24日
 * Author            : ï¿½Å¼ï¿½
 * Modified Date:    : 2018��4��24��
 *******************************************************************************/
HIDO_VOID Uart_RxOverFromISR(HIDO_VOID *_pUart)
{
@@ -464,7 +475,7 @@
                HIDO_ArraryQueueIn(&l_astUartInfo[eUartID].m_stRxArraryQueue, &u8RecvByte);
                /* å¯åЍINT接收 */
                /* ï¿½ï¿½ï¿½ï¿½INT���� */
                Uart_RXINTEnable(eUartID);
            }
            else if (UART_RX_MODE_INT_ISR == l_astUartInfo[eUartID].m_eRxMode)
@@ -474,7 +485,7 @@
                    l_astUartInfo[eUartID].m_fnRxISR(l_astUartInfo[eUartID].m_u32RxValue);
                }
                /* å¯åЍINT接收 */
                /* ï¿½ï¿½ï¿½ï¿½INT���� */
                Uart_RXINTEnable(eUartID);
            }
@@ -489,8 +500,8 @@
 * Input             :
 * Output            :
 * Return            :
 * Author            : æœé”®
 * Modified Date:    : 2018å¹´4月24日
 * Author            : ï¿½Å¼ï¿½
 * Modified Date:    : 2018��4��24��
 *******************************************************************************/
HIDO_INT32 Uart_GetChar(E_UartID _eUartID, HIDO_UINT8 *_pu8Char)
{
@@ -549,8 +560,8 @@
 * Input             :
 * Output            :
 * Return            :
 * Author            : æœé”®
 * Modified Date:    : 2018å¹´4月24日
 * Author            : ï¿½Å¼ï¿½
 * Modified Date:    : 2018��4��24��
 *******************************************************************************/
HIDO_INT32 Uart_Send(E_UartID _eUartID, HIDO_UINT8 *_pu8Data, HIDO_UINT32 _u32Len)
{
@@ -573,6 +584,7 @@
    if (UART_TX_MODE_DMA == l_astUartInfo[_eUartID].m_eTxMode)
    {
        HIDO_VLQMemberStruct *pstMember = HIDO_NULL;
        HIDO_BOOL bStartTx = HIDO_FALSE;
        HIDO_Lock();
        pstMember = HIDO_VLQGetEnqueueMember(&(l_astUartInfo[_eUartID].m_stTxVLQueue), _u32Len);
@@ -586,15 +598,24 @@
        {
            HIDO_VLQEnqueue(&(l_astUartInfo[_eUartID].m_stTxVLQueue), pstMember);
            memcpy(pstMember->m_pDataAddr, _pu8Data, _u32Len);
            if (HIDO_FALSE == l_astUartInfo[_eUartID].m_bTxBusy)
            {
                l_astUartInfo[_eUartID].m_bTxBusy = HIDO_TRUE;
            pstMember = HIDO_VLQGetDequeueMember(&(l_astUartInfo[_eUartID].m_stTxVLQueue));
                bStartTx = HIDO_TRUE;
            }
            HIDO_UnLock();
            if (bStartTx && pstMember)
            {
            HAL_UART_Transmit_DMA(l_astUartInfo[_eUartID].m_pstUart, pstMember->m_pDataAddr, pstMember->m_u32DataLen);
            }
        }
    }
    else if (UART_TX_MODE_INT == l_astUartInfo[_eUartID].m_eTxMode)
    {
        HIDO_VLQMemberStruct *pstMember = HIDO_NULL;
        HIDO_BOOL bStartTx = HIDO_FALSE;
        HIDO_Lock();
        pstMember = HIDO_VLQGetEnqueueMember(&(l_astUartInfo[_eUartID].m_stTxVLQueue), _u32Len);
@@ -608,12 +629,20 @@
        {
            HIDO_VLQEnqueue(&(l_astUartInfo[_eUartID].m_stTxVLQueue), pstMember);
            memcpy(pstMember->m_pDataAddr, _pu8Data, _u32Len);
            if (HIDO_FALSE == l_astUartInfo[_eUartID].m_bTxBusy)
            {
                l_astUartInfo[_eUartID].m_bTxBusy = HIDO_TRUE;
            pstMember = HIDO_VLQGetDequeueMember(&(l_astUartInfo[_eUartID].m_stTxVLQueue));
                bStartTx = HIDO_TRUE;
            }
            HIDO_UnLock();
            if (bStartTx && pstMember)
            {
            HAL_UART_Transmit_IT(l_astUartInfo[_eUartID].m_pstUart, pstMember->m_pDataAddr, pstMember->m_u32DataLen);
        }
    }
    }
    else if (UART_TX_MODE_POLL == l_astUartInfo[_eUartID].m_eTxMode)
    {
        HAL_UART_Transmit(l_astUartInfo[_eUartID].m_pstUart, _pu8Data, _u32Len, _u32Len * 100);
STM32H743/HAL/Uart.h
@@ -42,6 +42,7 @@
    UART_ID_GPS,
    UART_ID_BT,
    UART_ID_SBUS,
    UART_ID_PYTHON,
    UART_ID_LAST,
}E_UartID;
STM32H743/MDK-ARM/STM32H743.uvoptx
@@ -164,7 +164,7 @@
          <Type>0</Type>
          <LineNumber>150</LineNumber>
          <EnabledFlag>1</EnabledFlag>
          <Address>134543186</Address>
          <Address>134545698</Address>
          <ByteObject>0</ByteObject>
          <HtxType>0</HtxType>
          <ManyObjects>0</ManyObjects>
@@ -174,6 +174,22 @@
          <Filename>..\FML\pwm_ctrol.c</Filename>
          <ExecCommand></ExecCommand>
          <Expression>\\STM32H743\../FML/pwm_ctrol.c\150</Expression>
        </Bp>
        <Bp>
          <Number>1</Number>
          <Type>0</Type>
          <LineNumber>285</LineNumber>
          <EnabledFlag>1</EnabledFlag>
          <Address>134546798</Address>
          <ByteObject>0</ByteObject>
          <HtxType>0</HtxType>
          <ManyObjects>0</ManyObjects>
          <SizeOfObject>0</SizeOfObject>
          <BreakByAccess>0</BreakByAccess>
          <BreakIfRCount>1</BreakIfRCount>
          <Filename>..\FML\SBUS.c</Filename>
          <ExecCommand></ExecCommand>
          <Expression>\\STM32H743\../FML/SBUS.c\285</Expression>
        </Bp>
      </Breakpoint>
      <WatchWindow1>
@@ -660,6 +676,18 @@
      <RteFlg>0</RteFlg>
      <bShared>0</bShared>
    </File>
    <File>
      <GroupNumber>4</GroupNumber>
      <FileNumber>27</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
      <bDave2>0</bDave2>
      <PathWithFileName>..\FML\PythonLink.c</PathWithFileName>
      <FilenameWithoutPath>PythonLink.c</FilenameWithoutPath>
      <RteFlg>0</RteFlg>
      <bShared>0</bShared>
    </File>
  </Group>
  <Group>
@@ -670,7 +698,7 @@
    <RteFlg>0</RteFlg>
    <File>
      <GroupNumber>5</GroupNumber>
      <FileNumber>27</FileNumber>
      <FileNumber>28</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -682,7 +710,7 @@
    </File>
    <File>
      <GroupNumber>5</GroupNumber>
      <FileNumber>28</FileNumber>
      <FileNumber>29</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -702,7 +730,7 @@
    <RteFlg>0</RteFlg>
    <File>
      <GroupNumber>6</GroupNumber>
      <FileNumber>29</FileNumber>
      <FileNumber>30</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -714,7 +742,7 @@
    </File>
    <File>
      <GroupNumber>6</GroupNumber>
      <FileNumber>30</FileNumber>
      <FileNumber>31</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -726,7 +754,7 @@
    </File>
    <File>
      <GroupNumber>6</GroupNumber>
      <FileNumber>31</FileNumber>
      <FileNumber>32</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -738,7 +766,7 @@
    </File>
    <File>
      <GroupNumber>6</GroupNumber>
      <FileNumber>32</FileNumber>
      <FileNumber>33</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -750,7 +778,7 @@
    </File>
    <File>
      <GroupNumber>6</GroupNumber>
      <FileNumber>33</FileNumber>
      <FileNumber>34</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -762,7 +790,7 @@
    </File>
    <File>
      <GroupNumber>6</GroupNumber>
      <FileNumber>34</FileNumber>
      <FileNumber>35</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -774,7 +802,7 @@
    </File>
    <File>
      <GroupNumber>6</GroupNumber>
      <FileNumber>35</FileNumber>
      <FileNumber>36</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -786,7 +814,7 @@
    </File>
    <File>
      <GroupNumber>6</GroupNumber>
      <FileNumber>36</FileNumber>
      <FileNumber>37</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -798,7 +826,7 @@
    </File>
    <File>
      <GroupNumber>6</GroupNumber>
      <FileNumber>37</FileNumber>
      <FileNumber>38</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -810,7 +838,7 @@
    </File>
    <File>
      <GroupNumber>6</GroupNumber>
      <FileNumber>38</FileNumber>
      <FileNumber>39</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -822,7 +850,7 @@
    </File>
    <File>
      <GroupNumber>6</GroupNumber>
      <FileNumber>39</FileNumber>
      <FileNumber>40</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -834,7 +862,7 @@
    </File>
    <File>
      <GroupNumber>6</GroupNumber>
      <FileNumber>40</FileNumber>
      <FileNumber>41</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -846,7 +874,7 @@
    </File>
    <File>
      <GroupNumber>6</GroupNumber>
      <FileNumber>41</FileNumber>
      <FileNumber>42</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -858,7 +886,7 @@
    </File>
    <File>
      <GroupNumber>6</GroupNumber>
      <FileNumber>42</FileNumber>
      <FileNumber>43</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -870,7 +898,7 @@
    </File>
    <File>
      <GroupNumber>6</GroupNumber>
      <FileNumber>43</FileNumber>
      <FileNumber>44</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -882,7 +910,7 @@
    </File>
    <File>
      <GroupNumber>6</GroupNumber>
      <FileNumber>44</FileNumber>
      <FileNumber>45</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -894,7 +922,7 @@
    </File>
    <File>
      <GroupNumber>6</GroupNumber>
      <FileNumber>45</FileNumber>
      <FileNumber>46</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -906,7 +934,7 @@
    </File>
    <File>
      <GroupNumber>6</GroupNumber>
      <FileNumber>46</FileNumber>
      <FileNumber>47</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -918,7 +946,7 @@
    </File>
    <File>
      <GroupNumber>6</GroupNumber>
      <FileNumber>47</FileNumber>
      <FileNumber>48</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -930,7 +958,7 @@
    </File>
    <File>
      <GroupNumber>6</GroupNumber>
      <FileNumber>48</FileNumber>
      <FileNumber>49</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -950,7 +978,7 @@
    <RteFlg>0</RteFlg>
    <File>
      <GroupNumber>7</GroupNumber>
      <FileNumber>49</FileNumber>
      <FileNumber>50</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -970,7 +998,7 @@
    <RteFlg>0</RteFlg>
    <File>
      <GroupNumber>8</GroupNumber>
      <FileNumber>50</FileNumber>
      <FileNumber>51</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -982,7 +1010,7 @@
    </File>
    <File>
      <GroupNumber>8</GroupNumber>
      <FileNumber>51</FileNumber>
      <FileNumber>52</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -994,7 +1022,7 @@
    </File>
    <File>
      <GroupNumber>8</GroupNumber>
      <FileNumber>52</FileNumber>
      <FileNumber>53</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -1006,7 +1034,7 @@
    </File>
    <File>
      <GroupNumber>8</GroupNumber>
      <FileNumber>53</FileNumber>
      <FileNumber>54</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -1018,7 +1046,7 @@
    </File>
    <File>
      <GroupNumber>8</GroupNumber>
      <FileNumber>54</FileNumber>
      <FileNumber>55</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -1030,7 +1058,7 @@
    </File>
    <File>
      <GroupNumber>8</GroupNumber>
      <FileNumber>55</FileNumber>
      <FileNumber>56</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -1042,7 +1070,7 @@
    </File>
    <File>
      <GroupNumber>8</GroupNumber>
      <FileNumber>56</FileNumber>
      <FileNumber>57</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -1054,7 +1082,7 @@
    </File>
    <File>
      <GroupNumber>8</GroupNumber>
      <FileNumber>57</FileNumber>
      <FileNumber>58</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -1066,7 +1094,7 @@
    </File>
    <File>
      <GroupNumber>8</GroupNumber>
      <FileNumber>58</FileNumber>
      <FileNumber>59</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -1078,7 +1106,7 @@
    </File>
    <File>
      <GroupNumber>8</GroupNumber>
      <FileNumber>59</FileNumber>
      <FileNumber>60</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -1098,7 +1126,7 @@
    <RteFlg>0</RteFlg>
    <File>
      <GroupNumber>9</GroupNumber>
      <FileNumber>60</FileNumber>
      <FileNumber>61</FileNumber>
      <FileType>4</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
STM32H743/MDK-ARM/STM32H743.uvprojx
@@ -528,6 +528,11 @@
              <FileType>1</FileType>
              <FilePath>..\FML\SBUS.c</FilePath>
            </File>
            <File>
              <FileName>PythonLink.c</FileName>
              <FileType>1</FileType>
              <FilePath>..\FML\PythonLink.c</FilePath>
            </File>
          </Files>
        </Group>
        <Group>
STM32H743/MDK-ARM/STM32H743/STM32H743.map
ÎļþÌ«´ó
STM32H743/STM32H743.ioc
@@ -6,6 +6,7 @@
CORTEX_M7.default_mode_Activation=1
Dma.Request0=USART1_RX
Dma.Request1=USART1_TX
Dma.Request10=UART5_TX
Dma.Request2=USART2_RX
Dma.Request3=USART2_TX
Dma.Request4=USART3_RX
@@ -13,7 +14,8 @@
Dma.Request6=USART6_RX
Dma.Request7=USART6_TX
Dma.Request8=UART4_RX
Dma.RequestsNb=9
Dma.Request9=UART5_RX
Dma.RequestsNb=11
Dma.UART4_RX.8.Direction=DMA_PERIPH_TO_MEMORY
Dma.UART4_RX.8.EventEnable=DISABLE
Dma.UART4_RX.8.FIFOMode=DMA_FIFOMODE_DISABLE
@@ -32,6 +34,42 @@
Dma.UART4_RX.8.SyncPolarity=HAL_DMAMUX_SYNC_NO_EVENT
Dma.UART4_RX.8.SyncRequestNumber=1
Dma.UART4_RX.8.SyncSignalID=NONE
Dma.UART5_RX.9.Direction=DMA_PERIPH_TO_MEMORY
Dma.UART5_RX.9.EventEnable=DISABLE
Dma.UART5_RX.9.FIFOMode=DMA_FIFOMODE_DISABLE
Dma.UART5_RX.9.Instance=DMA2_Stream1
Dma.UART5_RX.9.MemDataAlignment=DMA_MDATAALIGN_BYTE
Dma.UART5_RX.9.MemInc=DMA_MINC_ENABLE
Dma.UART5_RX.9.Mode=DMA_CIRCULAR
Dma.UART5_RX.9.PeriphDataAlignment=DMA_PDATAALIGN_BYTE
Dma.UART5_RX.9.PeriphInc=DMA_PINC_DISABLE
Dma.UART5_RX.9.Polarity=HAL_DMAMUX_REQ_GEN_RISING
Dma.UART5_RX.9.Priority=DMA_PRIORITY_LOW
Dma.UART5_RX.9.RequestNumber=1
Dma.UART5_RX.9.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode,SignalID,Polarity,RequestNumber,SyncSignalID,SyncPolarity,SyncEnable,EventEnable,SyncRequestNumber
Dma.UART5_RX.9.SignalID=NONE
Dma.UART5_RX.9.SyncEnable=DISABLE
Dma.UART5_RX.9.SyncPolarity=HAL_DMAMUX_SYNC_NO_EVENT
Dma.UART5_RX.9.SyncRequestNumber=1
Dma.UART5_RX.9.SyncSignalID=NONE
Dma.UART5_TX.10.Direction=DMA_MEMORY_TO_PERIPH
Dma.UART5_TX.10.EventEnable=DISABLE
Dma.UART5_TX.10.FIFOMode=DMA_FIFOMODE_DISABLE
Dma.UART5_TX.10.Instance=DMA2_Stream2
Dma.UART5_TX.10.MemDataAlignment=DMA_MDATAALIGN_BYTE
Dma.UART5_TX.10.MemInc=DMA_MINC_ENABLE
Dma.UART5_TX.10.Mode=DMA_NORMAL
Dma.UART5_TX.10.PeriphDataAlignment=DMA_PDATAALIGN_BYTE
Dma.UART5_TX.10.PeriphInc=DMA_PINC_DISABLE
Dma.UART5_TX.10.Polarity=HAL_DMAMUX_REQ_GEN_RISING
Dma.UART5_TX.10.Priority=DMA_PRIORITY_LOW
Dma.UART5_TX.10.RequestNumber=1
Dma.UART5_TX.10.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode,SignalID,Polarity,RequestNumber,SyncSignalID,SyncPolarity,SyncEnable,EventEnable,SyncRequestNumber
Dma.UART5_TX.10.SignalID=NONE
Dma.UART5_TX.10.SyncEnable=DISABLE
Dma.UART5_TX.10.SyncPolarity=HAL_DMAMUX_SYNC_NO_EVENT
Dma.UART5_TX.10.SyncRequestNumber=1
Dma.UART5_TX.10.SyncSignalID=NONE
Dma.USART1_RX.0.Direction=DMA_PERIPH_TO_MEMORY
Dma.USART1_RX.0.EventEnable=DISABLE
Dma.USART1_RX.0.FIFOMode=DMA_FIFOMODE_DISABLE
@@ -190,10 +228,11 @@
Mcu.IP10=TIM3
Mcu.IP11=TIM4
Mcu.IP12=UART4
Mcu.IP13=USART1
Mcu.IP14=USART2
Mcu.IP15=USART3
Mcu.IP16=USART6
Mcu.IP13=UART5
Mcu.IP14=USART1
Mcu.IP15=USART2
Mcu.IP16=USART3
Mcu.IP17=USART6
Mcu.IP2=DMA
Mcu.IP3=FREERTOS
Mcu.IP4=MEMORYMAP
@@ -202,7 +241,7 @@
Mcu.IP7=SYS
Mcu.IP8=TIM1
Mcu.IP9=TIM2
Mcu.IPNb=17
Mcu.IPNb=18
Mcu.Name=STM32H743VITx
Mcu.Package=LQFP100
Mcu.Pin0=PC13
@@ -215,31 +254,33 @@
Mcu.Pin15=PE14
Mcu.Pin16=PB10
Mcu.Pin17=PB11
Mcu.Pin18=PD12
Mcu.Pin19=PC6
Mcu.Pin18=PB12
Mcu.Pin19=PB13
Mcu.Pin2=PH1-OSC_OUT (PH1)
Mcu.Pin20=PC7
Mcu.Pin21=PA9
Mcu.Pin22=PA10
Mcu.Pin23=PA11
Mcu.Pin24=PA12
Mcu.Pin25=PA13 (JTMS/SWDIO)
Mcu.Pin26=PA14 (JTCK/SWCLK)
Mcu.Pin27=VP_FREERTOS_VS_CMSIS_V2
Mcu.Pin28=VP_SYS_VS_tim17
Mcu.Pin29=VP_TIM1_VS_ClockSourceINT
Mcu.Pin20=PD12
Mcu.Pin21=PC6
Mcu.Pin22=PC7
Mcu.Pin23=PA9
Mcu.Pin24=PA10
Mcu.Pin25=PA11
Mcu.Pin26=PA12
Mcu.Pin27=PA13 (JTMS/SWDIO)
Mcu.Pin28=PA14 (JTCK/SWCLK)
Mcu.Pin29=VP_FREERTOS_VS_CMSIS_V2
Mcu.Pin3=PC0
Mcu.Pin30=VP_TIM2_VS_ClockSourceINT
Mcu.Pin31=VP_TIM3_VS_ClockSourceINT
Mcu.Pin32=VP_TIM4_VS_ClockSourceINT
Mcu.Pin33=VP_MEMORYMAP_VS_MEMORYMAP
Mcu.Pin30=VP_SYS_VS_tim17
Mcu.Pin31=VP_TIM1_VS_ClockSourceINT
Mcu.Pin32=VP_TIM2_VS_ClockSourceINT
Mcu.Pin33=VP_TIM3_VS_ClockSourceINT
Mcu.Pin34=VP_TIM4_VS_ClockSourceINT
Mcu.Pin35=VP_MEMORYMAP_VS_MEMORYMAP
Mcu.Pin4=PC1
Mcu.Pin5=PC2_C
Mcu.Pin6=PA0
Mcu.Pin7=PA1
Mcu.Pin8=PA2
Mcu.Pin9=PA3
Mcu.PinsNb=34
Mcu.PinsNb=36
Mcu.ThirdPartyNb=0
Mcu.UserConstants=
Mcu.UserName=STM32H743VITx
@@ -255,6 +296,8 @@
NVIC.DMA1_Stream6_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true
NVIC.DMA1_Stream7_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true
NVIC.DMA2_Stream0_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true
NVIC.DMA2_Stream1_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true
NVIC.DMA2_Stream2_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true
NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false
NVIC.ForceEnableDMAVector=true
NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false
@@ -274,6 +317,7 @@
NVIC.TimeBase=TIM17_IRQn
NVIC.TimeBaseIP=TIM17
NVIC.UART4_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true
NVIC.UART5_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true
NVIC.USART1_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true
NVIC.USART2_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true
NVIC.USART3_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true
@@ -305,6 +349,10 @@
PB10.Signal=USART3_TX
PB11.Mode=Asynchronous
PB11.Signal=USART3_RX
PB12.Mode=Asynchronous
PB12.Signal=UART5_RX
PB13.Mode=Asynchronous
PB13.Signal=UART5_TX
PC0.GPIOParameters=PinState,GPIO_Label
PC0.GPIO_Label=RED
PC0.Locked=true
@@ -373,7 +421,7 @@
ProjectManager.UAScriptAfterPath=
ProjectManager.UAScriptBeforePath=
ProjectManager.UnderRoot=false
ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_USART1_UART_Init-USART1-false-HAL-true,5-MX_USART2_UART_Init-USART2-false-HAL-true,6-MX_USART3_UART_Init-USART3-false-HAL-true,7-MX_TIM1_Init-TIM1-false-HAL-true,8-MX_TIM2_Init-TIM2-false-HAL-true,9-MX_TIM3_Init-TIM3-false-HAL-true,10-MX_USART6_UART_Init-USART6-false-HAL-true,11-MX_TIM4_Init-TIM4-false-HAL-true,12-MX_UART4_Init-UART4-false-HAL-true,0-MX_CORTEX_M7_Init-CORTEX_M7-false-HAL-true
ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_USART1_UART_Init-USART1-false-HAL-true,5-MX_USART2_UART_Init-USART2-false-HAL-true,6-MX_USART3_UART_Init-USART3-false-HAL-true,7-MX_TIM1_Init-TIM1-false-HAL-true,8-MX_TIM2_Init-TIM2-false-HAL-true,9-MX_TIM3_Init-TIM3-false-HAL-true,10-MX_USART6_UART_Init-USART6-false-HAL-true,11-MX_TIM4_Init-TIM4-false-HAL-true,12-MX_UART4_Init-UART4-false-HAL-true,13-MX_UART5_Init-UART5-false-HAL-true,0-MX_CORTEX_M7_Init-CORTEX_M7-false-HAL-true
RCC.ADCFreq_Value=129000000
RCC.AHB12Freq_Value=240000000
RCC.AHB4Freq_Value=240000000
@@ -518,6 +566,8 @@
UART4.RxPinLevelInvertParam=UART_ADVFEATURE_RXINV_ENABLE
UART4.StopBits=UART_STOPBITS_2
UART4.WordLength=WORDLENGTH_9B
UART5.BaudRate=921600
UART5.IPParameters=BaudRate
USART1.BaudRate=921600
USART1.IPParameters=VirtualMode-Asynchronous,BaudRate
USART1.VirtualMode-Asynchronous=VM_ASYNC