From 470ff377364a69baf4460de8951da2612a53dafd Mon Sep 17 00:00:00 2001 From: "Ivan I. Ovchinnikov" Date: Thu, 23 Jul 2026 22:26:09 +0300 Subject: [PATCH] base blink changed to embedded usart3 --- Core/Inc/stm32f7xx_it.h | 1 + Core/Inc/usart.h | 3 ++ Core/Src/freertos.c | 17 ++------ Core/Src/main.c | 1 + Core/Src/stm32f7xx_it.c | 15 +++++++ Core/Src/usart.c | 89 +++++++++++++++++++++++++++++++++++++++++ stm_os_sampler.ioc | 29 ++++++++++---- 7 files changed, 134 insertions(+), 21 deletions(-) diff --git a/Core/Inc/stm32f7xx_it.h b/Core/Inc/stm32f7xx_it.h index eda34ee..09d3c60 100755 --- a/Core/Inc/stm32f7xx_it.h +++ b/Core/Inc/stm32f7xx_it.h @@ -54,6 +54,7 @@ void UsageFault_Handler(void); void DebugMon_Handler(void); void TIM1_UP_TIM10_IRQHandler(void); void USART2_IRQHandler(void); +void USART3_IRQHandler(void); /* USER CODE BEGIN EFP */ /* USER CODE END EFP */ diff --git a/Core/Inc/usart.h b/Core/Inc/usart.h index eaacced..76cc364 100755 --- a/Core/Inc/usart.h +++ b/Core/Inc/usart.h @@ -34,11 +34,14 @@ extern "C" { extern UART_HandleTypeDef huart2; +extern UART_HandleTypeDef huart3; + /* USER CODE BEGIN Private defines */ /* USER CODE END Private defines */ void MX_USART2_UART_Init(void); +void MX_USART3_UART_Init(void); /* USER CODE BEGIN Prototypes */ diff --git a/Core/Src/freertos.c b/Core/Src/freertos.c index 791d1fa..0f8c07e 100755 --- a/Core/Src/freertos.c +++ b/Core/Src/freertos.c @@ -166,16 +166,7 @@ void StartDefaultTask(void *argument) /* Infinite loop */ for(;;) { - osDelay(100); -// отладочный код для проверки работы юарта и тактирования -// HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_7); -// osDelay(500); -// HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_14); -// osDelay(500); -// HAL_UART_Transmit(&huart2, (uint8_t*)test_msg, sizeof(test_msg)-1, 100); -// osDelay(100); - } /* USER CODE END StartDefaultTask */ } @@ -214,7 +205,7 @@ void StartLedTask(void *argument) void StartUARTTask(void *argument) { /* USER CODE BEGIN StartUARTTask */ - HAL_UART_Receive_IT(&huart2, rxBuffer, RX_BUFFER_SIZE); + HAL_UART_Receive_IT(&huart3, rxBuffer, RX_BUFFER_SIZE); /* Infinite loop */ for(;;) { @@ -223,11 +214,11 @@ void StartUARTTask(void *argument) if (rxBuffer[0] == PING) { xTaskNotifyGive(myLedHandle); txByte = PONG; - HAL_UART_Transmit_IT(&huart2, &txByte, 1); + HAL_UART_Transmit_IT(&huart2, &txByte, 1); rxBuffer[0] = 0x00; } - HAL_UART_Receive_IT(&huart2, rxBuffer, RX_BUFFER_SIZE); + HAL_UART_Receive_IT(&huart3, rxBuffer, RX_BUFFER_SIZE); osDelay(1); } @@ -238,7 +229,7 @@ void StartUARTTask(void *argument) /* USER CODE BEGIN Application */ void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { - if(huart == &huart2) + if(huart == &huart3) { BaseType_t xHigherPriorityTaskWoken = pdFALSE; xTaskNotifyFromISR(myUARTHandle, 0, eNoAction, &xHigherPriorityTaskWoken); diff --git a/Core/Src/main.c b/Core/Src/main.c index 9599691..a428d62 100755 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -94,6 +94,7 @@ int main(void) /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_USART2_UART_Init(); + MX_USART3_UART_Init(); /* USER CODE BEGIN 2 */ /* USER CODE END 2 */ diff --git a/Core/Src/stm32f7xx_it.c b/Core/Src/stm32f7xx_it.c index 340ea06..bb8ec61 100755 --- a/Core/Src/stm32f7xx_it.c +++ b/Core/Src/stm32f7xx_it.c @@ -56,6 +56,7 @@ /* External variables --------------------------------------------------------*/ extern UART_HandleTypeDef huart2; +extern UART_HandleTypeDef huart3; extern TIM_HandleTypeDef htim1; /* USER CODE BEGIN EV */ @@ -189,6 +190,20 @@ void USART2_IRQHandler(void) /* USER CODE END USART2_IRQn 1 */ } +/** + * @brief This function handles USART3 global interrupt. + */ +void USART3_IRQHandler(void) +{ + /* USER CODE BEGIN USART3_IRQn 0 */ + + /* USER CODE END USART3_IRQn 0 */ + HAL_UART_IRQHandler(&huart3); + /* USER CODE BEGIN USART3_IRQn 1 */ + + /* USER CODE END USART3_IRQn 1 */ +} + /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ diff --git a/Core/Src/usart.c b/Core/Src/usart.c index bf281ca..35920f1 100755 --- a/Core/Src/usart.c +++ b/Core/Src/usart.c @@ -25,6 +25,7 @@ /* USER CODE END 0 */ UART_HandleTypeDef huart2; +UART_HandleTypeDef huart3; /* USART2 init function */ @@ -56,6 +57,37 @@ void MX_USART2_UART_Init(void) /* USER CODE END USART2_Init 2 */ +} +/* USART3 init function */ + +void MX_USART3_UART_Init(void) +{ + + /* USER CODE BEGIN USART3_Init 0 */ + + /* USER CODE END USART3_Init 0 */ + + /* USER CODE BEGIN USART3_Init 1 */ + + /* USER CODE END USART3_Init 1 */ + huart3.Instance = USART3; + huart3.Init.BaudRate = 9600; + huart3.Init.WordLength = UART_WORDLENGTH_8B; + huart3.Init.StopBits = UART_STOPBITS_1; + huart3.Init.Parity = UART_PARITY_NONE; + huart3.Init.Mode = UART_MODE_TX_RX; + huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE; + huart3.Init.OverSampling = UART_OVERSAMPLING_16; + huart3.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE; + huart3.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; + if (HAL_UART_Init(&huart3) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN USART3_Init 2 */ + + /* USER CODE END USART3_Init 2 */ + } void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle) @@ -108,6 +140,43 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle) /* USER CODE END USART2_MspInit 1 */ } + else if(uartHandle->Instance==USART3) + { + /* USER CODE BEGIN USART3_MspInit 0 */ + + /* USER CODE END USART3_MspInit 0 */ + + /** Initializes the peripherals clock + */ + PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USART3; + PeriphClkInitStruct.Usart3ClockSelection = RCC_USART3CLKSOURCE_PCLK1; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) + { + Error_Handler(); + } + + /* USART3 clock enable */ + __HAL_RCC_USART3_CLK_ENABLE(); + + __HAL_RCC_GPIOD_CLK_ENABLE(); + /**USART3 GPIO Configuration + PD8 ------> USART3_TX + PD9 ------> USART3_RX + */ + GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF7_USART3; + HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); + + /* USART3 interrupt Init */ + HAL_NVIC_SetPriority(USART3_IRQn, 5, 0); + HAL_NVIC_EnableIRQ(USART3_IRQn); + /* USER CODE BEGIN USART3_MspInit 1 */ + + /* USER CODE END USART3_MspInit 1 */ + } } void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle) @@ -135,6 +204,26 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle) /* USER CODE END USART2_MspDeInit 1 */ } + else if(uartHandle->Instance==USART3) + { + /* USER CODE BEGIN USART3_MspDeInit 0 */ + + /* USER CODE END USART3_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_USART3_CLK_DISABLE(); + + /**USART3 GPIO Configuration + PD8 ------> USART3_TX + PD9 ------> USART3_RX + */ + HAL_GPIO_DeInit(GPIOD, GPIO_PIN_8|GPIO_PIN_9); + + /* USART3 interrupt Deinit */ + HAL_NVIC_DisableIRQ(USART3_IRQn); + /* USER CODE BEGIN USART3_MspDeInit 1 */ + + /* USER CODE END USART3_MspDeInit 1 */ + } } /* USER CODE BEGIN 1 */ diff --git a/stm_os_sampler.ioc b/stm_os_sampler.ioc index 3aac132..9e07b38 100644 --- a/stm_os_sampler.ioc +++ b/stm_os_sampler.ioc @@ -18,20 +18,23 @@ Mcu.IP2=NVIC Mcu.IP3=RCC Mcu.IP4=SYS Mcu.IP5=USART2 -Mcu.IPNb=6 +Mcu.IP6=USART3 +Mcu.IPNb=7 Mcu.Name=STM32F767ZITx Mcu.Package=LQFP144 Mcu.Pin0=PH0/OSC_IN Mcu.Pin1=PH1/OSC_OUT +Mcu.Pin10=VP_FREERTOS_VS_CMSIS_V2 +Mcu.Pin11=VP_SYS_VS_tim1 Mcu.Pin2=PA3 Mcu.Pin3=PB14 -Mcu.Pin4=PA13 -Mcu.Pin5=PA14 -Mcu.Pin6=PD5 -Mcu.Pin7=PB7 -Mcu.Pin8=VP_FREERTOS_VS_CMSIS_V2 -Mcu.Pin9=VP_SYS_VS_tim1 -Mcu.PinsNb=10 +Mcu.Pin4=PD8 +Mcu.Pin5=PD9 +Mcu.Pin6=PA13 +Mcu.Pin7=PA14 +Mcu.Pin8=PD5 +Mcu.Pin9=PB7 +Mcu.PinsNb=12 Mcu.ThirdPartyNb=0 Mcu.UserConstants= Mcu.UserName=STM32F767ZITx @@ -54,6 +57,7 @@ NVIC.TIM1_UP_TIM10_IRQn=true\:15\:0\:false\:false\:true\:false\:false\:true\:tru NVIC.TimeBase=TIM1_UP_TIM10_IRQn NVIC.TimeBaseIP=TIM1 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 NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false PA13.Mode=Serial_Wire PA13.Signal=SYS_JTMS-SWDIO @@ -80,6 +84,12 @@ PCC.Vdd=3.3 PD5.Locked=true PD5.Mode=Asynchronous PD5.Signal=USART2_TX +PD8.Locked=true +PD8.Mode=Asynchronous +PD8.Signal=USART3_TX +PD9.Locked=true +PD9.Mode=Asynchronous +PD9.Signal=USART3_RX PH0/OSC_IN.Mode=HSE-External-Oscillator PH0/OSC_IN.Signal=RCC_OSC_IN PH1/OSC_OUT.Mode=HSE-External-Oscillator @@ -188,6 +198,9 @@ RCC.VCOSAIOutputFreq_Value=864000000 USART2.BaudRate=9600 USART2.IPParameters=VirtualMode-Asynchronous,BaudRate USART2.VirtualMode-Asynchronous=VM_ASYNC +USART3.BaudRate=9600 +USART3.IPParameters=VirtualMode-Asynchronous,BaudRate +USART3.VirtualMode-Asynchronous=VM_ASYNC VP_FREERTOS_VS_CMSIS_V2.Mode=CMSIS_V2 VP_FREERTOS_VS_CMSIS_V2.Signal=FREERTOS_VS_CMSIS_V2 VP_SYS_VS_tim1.Mode=TIM1