From 730b17f0320bc15e331483443867d7d27c91444a Mon Sep 17 00:00:00 2001 From: murmur Date: Mon, 16 Dec 2024 23:27:12 +0800 Subject: [PATCH] update cfg of uart3 for host --- Core/Inc/main.h | 2 ++ Core/Inc/stm32f1xx_it.h | 1 + Core/Inc/usart.h | 3 ++ Core/Src/gpio.c | 35 +++++++++--------- Core/Src/main.c | 13 ++++++- Core/Src/stm32f1xx_it.c | 15 ++++++++ Core/Src/usart.c | 80 +++++++++++++++++++++++++++++++++++++++++ f1CTL.ioc | 41 ++++++++++++++------- 8 files changed, 158 insertions(+), 32 deletions(-) diff --git a/Core/Inc/main.h b/Core/Inc/main.h index 1d5ac61..e50431d 100644 --- a/Core/Inc/main.h +++ b/Core/Inc/main.h @@ -67,6 +67,8 @@ void Error_Handler(void); #define NET_RST_GPIO_Port GPIOD #define NET_CS_Pin GPIO_PIN_10 #define NET_CS_GPIO_Port GPIOD +#define HOST_485EN_Pin GPIO_PIN_12 +#define HOST_485EN_GPIO_Port GPIOD /* USER CODE BEGIN Private defines */ diff --git a/Core/Inc/stm32f1xx_it.h b/Core/Inc/stm32f1xx_it.h index b82d7f3..e602ea5 100644 --- a/Core/Inc/stm32f1xx_it.h +++ b/Core/Inc/stm32f1xx_it.h @@ -59,6 +59,7 @@ void DMA1_Channel4_IRQHandler(void); void DMA1_Channel5_IRQHandler(void); void USART1_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 c54411d..4280d40 100644 --- a/Core/Inc/usart.h +++ b/Core/Inc/usart.h @@ -36,12 +36,15 @@ extern UART_HandleTypeDef huart1; extern UART_HandleTypeDef huart2; +extern UART_HandleTypeDef huart3; + /* USER CODE BEGIN Private defines */ /* USER CODE END Private defines */ void MX_USART1_UART_Init(void); void MX_USART2_UART_Init(void); +void MX_USART3_UART_Init(void); /* USER CODE BEGIN Prototypes */ diff --git a/Core/Src/gpio.c b/Core/Src/gpio.c index c13b02f..b421f07 100644 --- a/Core/Src/gpio.c +++ b/Core/Src/gpio.c @@ -62,6 +62,9 @@ void MX_GPIO_Init(void) /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(GPIOD, NET_RST_Pin|NET_CS_Pin, GPIO_PIN_SET); + /*Configure GPIO pin Output Level */ + HAL_GPIO_WritePin(HOST_485EN_GPIO_Port, HOST_485EN_Pin, GPIO_PIN_RESET); + /*Configure GPIO pins : PE2 PE3 PE4 PE5 PE6 PE7 PE8 PE9 PE10 PE11 PE12 PE13 @@ -100,14 +103,12 @@ void MX_GPIO_Init(void) GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(DIR2_GPIO_Port, &GPIO_InitStruct); - /*Configure GPIO pins : PB0 PB1 PB2 PB10 - PB11 PB12 PB3 PB4 - PB5 PB6 PB7 PB8 - PB9 */ - GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_10 - |GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_3|GPIO_PIN_4 - |GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8 - |GPIO_PIN_9; + /*Configure GPIO pins : PB0 PB1 PB2 PB12 + PB3 PB4 PB5 PB6 + PB7 PB8 PB9 */ + GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_12 + |GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6 + |GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); @@ -124,21 +125,19 @@ void MX_GPIO_Init(void) GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(NET_INT_GPIO_Port, &GPIO_InitStruct); - /*Configure GPIO pins : NET_RST_Pin NET_CS_Pin */ - GPIO_InitStruct.Pin = NET_RST_Pin|NET_CS_Pin; + /*Configure GPIO pins : NET_RST_Pin NET_CS_Pin HOST_485EN_Pin */ + GPIO_InitStruct.Pin = NET_RST_Pin|NET_CS_Pin|HOST_485EN_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); - /*Configure GPIO pins : PD11 PD12 PD13 PD14 - PD15 PD0 PD1 PD2 - PD3 PD4 PD5 PD6 - PD7 */ - GPIO_InitStruct.Pin = GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14 - |GPIO_PIN_15|GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2 - |GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6 - |GPIO_PIN_7; + /*Configure GPIO pins : PD11 PD13 PD14 PD15 + PD0 PD1 PD2 PD3 + PD4 PD5 PD6 PD7 */ + GPIO_InitStruct.Pin = GPIO_PIN_11|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15 + |GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3 + |GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); diff --git a/Core/Src/main.c b/Core/Src/main.c index 53aa946..654ae72 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -28,6 +28,7 @@ #include "w5500_init.h" // #include "http_test.h" #include "http_server.h" +#include "protocol.h" /* USER CODE END Includes */ /* Private typedef -----------------------------------------------------------*/ @@ -54,7 +55,13 @@ /* Private function prototypes -----------------------------------------------*/ void SystemClock_Config(void); /* USER CODE BEGIN PFP */ - +void transDataToHost(uint8_t *data, uint16_t len) +{ + // 开启uart3 dma + HAL_GPIO_WritePin(HOST_485EN_GPIO_Port, HOST_485EN_Pin, GPIO_PIN_SET); + HAL_UART_Transmit(&huart3, data, len, 1000); + HAL_GPIO_WritePin(HOST_485EN_GPIO_Port, HOST_485EN_Pin, GPIO_PIN_RESET); +} /* USER CODE END PFP */ /* Private user code ---------------------------------------------------------*/ @@ -95,6 +102,7 @@ int main(void) MX_USART1_UART_Init(); MX_USART2_UART_Init(); MX_SPI2_Init(); + MX_USART3_UART_Init(); /* USER CODE BEGIN 2 */ if(W5500_Init() != 0) { while(1) @@ -111,6 +119,8 @@ int main(void) // http_test_request(); HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); printf("Init success!\r\n"); + // transDataToHost("hello", 5); + runPumpDemo(); /* USER CODE END 2 */ /* Infinite loop */ @@ -121,6 +131,7 @@ int main(void) /* USER CODE BEGIN 3 */ http_server_task(); + // transDataToHost("hello\r\n", 7); // HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); // HAL_Delay(100); } diff --git a/Core/Src/stm32f1xx_it.c b/Core/Src/stm32f1xx_it.c index 33c0310..eb20716 100644 --- a/Core/Src/stm32f1xx_it.c +++ b/Core/Src/stm32f1xx_it.c @@ -59,6 +59,7 @@ extern DMA_HandleTypeDef hdma_usart1_rx; extern DMA_HandleTypeDef hdma_usart1_tx; extern UART_HandleTypeDef huart1; extern UART_HandleTypeDef huart2; +extern UART_HandleTypeDef huart3; /* USER CODE BEGIN EV */ /* USER CODE END EV */ @@ -257,6 +258,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 5518f08..5d217b1 100644 --- a/Core/Src/usart.c +++ b/Core/Src/usart.c @@ -26,6 +26,7 @@ UART_HandleTypeDef huart1; UART_HandleTypeDef huart2; +UART_HandleTypeDef huart3; DMA_HandleTypeDef hdma_usart1_rx; DMA_HandleTypeDef hdma_usart1_tx; @@ -86,6 +87,35 @@ 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 = 115200; + 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; + 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) @@ -185,6 +215,36 @@ 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 */ + /* USART3 clock enable */ + __HAL_RCC_USART3_CLK_ENABLE(); + + __HAL_RCC_GPIOB_CLK_ENABLE(); + /**USART3 GPIO Configuration + PB10 ------> USART3_TX + PB11 ------> USART3_RX + */ + GPIO_InitStruct.Pin = GPIO_PIN_10; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_11; + GPIO_InitStruct.Mode = GPIO_MODE_INPUT; + GPIO_InitStruct.Pull = GPIO_NOPULL; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + /* USART3 interrupt Init */ + HAL_NVIC_SetPriority(USART3_IRQn, 0, 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) @@ -234,6 +294,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 + PB10 ------> USART3_TX + PB11 ------> USART3_RX + */ + HAL_GPIO_DeInit(GPIOB, GPIO_PIN_10|GPIO_PIN_11); + + /* 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/f1CTL.ioc b/f1CTL.ioc index 08f2ddd..6e4da79 100644 --- a/f1CTL.ioc +++ b/f1CTL.ioc @@ -35,27 +35,31 @@ Mcu.IP3=SPI2 Mcu.IP4=SYS Mcu.IP5=USART1 Mcu.IP6=USART2 -Mcu.IPNb=7 +Mcu.IP7=USART3 +Mcu.IPNb=8 Mcu.Name=STM32F103V(C-D-E)Tx Mcu.Package=LQFP100 Mcu.Pin0=OSC_IN Mcu.Pin1=OSC_OUT -Mcu.Pin10=PD9 -Mcu.Pin11=PD10 -Mcu.Pin12=PA9 -Mcu.Pin13=PA10 -Mcu.Pin14=PA13 -Mcu.Pin15=PA14 -Mcu.Pin16=VP_SYS_VS_Systick +Mcu.Pin10=PB15 +Mcu.Pin11=PD8 +Mcu.Pin12=PD9 +Mcu.Pin13=PD10 +Mcu.Pin14=PD12 +Mcu.Pin15=PA9 +Mcu.Pin16=PA10 +Mcu.Pin17=PA13 +Mcu.Pin18=PA14 +Mcu.Pin19=VP_SYS_VS_Systick Mcu.Pin2=PA1 Mcu.Pin3=PA2 Mcu.Pin4=PA3 Mcu.Pin5=PE15 -Mcu.Pin6=PB13 -Mcu.Pin7=PB14 -Mcu.Pin8=PB15 -Mcu.Pin9=PD8 -Mcu.PinsNb=17 +Mcu.Pin6=PB10 +Mcu.Pin7=PB11 +Mcu.Pin8=PB13 +Mcu.Pin9=PB14 +Mcu.PinsNb=20 Mcu.ThirdPartyNb=0 Mcu.UserConstants= Mcu.UserName=STM32F103VCTx @@ -75,6 +79,7 @@ NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:true\:false\:true\:false NVIC.USART1_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true NVIC.USART2_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true +NVIC.USART3_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false OSC_IN.Mode=HSE-External-Oscillator OSC_IN.Signal=RCC_OSC_IN @@ -96,6 +101,10 @@ PA3.Mode=Asynchronous PA3.Signal=USART2_RX PA9.Mode=Asynchronous PA9.Signal=USART1_TX +PB10.Mode=Asynchronous +PB10.Signal=USART3_TX +PB11.Mode=Asynchronous +PB11.Signal=USART3_RX PB13.Mode=Full_Duplex_Master PB13.Signal=SPI2_SCK PB14.Mode=Full_Duplex_Master @@ -107,6 +116,10 @@ PD10.GPIO_Label=NET_CS PD10.Locked=true PD10.PinState=GPIO_PIN_SET PD10.Signal=GPIO_Output +PD12.GPIOParameters=GPIO_Label +PD12.GPIO_Label=HOST_485EN +PD12.Locked=true +PD12.Signal=GPIO_Output PD8.GPIOParameters=GPIO_Label PD8.GPIO_Label=NET_INT PD8.Locked=true @@ -187,6 +200,8 @@ USART1.IPParameters=VirtualMode USART1.VirtualMode=VM_ASYNC USART2.IPParameters=VirtualMode USART2.VirtualMode=VM_ASYNC +USART3.IPParameters=VirtualMode +USART3.VirtualMode=VM_ASYNC VP_SYS_VS_Systick.Mode=SysTick VP_SYS_VS_Systick.Signal=SYS_VS_Systick board=custom