diff --git a/Core/Inc/FreeRTOSConfig.h b/Core/Inc/FreeRTOSConfig.h index c081c8b..6c40c25 100644 --- a/Core/Inc/FreeRTOSConfig.h +++ b/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)0x10000) #define configMAX_TASK_NAME_LEN ( 16 ) #define configUSE_TRACE_FACILITY 1 #define configUSE_16_BIT_TICKS 0 diff --git a/Core/Inc/main.h b/Core/Inc/main.h index 14e6ef5..c0becd0 100644 --- a/Core/Inc/main.h +++ b/Core/Inc/main.h @@ -69,6 +69,8 @@ void Error_Handler(void); #define GYRO_CS_GPIO_Port GPIOC #define DCMI_PWDN_Pin GPIO_PIN_5 #define DCMI_PWDN_GPIO_Port GPIOC +#define IMU_HEAT_Pin GPIO_PIN_1 +#define IMU_HEAT_GPIO_Port GPIOB #define ACCL_INT_Pin GPIO_PIN_10 #define ACCL_INT_GPIO_Port GPIOE #define ACCL_INT_EXTI_IRQn EXTI15_10_IRQn @@ -83,6 +85,8 @@ void Error_Handler(void); #define LCD_RES_GPIO_Port GPIOB #define DCMI_REST_Pin GPIO_PIN_12 #define DCMI_REST_GPIO_Port GPIOB +#define BUZZER_Pin GPIO_PIN_15 +#define BUZZER_GPIO_Port GPIOB #define LCD_DC_Pin GPIO_PIN_10 #define LCD_DC_GPIO_Port GPIOD diff --git a/Core/Inc/spi.h b/Core/Inc/spi.h index b45c5e5..f250bc8 100644 --- a/Core/Inc/spi.h +++ b/Core/Inc/spi.h @@ -36,15 +36,12 @@ extern SPI_HandleTypeDef hspi1; extern SPI_HandleTypeDef hspi2; -extern SPI_HandleTypeDef hspi6; - /* USER CODE BEGIN Private defines */ /* USER CODE END Private defines */ void MX_SPI1_Init(void); void MX_SPI2_Init(void); -void MX_SPI6_Init(void); /* USER CODE BEGIN Prototypes */ diff --git a/Core/Inc/stm32h7xx_it.h b/Core/Inc/stm32h7xx_it.h index 5f13fd7..8616f22 100644 --- a/Core/Inc/stm32h7xx_it.h +++ b/Core/Inc/stm32h7xx_it.h @@ -55,6 +55,7 @@ void DebugMon_Handler(void); void DMA1_Stream0_IRQHandler(void); void DMA1_Stream1_IRQHandler(void); void DMA1_Stream2_IRQHandler(void); +void DMA1_Stream3_IRQHandler(void); void FDCAN1_IT0_IRQHandler(void); void FDCAN2_IT0_IRQHandler(void); void FDCAN1_IT1_IRQHandler(void); @@ -64,6 +65,7 @@ void USART1_IRQHandler(void); void USART2_IRQHandler(void); void USART3_IRQHandler(void); void EXTI15_10_IRQHandler(void); +void UART5_IRQHandler(void); void UART7_IRQHandler(void); void USART10_IRQHandler(void); void FDCAN3_IT0_IRQHandler(void); diff --git a/Core/Inc/usart.h b/Core/Inc/usart.h index 12583e3..e706206 100644 --- a/Core/Inc/usart.h +++ b/Core/Inc/usart.h @@ -32,6 +32,8 @@ extern "C" { /* USER CODE END Includes */ +extern UART_HandleTypeDef huart5; + extern UART_HandleTypeDef huart7; extern UART_HandleTypeDef huart1; @@ -46,6 +48,7 @@ extern UART_HandleTypeDef huart10; /* USER CODE END Private defines */ +void MX_UART5_Init(void); void MX_UART7_Init(void); void MX_USART1_UART_Init(void); void MX_USART2_UART_Init(void); diff --git a/Core/Src/dma.c b/Core/Src/dma.c index 2928315..f793c82 100644 --- a/Core/Src/dma.c +++ b/Core/Src/dma.c @@ -52,6 +52,9 @@ void MX_DMA_Init(void) /* DMA1_Stream2_IRQn interrupt configuration */ HAL_NVIC_SetPriority(DMA1_Stream2_IRQn, 5, 0); HAL_NVIC_EnableIRQ(DMA1_Stream2_IRQn); + /* DMA1_Stream3_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(DMA1_Stream3_IRQn, 5, 0); + HAL_NVIC_EnableIRQ(DMA1_Stream3_IRQn); } diff --git a/Core/Src/fdcan.c b/Core/Src/fdcan.c index 72e2780..80df4c7 100644 --- a/Core/Src/fdcan.c +++ b/Core/Src/fdcan.c @@ -47,7 +47,7 @@ void MX_FDCAN1_Init(void) hfdcan1.Init.ProtocolException = DISABLE; hfdcan1.Init.NominalPrescaler = 24; hfdcan1.Init.NominalSyncJumpWidth = 1; - hfdcan1.Init.NominalTimeSeg1 = 2; + hfdcan1.Init.NominalTimeSeg1 = 3; hfdcan1.Init.NominalTimeSeg2 = 1; hfdcan1.Init.DataPrescaler = 1; hfdcan1.Init.DataSyncJumpWidth = 1; @@ -95,7 +95,7 @@ void MX_FDCAN2_Init(void) hfdcan2.Init.ProtocolException = DISABLE; hfdcan2.Init.NominalPrescaler = 24; hfdcan2.Init.NominalSyncJumpWidth = 1; - hfdcan2.Init.NominalTimeSeg1 = 1; + hfdcan2.Init.NominalTimeSeg1 = 3; hfdcan2.Init.NominalTimeSeg2 = 1; hfdcan2.Init.DataPrescaler = 1; hfdcan2.Init.DataSyncJumpWidth = 1; @@ -143,7 +143,7 @@ void MX_FDCAN3_Init(void) hfdcan3.Init.ProtocolException = DISABLE; hfdcan3.Init.NominalPrescaler = 24; hfdcan3.Init.NominalSyncJumpWidth = 1; - hfdcan3.Init.NominalTimeSeg1 = 1; + hfdcan3.Init.NominalTimeSeg1 = 3; hfdcan3.Init.NominalTimeSeg2 = 1; hfdcan3.Init.DataPrescaler = 1; hfdcan3.Init.DataSyncJumpWidth = 1; diff --git a/Core/Src/freertos.c b/Core/Src/freertos.c index 8d21e2e..1f17afb 100644 --- a/Core/Src/freertos.c +++ b/Core/Src/freertos.c @@ -1,127 +1,127 @@ -/* USER CODE BEGIN Header */ -/** - ****************************************************************************** - * File Name : freertos.c - * Description : Code for freertos applications - ****************************************************************************** - * @attention - * - * Copyright (c) 2026 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ -/* USER CODE END Header */ - -/* Includes ------------------------------------------------------------------*/ -#include "FreeRTOS.h" -#include "task.h" -#include "main.h" -#include "cmsis_os.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ - -#include "task/user_task.h" -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ - -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ - -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ - -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ -/* USER CODE BEGIN Variables */ - -/* USER CODE END Variables */ -/* Definitions for defaultTask */ -osThreadId_t defaultTaskHandle; -const osThreadAttr_t defaultTask_attributes = { - .name = "defaultTask", - .stack_size = 128 * 4, - .priority = (osPriority_t) osPriorityNormal, -}; - -/* Private function prototypes -----------------------------------------------*/ -/* USER CODE BEGIN FunctionPrototypes */ - -/* USER CODE END FunctionPrototypes */ - -void StartDefaultTask(void *argument); - -void MX_FREERTOS_Init(void); /* (MISRA C 2004 rule 8.1) */ - -/** - * @brief FreeRTOS initialization - * @param None - * @retval None - */ -void MX_FREERTOS_Init(void) { - /* USER CODE BEGIN Init */ - - /* USER CODE END Init */ - - /* USER CODE BEGIN RTOS_MUTEX */ - /* add mutexes, ... */ - /* USER CODE END RTOS_MUTEX */ - - /* USER CODE BEGIN RTOS_SEMAPHORES */ - /* add semaphores, ... */ - /* USER CODE END RTOS_SEMAPHORES */ - - /* USER CODE BEGIN RTOS_TIMERS */ - /* start timers, add new ones, ... */ - /* USER CODE END RTOS_TIMERS */ - - /* USER CODE BEGIN RTOS_QUEUES */ - /* add queues, ... */ - /* USER CODE END RTOS_QUEUES */ - - /* Create the thread(s) */ - /* creation of defaultTask */ - defaultTaskHandle = osThreadNew(StartDefaultTask, NULL, &defaultTask_attributes); - - /* USER CODE BEGIN RTOS_THREADS */ - /* add threads, ... */ - osThreadNew(Task_Init, NULL, &attr_init); // 创建初始化任务 -/* USER CODE END RTOS_THREADS */ - - /* USER CODE BEGIN RTOS_EVENTS */ - /* add events, ... */ - /* USER CODE END RTOS_EVENTS */ - -} - -/* USER CODE BEGIN Header_StartDefaultTask */ -/** - * @brief Function implementing the defaultTask thread. - * @param argument: Not used - * @retval None - */ -/* USER CODE END Header_StartDefaultTask */ -void StartDefaultTask(void *argument) -{ - /* USER CODE BEGIN StartDefaultTask */ - osThreadTerminate(osThreadGetId()); -/* USER CODE END StartDefaultTask */ -} - -/* Private application code --------------------------------------------------*/ -/* USER CODE BEGIN Application */ - -/* USER CODE END Application */ - +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * File Name : freertos.c + * Description : Code for freertos applications + ****************************************************************************** + * @attention + * + * Copyright (c) 2026 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "FreeRTOS.h" +#include "task.h" +#include "main.h" +#include "cmsis_os.h" + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ + +#include "task/user_task.h" +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN PTD */ + +/* USER CODE END PTD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN PD */ + +/* USER CODE END PD */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN PM */ + +/* USER CODE END PM */ + +/* Private variables ---------------------------------------------------------*/ +/* USER CODE BEGIN Variables */ + +/* USER CODE END Variables */ +/* Definitions for defaultTask */ +osThreadId_t defaultTaskHandle; +const osThreadAttr_t defaultTask_attributes = { + .name = "defaultTask", + .stack_size = 128 * 4, + .priority = (osPriority_t) osPriorityNormal, +}; + +/* Private function prototypes -----------------------------------------------*/ +/* USER CODE BEGIN FunctionPrototypes */ + +/* USER CODE END FunctionPrototypes */ + +void StartDefaultTask(void *argument); + +void MX_FREERTOS_Init(void); /* (MISRA C 2004 rule 8.1) */ + +/** + * @brief FreeRTOS initialization + * @param None + * @retval None + */ +void MX_FREERTOS_Init(void) { + /* USER CODE BEGIN Init */ + + /* USER CODE END Init */ + + /* USER CODE BEGIN RTOS_MUTEX */ + /* add mutexes, ... */ + /* USER CODE END RTOS_MUTEX */ + + /* USER CODE BEGIN RTOS_SEMAPHORES */ + /* add semaphores, ... */ + /* USER CODE END RTOS_SEMAPHORES */ + + /* USER CODE BEGIN RTOS_TIMERS */ + /* start timers, add new ones, ... */ + /* USER CODE END RTOS_TIMERS */ + + /* USER CODE BEGIN RTOS_QUEUES */ + /* add queues, ... */ + /* USER CODE END RTOS_QUEUES */ + + /* Create the thread(s) */ + /* creation of defaultTask */ + defaultTaskHandle = osThreadNew(StartDefaultTask, NULL, &defaultTask_attributes); + + /* USER CODE BEGIN RTOS_THREADS */ + /* add threads, ... */ + osThreadNew(Task_Init, NULL, &attr_init); // 创建初始化任务 + /* USER CODE END RTOS_THREADS */ + + /* USER CODE BEGIN RTOS_EVENTS */ + /* add events, ... */ + /* USER CODE END RTOS_EVENTS */ + +} + +/* USER CODE BEGIN Header_StartDefaultTask */ +/** + * @brief Function implementing the defaultTask thread. + * @param argument: Not used + * @retval None + */ +/* USER CODE END Header_StartDefaultTask */ +void StartDefaultTask(void *argument) +{ + /* USER CODE BEGIN StartDefaultTask */ + osThreadTerminate(osThreadGetId()); + /* USER CODE END StartDefaultTask */ +} + +/* Private application code --------------------------------------------------*/ +/* USER CODE BEGIN Application */ + +/* USER CODE END Application */ + diff --git a/Core/Src/main.c b/Core/Src/main.c index 23571a0..104f22b 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -100,7 +100,6 @@ int main(void) MX_ADC1_Init(); MX_TIM12_Init(); MX_SPI1_Init(); - MX_SPI6_Init(); MX_SPI2_Init(); MX_TIM3_Init(); MX_USART1_UART_Init(); @@ -115,6 +114,7 @@ int main(void) MX_TIM2_Init(); MX_OCTOSPI1_Init(); MX_USB_OTG_HS_PCD_Init(); + MX_UART5_Init(); /* USER CODE BEGIN 2 */ /* USER CODE END 2 */ diff --git a/Core/Src/spi.c b/Core/Src/spi.c index d53f842..e7f60ea 100644 --- a/Core/Src/spi.c +++ b/Core/Src/spi.c @@ -26,7 +26,6 @@ SPI_HandleTypeDef hspi1; SPI_HandleTypeDef hspi2; -SPI_HandleTypeDef hspi6; DMA_HandleTypeDef hdma_spi2_rx; DMA_HandleTypeDef hdma_spi2_tx; @@ -113,48 +112,6 @@ void MX_SPI2_Init(void) /* USER CODE END SPI2_Init 2 */ -} -/* SPI6 init function */ -void MX_SPI6_Init(void) -{ - - /* USER CODE BEGIN SPI6_Init 0 */ - - /* USER CODE END SPI6_Init 0 */ - - /* USER CODE BEGIN SPI6_Init 1 */ - - /* USER CODE END SPI6_Init 1 */ - hspi6.Instance = SPI6; - hspi6.Init.Mode = SPI_MODE_MASTER; - hspi6.Init.Direction = SPI_DIRECTION_2LINES_TXONLY; - hspi6.Init.DataSize = SPI_DATASIZE_8BIT; - hspi6.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi6.Init.CLKPhase = SPI_PHASE_2EDGE; - hspi6.Init.NSS = SPI_NSS_SOFT; - hspi6.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_4; - hspi6.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi6.Init.TIMode = SPI_TIMODE_DISABLE; - hspi6.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi6.Init.CRCPolynomial = 0x0; - hspi6.Init.NSSPMode = SPI_NSS_PULSE_ENABLE; - hspi6.Init.NSSPolarity = SPI_NSS_POLARITY_LOW; - hspi6.Init.FifoThreshold = SPI_FIFO_THRESHOLD_01DATA; - hspi6.Init.TxCRCInitializationPattern = SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN; - hspi6.Init.RxCRCInitializationPattern = SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN; - hspi6.Init.MasterSSIdleness = SPI_MASTER_SS_IDLENESS_00CYCLE; - hspi6.Init.MasterInterDataIdleness = SPI_MASTER_INTERDATA_IDLENESS_00CYCLE; - hspi6.Init.MasterReceiverAutoSusp = SPI_MASTER_RX_AUTOSUSP_DISABLE; - hspi6.Init.MasterKeepIOState = SPI_MASTER_KEEP_IO_STATE_DISABLE; - hspi6.Init.IOSwap = SPI_IO_SWAP_DISABLE; - if (HAL_SPI_Init(&hspi6) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN SPI6_Init 2 */ - - /* USER CODE END SPI6_Init 2 */ - } void HAL_SPI_MspInit(SPI_HandleTypeDef* spiHandle) @@ -287,48 +244,6 @@ void HAL_SPI_MspInit(SPI_HandleTypeDef* spiHandle) /* USER CODE END SPI2_MspInit 1 */ } - else if(spiHandle->Instance==SPI6) - { - /* USER CODE BEGIN SPI6_MspInit 0 */ - - /* USER CODE END SPI6_MspInit 0 */ - - /** Initializes the peripherals clock - */ - PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_SPI6; - PeriphClkInitStruct.Spi6ClockSelection = RCC_SPI6CLKSOURCE_HSE; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) - { - Error_Handler(); - } - - /* SPI6 clock enable */ - __HAL_RCC_SPI6_CLK_ENABLE(); - - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOC_CLK_ENABLE(); - /**SPI6 GPIO Configuration - PA7 ------> SPI6_MOSI - PC12 ------> SPI6_SCK - */ - GPIO_InitStruct.Pin = GPIO_PIN_7; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - GPIO_InitStruct.Alternate = GPIO_AF8_SPI6; - HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); - - GPIO_InitStruct.Pin = GPIO_PIN_12; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - GPIO_InitStruct.Alternate = GPIO_AF5_SPI6; - HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); - - /* USER CODE BEGIN SPI6_MspInit 1 */ - - /* USER CODE END SPI6_MspInit 1 */ - } } void HAL_SPI_MspDeInit(SPI_HandleTypeDef* spiHandle) @@ -381,26 +296,6 @@ void HAL_SPI_MspDeInit(SPI_HandleTypeDef* spiHandle) /* USER CODE END SPI2_MspDeInit 1 */ } - else if(spiHandle->Instance==SPI6) - { - /* USER CODE BEGIN SPI6_MspDeInit 0 */ - - /* USER CODE END SPI6_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_SPI6_CLK_DISABLE(); - - /**SPI6 GPIO Configuration - PA7 ------> SPI6_MOSI - PC12 ------> SPI6_SCK - */ - HAL_GPIO_DeInit(GPIOA, GPIO_PIN_7); - - HAL_GPIO_DeInit(GPIOC, GPIO_PIN_12); - - /* USER CODE BEGIN SPI6_MspDeInit 1 */ - - /* USER CODE END SPI6_MspDeInit 1 */ - } } /* USER CODE BEGIN 1 */ diff --git a/Core/Src/stm32h7xx_it.c b/Core/Src/stm32h7xx_it.c index 8bbbfd9..8633010 100644 --- a/Core/Src/stm32h7xx_it.c +++ b/Core/Src/stm32h7xx_it.c @@ -62,6 +62,8 @@ extern FDCAN_HandleTypeDef hfdcan3; extern DMA_HandleTypeDef hdma_spi2_rx; extern DMA_HandleTypeDef hdma_spi2_tx; extern SPI_HandleTypeDef hspi2; +extern DMA_HandleTypeDef hdma_uart5_rx; +extern UART_HandleTypeDef huart5; extern UART_HandleTypeDef huart7; extern UART_HandleTypeDef huart1; extern UART_HandleTypeDef huart2; @@ -213,6 +215,20 @@ void DMA1_Stream2_IRQHandler(void) /* USER CODE END DMA1_Stream2_IRQn 1 */ } +/** + * @brief This function handles DMA1 stream3 global interrupt. + */ +void DMA1_Stream3_IRQHandler(void) +{ + /* USER CODE BEGIN DMA1_Stream3_IRQn 0 */ + + /* USER CODE END DMA1_Stream3_IRQn 0 */ + HAL_DMA_IRQHandler(&hdma_uart5_rx); + /* USER CODE BEGIN DMA1_Stream3_IRQn 1 */ + + /* USER CODE END DMA1_Stream3_IRQn 1 */ +} + /** * @brief This function handles FDCAN1 interrupt 0. */ @@ -340,6 +356,20 @@ void EXTI15_10_IRQHandler(void) /* USER CODE END EXTI15_10_IRQn 1 */ } +/** + * @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 UART7 global interrupt. */ diff --git a/Core/Src/tim.c b/Core/Src/tim.c index 2287a4b..506740f 100644 --- a/Core/Src/tim.c +++ b/Core/Src/tim.c @@ -340,12 +340,12 @@ void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle) /**TIM3 GPIO Configuration PB1 ------> TIM3_CH4 */ - GPIO_InitStruct.Pin = GPIO_PIN_1; + GPIO_InitStruct.Pin = IMU_HEAT_Pin; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.Alternate = GPIO_AF2_TIM3; - HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + HAL_GPIO_Init(IMU_HEAT_GPIO_Port, &GPIO_InitStruct); /* USER CODE BEGIN TIM3_MspPostInit 1 */ @@ -361,12 +361,12 @@ void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle) /**TIM12 GPIO Configuration PB15 ------> TIM12_CH2 */ - GPIO_InitStruct.Pin = GPIO_PIN_15; + GPIO_InitStruct.Pin = BUZZER_Pin; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.Alternate = GPIO_AF2_TIM12; - HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + HAL_GPIO_Init(BUZZER_GPIO_Port, &GPIO_InitStruct); /* USER CODE BEGIN TIM12_MspPostInit 1 */ diff --git a/Core/Src/usart.c b/Core/Src/usart.c index f6c9d54..af0ce00 100644 --- a/Core/Src/usart.c +++ b/Core/Src/usart.c @@ -24,12 +24,57 @@ /* USER CODE END 0 */ +UART_HandleTypeDef huart5; UART_HandleTypeDef huart7; UART_HandleTypeDef huart1; UART_HandleTypeDef huart2; UART_HandleTypeDef huart3; UART_HandleTypeDef huart10; +DMA_HandleTypeDef hdma_uart5_rx; +/* UART5 init function */ +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 = 100000; + huart5.Init.WordLength = UART_WORDLENGTH_9B; + huart5.Init.StopBits = UART_STOPBITS_1; + huart5.Init.Parity = UART_PARITY_EVEN; + huart5.Init.Mode = UART_MODE_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 */ + +} /* UART7 init function */ void MX_UART7_Init(void) { @@ -255,7 +300,71 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle) GPIO_InitTypeDef GPIO_InitStruct = {0}; RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; - if(uartHandle->Instance==UART7) + if(uartHandle->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(); + } + + /* UART5 clock enable */ + __HAL_RCC_UART5_CLK_ENABLE(); + + __HAL_RCC_GPIOC_CLK_ENABLE(); + __HAL_RCC_GPIOD_CLK_ENABLE(); + /**UART5 GPIO Configuration + PC12 ------> UART5_TX + PD2 ------> UART5_RX + */ + GPIO_InitStruct.Pin = GPIO_PIN_12; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF8_UART5; + HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_2; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF8_UART5; + HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); + + /* UART5 DMA Init */ + /* UART5_RX Init */ + hdma_uart5_rx.Instance = DMA1_Stream3; + 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_NORMAL; + 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(uartHandle,hdmarx,hdma_uart5_rx); + + /* 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(uartHandle->Instance==UART7) { /* USER CODE BEGIN UART7_MspInit 0 */ @@ -462,7 +571,32 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle) void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle) { - if(uartHandle->Instance==UART7) + if(uartHandle->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 + PC12 ------> UART5_TX + PD2 ------> UART5_RX + */ + HAL_GPIO_DeInit(GPIOC, GPIO_PIN_12); + + HAL_GPIO_DeInit(GPIOD, GPIO_PIN_2); + + /* UART5 DMA DeInit */ + HAL_DMA_DeInit(uartHandle->hdmarx); + + /* UART5 interrupt Deinit */ + HAL_NVIC_DisableIRQ(UART5_IRQn); + /* USER CODE BEGIN UART5_MspDeInit 1 */ + + /* USER CODE END UART5_MspDeInit 1 */ + } + else if(uartHandle->Instance==UART7) { /* USER CODE BEGIN UART7_MspDeInit 0 */ diff --git a/CtrBoard-H7_ALL.ioc b/CtrBoard-H7_ALL.ioc index 1e9f041..8ce2224 100644 --- a/CtrBoard-H7_ALL.ioc +++ b/CtrBoard-H7_ALL.ioc @@ -50,7 +50,8 @@ Dma.ADC1.0.SyncSignalID=NONE Dma.Request0=ADC1 Dma.Request1=SPI2_RX Dma.Request2=SPI2_TX -Dma.RequestsNb=3 +Dma.Request3=UART5_RX +Dma.RequestsNb=4 Dma.SPI2_RX.1.Direction=DMA_PERIPH_TO_MEMORY Dma.SPI2_RX.1.EventEnable=DISABLE Dma.SPI2_RX.1.FIFOMode=DMA_FIFOMODE_DISABLE @@ -87,35 +88,56 @@ Dma.SPI2_TX.2.SyncEnable=DISABLE Dma.SPI2_TX.2.SyncPolarity=HAL_DMAMUX_SYNC_NO_EVENT Dma.SPI2_TX.2.SyncRequestNumber=1 Dma.SPI2_TX.2.SyncSignalID=NONE -FDCAN1.CalculateBaudRateNominal=1250000 -FDCAN1.CalculateTimeBitNominal=800 +Dma.UART5_RX.3.Direction=DMA_PERIPH_TO_MEMORY +Dma.UART5_RX.3.EventEnable=DISABLE +Dma.UART5_RX.3.FIFOMode=DMA_FIFOMODE_DISABLE +Dma.UART5_RX.3.Instance=DMA1_Stream3 +Dma.UART5_RX.3.MemDataAlignment=DMA_MDATAALIGN_BYTE +Dma.UART5_RX.3.MemInc=DMA_MINC_ENABLE +Dma.UART5_RX.3.Mode=DMA_NORMAL +Dma.UART5_RX.3.PeriphDataAlignment=DMA_PDATAALIGN_BYTE +Dma.UART5_RX.3.PeriphInc=DMA_PINC_DISABLE +Dma.UART5_RX.3.Polarity=HAL_DMAMUX_REQ_GEN_RISING +Dma.UART5_RX.3.Priority=DMA_PRIORITY_LOW +Dma.UART5_RX.3.RequestNumber=1 +Dma.UART5_RX.3.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode,SignalID,Polarity,RequestNumber,SyncSignalID,SyncPolarity,SyncEnable,EventEnable,SyncRequestNumber +Dma.UART5_RX.3.SignalID=NONE +Dma.UART5_RX.3.SyncEnable=DISABLE +Dma.UART5_RX.3.SyncPolarity=HAL_DMAMUX_SYNC_NO_EVENT +Dma.UART5_RX.3.SyncRequestNumber=1 +Dma.UART5_RX.3.SyncSignalID=NONE +FDCAN1.CalculateBaudRateNominal=1000000 +FDCAN1.CalculateTimeBitNominal=1000 FDCAN1.CalculateTimeQuantumNominal=200.0 FDCAN1.IPParameters=CalculateTimeQuantumNominal,CalculateTimeBitNominal,CalculateBaudRateNominal,RxFifo0ElmtsNbr,TxFifoQueueElmtsNbr,NominalPrescaler,StdFiltersNbr,NominalTimeSeg1 FDCAN1.NominalPrescaler=24 -FDCAN1.NominalTimeSeg1=2 +FDCAN1.NominalTimeSeg1=3 FDCAN1.RxFifo0ElmtsNbr=32 FDCAN1.StdFiltersNbr=1 FDCAN1.TxFifoQueueElmtsNbr=32 -FDCAN2.CalculateBaudRateNominal=1666666 -FDCAN2.CalculateTimeBitNominal=600 +FDCAN2.CalculateBaudRateNominal=1000000 +FDCAN2.CalculateTimeBitNominal=1000 FDCAN2.CalculateTimeQuantumNominal=200.0 -FDCAN2.IPParameters=CalculateTimeQuantumNominal,CalculateTimeBitNominal,CalculateBaudRateNominal,MessageRAMOffset,RxFifo0ElmtsNbr,TxFifoQueueElmtsNbr,NominalPrescaler,StdFiltersNbr +FDCAN2.IPParameters=CalculateTimeQuantumNominal,CalculateTimeBitNominal,CalculateBaudRateNominal,MessageRAMOffset,RxFifo0ElmtsNbr,TxFifoQueueElmtsNbr,NominalPrescaler,StdFiltersNbr,NominalTimeSeg1 FDCAN2.MessageRAMOffset=0x406 FDCAN2.NominalPrescaler=24 +FDCAN2.NominalTimeSeg1=3 FDCAN2.RxFifo0ElmtsNbr=32 FDCAN2.StdFiltersNbr=1 FDCAN2.TxFifoQueueElmtsNbr=32 -FDCAN3.CalculateBaudRateNominal=1666666 -FDCAN3.CalculateTimeBitNominal=600 +FDCAN3.CalculateBaudRateNominal=1000000 +FDCAN3.CalculateTimeBitNominal=1000 FDCAN3.CalculateTimeQuantumNominal=200.0 -FDCAN3.IPParameters=CalculateTimeQuantumNominal,CalculateTimeBitNominal,CalculateBaudRateNominal,MessageRAMOffset,RxFifo0ElmtsNbr,TxFifoQueueElmtsNbr,NominalPrescaler,StdFiltersNbr +FDCAN3.IPParameters=CalculateTimeQuantumNominal,CalculateTimeBitNominal,CalculateBaudRateNominal,MessageRAMOffset,RxFifo0ElmtsNbr,TxFifoQueueElmtsNbr,NominalPrescaler,StdFiltersNbr,NominalTimeSeg1 FDCAN3.MessageRAMOffset=0x812 FDCAN3.NominalPrescaler=24 +FDCAN3.NominalTimeSeg1=3 FDCAN3.RxFifo0ElmtsNbr=32 FDCAN3.StdFiltersNbr=1 FDCAN3.TxFifoQueueElmtsNbr=32 -FREERTOS.IPParameters=Tasks01 +FREERTOS.IPParameters=Tasks01,configTOTAL_HEAP_SIZE FREERTOS.Tasks01=defaultTask,24,128,StartDefaultTask,Default,NULL,Dynamic,NULL,NULL +FREERTOS.configTOTAL_HEAP_SIZE=0x10000 File.Version=6 GPIO.groupedBy=Group By Peripherals KeepUserPlacement=false @@ -129,12 +151,12 @@ Mcu.IP10=OCTOSPI1 Mcu.IP11=RCC Mcu.IP12=SPI1 Mcu.IP13=SPI2 -Mcu.IP14=SPI6 -Mcu.IP15=SYS -Mcu.IP16=TIM1 -Mcu.IP17=TIM2 -Mcu.IP18=TIM3 -Mcu.IP19=TIM12 +Mcu.IP14=SYS +Mcu.IP15=TIM1 +Mcu.IP16=TIM2 +Mcu.IP17=TIM3 +Mcu.IP18=TIM12 +Mcu.IP19=UART5 Mcu.IP2=DEBUG Mcu.IP20=UART7 Mcu.IP21=USART1 @@ -160,47 +182,47 @@ Mcu.Pin12=PA1 Mcu.Pin13=PA2 Mcu.Pin14=PA3 Mcu.Pin15=PA5 -Mcu.Pin16=PA7 -Mcu.Pin17=PC4 -Mcu.Pin18=PC5 -Mcu.Pin19=PB0 +Mcu.Pin16=PC4 +Mcu.Pin17=PC5 +Mcu.Pin18=PB0 +Mcu.Pin19=PB1 Mcu.Pin2=PC13 -Mcu.Pin20=PB1 -Mcu.Pin21=PB2 -Mcu.Pin22=PE7 -Mcu.Pin23=PE8 -Mcu.Pin24=PE9 -Mcu.Pin25=PE10 -Mcu.Pin26=PE11 -Mcu.Pin27=PE12 -Mcu.Pin28=PE13 -Mcu.Pin29=PE15 +Mcu.Pin20=PB2 +Mcu.Pin21=PE7 +Mcu.Pin22=PE8 +Mcu.Pin23=PE9 +Mcu.Pin24=PE10 +Mcu.Pin25=PE11 +Mcu.Pin26=PE12 +Mcu.Pin27=PE13 +Mcu.Pin28=PE15 +Mcu.Pin29=PB10 Mcu.Pin3=PC14-OSC32_IN -Mcu.Pin30=PB10 -Mcu.Pin31=PB11 -Mcu.Pin32=PB12 -Mcu.Pin33=PB13 -Mcu.Pin34=PB14 -Mcu.Pin35=PB15 -Mcu.Pin36=PD8 -Mcu.Pin37=PD9 -Mcu.Pin38=PD10 -Mcu.Pin39=PD11 +Mcu.Pin30=PB11 +Mcu.Pin31=PB12 +Mcu.Pin32=PB13 +Mcu.Pin33=PB14 +Mcu.Pin34=PB15 +Mcu.Pin35=PD8 +Mcu.Pin36=PD9 +Mcu.Pin37=PD10 +Mcu.Pin38=PD11 +Mcu.Pin39=PD12 Mcu.Pin4=PC15-OSC32_OUT -Mcu.Pin40=PD12 -Mcu.Pin41=PD13 -Mcu.Pin42=PA8 -Mcu.Pin43=PA9 -Mcu.Pin44=PA10 -Mcu.Pin45=PA11 -Mcu.Pin46=PA12 -Mcu.Pin47=PA13(JTMS/SWDIO) -Mcu.Pin48=PA14(JTCK/SWCLK) -Mcu.Pin49=PA15(JTDI) +Mcu.Pin40=PD13 +Mcu.Pin41=PA8 +Mcu.Pin42=PA9 +Mcu.Pin43=PA10 +Mcu.Pin44=PA11 +Mcu.Pin45=PA12 +Mcu.Pin46=PA13(JTMS/SWDIO) +Mcu.Pin47=PA14(JTCK/SWCLK) +Mcu.Pin48=PA15(JTDI) +Mcu.Pin49=PC12 Mcu.Pin5=PH0-OSC_IN -Mcu.Pin50=PC12 -Mcu.Pin51=PD0 -Mcu.Pin52=PD1 +Mcu.Pin50=PD0 +Mcu.Pin51=PD1 +Mcu.Pin52=PD2 Mcu.Pin53=PD4 Mcu.Pin54=PD5 Mcu.Pin55=PD6 @@ -226,6 +248,7 @@ NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false NVIC.DMA1_Stream0_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true NVIC.DMA1_Stream1_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true NVIC.DMA1_Stream2_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true +NVIC.DMA1_Stream3_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.EXTI15_10_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true NVIC.FDCAN1_IT0_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true @@ -249,6 +272,7 @@ NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:false\:true\:false\:true\:false NVIC.TIM23_IRQn=true\:15\:0\:false\:false\:true\:false\:false\:true\:true NVIC.TimeBase=TIM23_IRQn NVIC.TimeBaseIP=TIM23 +NVIC.UART5_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true NVIC.UART7_IRQn=true\:5\:0\:true\:false\:true\:true\:true\:true\:true NVIC.USART10_IRQn=true\:5\:0\:true\:false\:true\:true\:true\:true\:true NVIC.USART1_IRQn=true\:5\:0\:true\:false\:true\:true\:true\:true\:true @@ -282,8 +306,6 @@ PA3.Mode=OCTOSPI1_IOL_Port1L PA3.Signal=OCTOSPIM_P1_IO2 PA5.Locked=true PA5.Signal=ADCx_INP19 -PA7.Mode=TX_Only_Simplex_Unidirect_Master -PA7.Signal=SPI6_MOSI PA8.Locked=true PA8.Mode=Clock-out-1 PA8.Signal=RCC_MCO_1 @@ -293,6 +315,8 @@ PA9.Signal=USART1_TX PB0.Locked=true PB0.Mode=OCTOSPI1_IOL_Port1L PB0.Signal=OCTOSPIM_P1_IO1 +PB1.GPIOParameters=GPIO_Label +PB1.GPIO_Label=IMU_HEAT PB1.Locked=true PB1.Signal=S_TIM3_CH4 PB10.GPIOParameters=GPIO_Label @@ -317,6 +341,8 @@ PB13.Mode=Full_Duplex_Master PB13.Signal=SPI2_SCK PB14.Mode=Hardware Flow Control (RS485) PB14.Signal=USART3_DE +PB15.GPIOParameters=GPIO_Label +PB15.GPIO_Label=BUZZER PB15.Locked=true PB15.Signal=S_TIM12_CH2 PB2.Locked=true @@ -342,8 +368,8 @@ PC1.GPIOParameters=GPIO_Speed PC1.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH PC1.Mode=Full_Duplex_Master PC1.Signal=SPI2_MOSI -PC12.Mode=TX_Only_Simplex_Unidirect_Master -PC12.Signal=SPI6_SCK +PC12.Mode=Asynchronous +PC12.Signal=UART5_TX PC13.GPIOParameters=PinState,GPIO_Label PC13.GPIO_Label=POWER_24V_2 PC13.Locked=true @@ -395,6 +421,8 @@ PD12.Signal=FDCAN3_RX PD13.Locked=true PD13.Mode=FDCAN_Activate PD13.Signal=FDCAN3_TX +PD2.Mode=Asynchronous +PD2.Signal=UART5_RX PD4.Locked=true PD4.Mode=Hardware Flow Control (RS485) PD4.Signal=USART2_DE @@ -475,7 +503,7 @@ ProjectManager.ToolChainLocation= 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_ADC1_Init-ADC1-false-HAL-true,5-MX_USB_DEVICE_Init-USB_DEVICE-false-HAL-false,6-MX_TIM12_Init-TIM12-false-HAL-true,7-MX_SPI1_Init-SPI1-false-HAL-true,8-MX_SPI6_Init-SPI6-false-HAL-true,9-MX_SPI2_Init-SPI2-false-HAL-true,10-MX_TIM3_Init-TIM3-false-HAL-true,11-MX_USART1_UART_Init-USART1-false-HAL-true,12-MX_USART2_UART_Init-USART2-false-HAL-true,13-MX_USART3_UART_Init-USART3-false-HAL-true,14-MX_UART7_Init-UART7-false-HAL-true,15-MX_USART10_UART_Init-USART10-false-HAL-true,16-MX_FDCAN1_Init-FDCAN1-false-HAL-true,17-MX_FDCAN2_Init-FDCAN2-false-HAL-true,18-MX_FDCAN3_Init-FDCAN3-false-HAL-true,19-MX_TIM1_Init-TIM1-false-HAL-true,20-MX_TIM2_Init-TIM2-false-HAL-true,21-MX_OCTOSPI1_Init-OCTOSPI1-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_ADC1_Init-ADC1-false-HAL-true,5-MX_TIM12_Init-TIM12-false-HAL-true,6-MX_SPI1_Init-SPI1-false-HAL-true,7-MX_SPI2_Init-SPI2-false-HAL-true,8-MX_TIM3_Init-TIM3-false-HAL-true,9-MX_USART1_UART_Init-USART1-false-HAL-true,10-MX_USART2_UART_Init-USART2-false-HAL-true,11-MX_USART3_UART_Init-USART3-false-HAL-true,12-MX_UART7_Init-UART7-false-HAL-true,13-MX_USART10_UART_Init-USART10-false-HAL-true,14-MX_FDCAN1_Init-FDCAN1-false-HAL-true,15-MX_FDCAN2_Init-FDCAN2-false-HAL-true,16-MX_FDCAN3_Init-FDCAN3-false-HAL-true,17-MX_TIM1_Init-TIM1-false-HAL-true,18-MX_TIM2_Init-TIM2-false-HAL-true,19-MX_OCTOSPI1_Init-OCTOSPI1-false-HAL-true,20-MX_USB_OTG_HS_PCD_Init-USB_OTG_HS-false-HAL-true,21-MX_UART5_Init-UART5-false-HAL-true,0-MX_CORTEX_M7_Init-CORTEX_M7-false-HAL-true RCC.ADCFreq_Value=96000000 RCC.AHB12Freq_Value=240000000 RCC.AHB4Freq_Value=240000000 @@ -600,14 +628,6 @@ SPI2.Direction=SPI_DIRECTION_2LINES SPI2.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,DataSize,BaudRatePrescaler,CLKPolarity,CLKPhase SPI2.Mode=SPI_MODE_MASTER SPI2.VirtualType=VM_MASTER -SPI6.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_4 -SPI6.CLKPhase=SPI_PHASE_2EDGE -SPI6.CalculateBaudRate=6.0 MBits/s -SPI6.DataSize=SPI_DATASIZE_8BIT -SPI6.Direction=SPI_DIRECTION_2LINES_TXONLY -SPI6.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,DataSize,BaudRatePrescaler,CLKPhase -SPI6.Mode=SPI_MODE_MASTER -SPI6.VirtualType=VM_MASTER TIM1.Channel-PWM\ Generation1\ CH1=TIM_CHANNEL_1 TIM1.Channel-PWM\ Generation3\ CH3=TIM_CHANNEL_3 TIM1.IPParameters=Channel-PWM Generation3 CH3,Channel-PWM Generation1 CH1,Period,Pulse-PWM Generation1 CH1,Pulse-PWM Generation3 CH3,Prescaler @@ -631,6 +651,11 @@ TIM3.Channel-PWM\ Generation4\ CH4=TIM_CHANNEL_4 TIM3.IPParameters=Channel-PWM Generation4 CH4,Prescaler,Period,AutoReloadPreload TIM3.Period=10000-1 TIM3.Prescaler=24-1 +UART5.BaudRate=100000 +UART5.IPParameters=Mode,WordLength,Parity,BaudRate +UART5.Mode=MODE_RX +UART5.Parity=PARITY_EVEN +UART5.WordLength=WORDLENGTH_9B UART7.BaudRate=921600 UART7.IPParameters=BaudRate USART1.BaudRate=921600 diff --git a/STM32H723XG_FLASH.ld b/STM32H723XG_FLASH.ld index a1d75c7..a041b39 100644 --- a/STM32H723XG_FLASH.ld +++ b/STM32H723XG_FLASH.ld @@ -165,7 +165,7 @@ SECTIONS *(.RamFunc*) /* .RamFunc* sections */ . = ALIGN(4); - } >DTCMRAM AT> FLASH + } >RAM_D1 AT> FLASH /* Initialized TLS data section */ .tdata : ALIGN(4) @@ -175,7 +175,7 @@ SECTIONS _edata = .; /* define a global symbol at data end */ PROVIDE(__data_end = .); PROVIDE(__tdata_end = .); - } >DTCMRAM AT> FLASH + } >RAM_D1 AT> FLASH PROVIDE( __tdata_start = ADDR(.tdata) ); PROVIDE( __tdata_size = __tdata_end - __tdata_start ); @@ -199,7 +199,7 @@ SECTIONS *(.tbss .tbss.*) . = ALIGN(4); PROVIDE( __tbss_end = . ); - } >DTCMRAM + } >RAM_D1 PROVIDE( __tbss_start = ADDR(.tbss) ); PROVIDE( __tbss_size = __tbss_end - __tbss_start ); @@ -223,7 +223,7 @@ SECTIONS _ebss = .; /* define a global symbol at bss end */ __bss_end__ = _ebss; PROVIDE( __bss_end = .); - } >DTCMRAM + } >RAM_D1 PROVIDE( __non_tls_bss_start = ADDR(.bss) ); PROVIDE( __bss_start = __tbss_start ); diff --git a/User/bsp/bsp_config.yaml b/User/bsp/bsp_config.yaml index 0e7378d..18f4dd9 100644 --- a/User/bsp/bsp_config.yaml +++ b/User/bsp/bsp_config.yaml @@ -93,12 +93,12 @@ pwm: label: TIM2_CH3 timer: TIM2 - channel: TIM_CHANNEL_4 - custom_name: TIM3_CH4 - label: TIM3_CH4 + custom_name: IMU_HEAT + label: IMU_HEAT timer: TIM3 - channel: TIM_CHANNEL_2 - custom_name: TIM12_CH2 - label: TIM12_CH2 + custom_name: BUZZER + label: BUZZER timer: TIM12 - channel: TIM_CHANNEL_3 custom_name: TIM1_CH3 @@ -118,6 +118,6 @@ time: enabled: true uart: devices: - - instance: USART1 + - instance: UART5 name: DR16 enabled: true diff --git a/User/bsp/pwm.h b/User/bsp/pwm.h index f0e75f2..da2407b 100644 --- a/User/bsp/pwm.h +++ b/User/bsp/pwm.h @@ -25,8 +25,8 @@ extern "C" { typedef enum { BSP_PWM_TIM2_CH1, BSP_PWM_TIM2_CH3, - BSP_PWM_TIM3_CH4, - BSP_PWM_TIM12_CH2, + BSP_PWM_IMU_HEAT, + BSP_PWM_BUZZER, BSP_PWM_TIM1_CH3, BSP_PWM_TIM1_CH1, BSP_PWM_NUM, diff --git a/User/bsp/uart.c b/User/bsp/uart.c index 97eb8d3..96c4fd8 100644 --- a/User/bsp/uart.c +++ b/User/bsp/uart.c @@ -23,7 +23,7 @@ static void (*UART_Callback[BSP_UART_NUM][BSP_UART_CB_NUM])(void); /* Private function -------------------------------------------------------- */ static BSP_UART_t UART_Get(UART_HandleTypeDef *huart) { - if (huart->Instance == USART1) + if (huart->Instance == UART5) return BSP_UART_DR16; else return BSP_UART_ERR; @@ -114,7 +114,7 @@ void BSP_UART_IRQHandler(UART_HandleTypeDef *huart) { UART_HandleTypeDef *BSP_UART_GetHandle(BSP_UART_t uart) { switch (uart) { case BSP_UART_DR16: - return &huart1; + return &huart5; default: return NULL; } diff --git a/User/device/device_config.yaml b/User/device/device_config.yaml index 46f042e..981bd38 100644 --- a/User/device/device_config.yaml +++ b/User/device/device_config.yaml @@ -8,7 +8,7 @@ bmi088: enabled: true buzzer: bsp_config: - BSP_PWM_BUZZER: BSP_PWM_TIM12_CH2 + BSP_PWM_BUZZER: BSP_PWM_TIM2_CH1 enabled: true dr16: bsp_config: diff --git a/User/task/atti_esit.c b/User/task/atti_esit.c index 19fd599..6e91e67 100644 --- a/User/task/atti_esit.c +++ b/User/task/atti_esit.c @@ -1,12 +1,18 @@ /* atti_esit Task - + */ /* Includes ----------------------------------------------------------------- */ #include "task/user_task.h" /* USER INCLUDE BEGIN */ - +#include "bsp/gpio.h" +#include "bsp/mm.h" +#include "bsp/pwm.h" +#include "component/ahrs.h" +#include "component/pid.h" +#include "device/bmi088.h" +#include "task/user_task.h" /* USER INCLUDE END */ /* Private typedef ---------------------------------------------------------- */ @@ -14,6 +20,27 @@ /* Private macro ------------------------------------------------------------ */ /* Private variables -------------------------------------------------------- */ /* USER STRUCT BEGIN */ +BMI088_t bmi088; + +AHRS_t gimbal_ahrs; +AHRS_Magn_t magn; +AHRS_Eulr_t eulr_to_send; + +KPID_t imu_temp_ctrl_pid; + +/*默认校准参数*/ +BMI088_Cali_t cali_bmi088 = { + .gyro_offset = {-0.00147764047f, -0.00273479894f, 0.00154074503f}, +}; + +static const KPID_Params_t imu_temp_ctrl_pid_param = { + .k = 0.1f, + .p = 0.15f, + .i = 0.01f, + .d = 0.02f, + .i_limit = 1.0f, + .out_limit = 1.0f, +}; /* USER STRUCT END */ @@ -22,17 +49,41 @@ void Task_atti_esit(void *argument) { (void)argument; /* 未使用argument,消除警告 */ - osDelay(ATTI_ESIT_INIT_DELAY); /* 延时一段时间再开启任务 */ /* USER CODE INIT BEGIN */ - + BMI088_Init(&bmi088, &cali_bmi088); + AHRS_Init(&gimbal_ahrs, &magn, BMI088_GetUpdateFreq(&bmi088)); + PID_Init(&imu_temp_ctrl_pid, KPID_MODE_NO_D, + 1.0f / BMI088_GetUpdateFreq(&bmi088), &imu_temp_ctrl_pid_param); + BSP_PWM_Start(BSP_PWM_IMU_HEAT); /* USER CODE INIT END */ while (1) { /* USER CODE BEGIN */ + BMI088_WaitNew(); + BMI088_AcclStartDmaRecv(); + BMI088_AcclWaitDmaCplt(); + + BMI088_GyroStartDmaRecv(); + BMI088_GyroWaitDmaCplt(); + + /* 锁住RTOS内核防止数据解析过程中断,造成错误 */ + osKernelLock(); + /* 接收完所有数据后,把数据从原始字节加工成方便计算的数据 */ + BMI088_ParseAccl(&bmi088); + BMI088_ParseGyro(&bmi088); + // IST8310_Parse(&ist8310); + + /* 根据设备接收到的数据进行姿态解析 */ + AHRS_Update(&gimbal_ahrs, &bmi088.accl, &bmi088.gyro, &magn); + + /* 根据解析出来的四元数计算欧拉角 */ + AHRS_GetEulr(&eulr_to_send, &gimbal_ahrs); + BSP_PWM_SetComp(BSP_PWM_IMU_HEAT, PID_Calc(&imu_temp_ctrl_pid, 40.5f, + bmi088.temp, 0.0f, 0.0f)); + osKernelUnlock(); /* USER CODE END */ } - } \ No newline at end of file diff --git a/User/task/rc.c b/User/task/rc.c index e1897c1..4ef9eed 100644 --- a/User/task/rc.c +++ b/User/task/rc.c @@ -4,9 +4,10 @@ */ /* Includes ----------------------------------------------------------------- */ +#include "device/dr16.h" #include "task/user_task.h" /* USER INCLUDE BEGIN */ - +#include "device/dr16.h" /* USER INCLUDE END */ /* Private typedef ---------------------------------------------------------- */ @@ -14,7 +15,7 @@ /* Private macro ------------------------------------------------------------ */ /* Private variables -------------------------------------------------------- */ /* USER STRUCT BEGIN */ - +DR16_t dr16; /* USER STRUCT END */ /* Private function --------------------------------------------------------- */ @@ -30,13 +31,18 @@ void Task_rc(void *argument) { uint32_t tick = osKernelGetTickCount(); /* 控制任务运行频率的计时 */ /* USER CODE INIT BEGIN */ - + DR16_Init(&dr16); /* USER CODE INIT END */ while (1) { tick += delay_tick; /* 计算下一个唤醒时刻 */ /* USER CODE BEGIN */ - + DR16_StartDmaRecv(&dr16); + if (DR16_WaitDmaCplt(20)) { + DR16_ParseData(&dr16); + } else { + DR16_Offline(&dr16); + } /* USER CODE END */ osDelayUntil(tick); /* 运行结束,等待下一次唤醒 */ }