From 80728f171cce6dfbfd982a5b43de597e3a8d9a6e Mon Sep 17 00:00:00 2001 From: unicod Date: Sat, 14 Feb 2026 13:45:47 +0100 Subject: [PATCH] USART3 enabled with RS485 DE - 115200 baud - Rx: PB1 - Tx: PB10 - DE: PB14 --- Core/Src/main.c | 73 ++++++++++++++++++++++++++++++++++++++++++-- DigitalAudioH533.ioc | 64 ++++++++++++++++++++++++++------------ 2 files changed, 115 insertions(+), 22 deletions(-) diff --git a/Core/Src/main.c b/Core/Src/main.c index 6961e43..66403b0 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -58,6 +58,7 @@ static void MX_ICACHE_Init(void); static void MX_TIM5_Init(void); static void MX_TIM2_Init(void); static void MX_UART5_Init(void); +static void MX_USART3_UART_Init(void); /* USER CODE BEGIN PFP */ /* USER CODE END PFP */ @@ -140,6 +141,7 @@ int main(void) MX_TIM5_Init(); MX_TIM2_Init(); MX_UART5_Init(); + MX_USART3_UART_Init(); /* USER CODE BEGIN 2 */ LL_TIM_GenerateEvent_UPDATE(TIM2); LL_TIM_EnableCounter(TIM2); @@ -172,7 +174,6 @@ int main(void) if (TickChk(&Tick1secRef, 1000)) { // execute every 1s LD2_Toggle(); static uint8_t cnt = 0; - DispPutDigit(1, 'a'+cnt, 1); DispPutDigit(2, 'A'+cnt, 0); cnt = (cnt + 1) % 16; static uint32_t Trefus = 0; @@ -180,6 +181,7 @@ int main(void) uint32_t tdif = t - Trefus; printf("%6luus\n", tdif); Trefus = t; + LL_USART_TransmitData8(USART3, 'A' + cnt); // direct send without buffer and interrupt } static uint32_t Tick100msRef = 0; @@ -189,6 +191,11 @@ int main(void) DispPutDigit(3, ' ', dot); } + if (LL_USART_IsActiveFlag_RXNE_RXFNE(USART3)) { // check if data received + char rxch = LL_USART_ReceiveData8(USART3); // direct receive without buffer and interrupt + DispPutDigit(1, rxch, 1); + } + int16_t ch = Uart5_GetByte(); if (ch != -1) { // if data received char c = ch; @@ -441,6 +448,68 @@ static void MX_UART5_Init(void) } +/** + * @brief USART3 Initialization Function + * @param None + * @retval None + */ +static void MX_USART3_UART_Init(void) +{ + + /* USER CODE BEGIN USART3_Init 0 */ + + /* USER CODE END USART3_Init 0 */ + + LL_USART_InitTypeDef USART_InitStruct = {0}; + + LL_GPIO_InitTypeDef GPIO_InitStruct = {0}; + + LL_RCC_SetUSARTClockSource(LL_RCC_USART3_CLKSOURCE_PCLK1); + + /* Peripheral clock enable */ + LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_USART3); + + LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOB); + /**USART3 GPIO Configuration + PB1 ------> USART3_RX + PB10 ------> USART3_TX + PB14 ------> USART3_DE + */ + GPIO_InitStruct.Pin = LL_GPIO_PIN_1|LL_GPIO_PIN_10|LL_GPIO_PIN_14; + GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE; + GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH; + GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL; + GPIO_InitStruct.Pull = LL_GPIO_PULL_NO; + GPIO_InitStruct.Alternate = LL_GPIO_AF_7; + LL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + /* USER CODE BEGIN USART3_Init 1 */ + + /* USER CODE END USART3_Init 1 */ + USART_InitStruct.PrescalerValue = LL_USART_PRESCALER_DIV1; + USART_InitStruct.BaudRate = 115200; + USART_InitStruct.DataWidth = LL_USART_DATAWIDTH_8B; + USART_InitStruct.StopBits = LL_USART_STOPBITS_1; + USART_InitStruct.Parity = LL_USART_PARITY_NONE; + USART_InitStruct.TransferDirection = LL_USART_DIRECTION_TX_RX; + USART_InitStruct.HardwareFlowControl = LL_USART_HWCONTROL_NONE; + USART_InitStruct.OverSampling = LL_USART_OVERSAMPLING_16; + LL_USART_Init(USART3, &USART_InitStruct); + LL_USART_SetTXFIFOThreshold(USART3, LL_USART_FIFOTHRESHOLD_1_8); + LL_USART_SetRXFIFOThreshold(USART3, LL_USART_FIFOTHRESHOLD_1_8); + LL_USART_EnableDEMode(USART3); + LL_USART_SetDESignalPolarity(USART3, LL_USART_DE_POLARITY_HIGH); + LL_USART_SetDEAssertionTime(USART3, 0); + LL_USART_SetDEDeassertionTime(USART3, 0); + LL_USART_DisableFIFO(USART3); + LL_USART_ConfigAsyncMode(USART3); + LL_USART_Enable(USART3); + /* USER CODE BEGIN USART3_Init 2 */ + + /* USER CODE END USART3_Init 2 */ + +} + /** * @brief GPIO Initialization Function * @param None @@ -456,9 +525,9 @@ static void MX_GPIO_Init(void) /* GPIO Ports Clock Enable */ LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOC); LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOH); + LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOB); LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOA); LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOD); - LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOB); /**/ LL_GPIO_ResetOutputPin(GPIOC, SHR_CLK_Pin|SHR_STR_Pin); diff --git a/DigitalAudioH533.ioc b/DigitalAudioH533.ioc index ffbf152..1b1f8db 100644 --- a/DigitalAudioH533.ioc +++ b/DigitalAudioH533.ioc @@ -48,6 +48,7 @@ Mcu.IP0=BOOTPATH Mcu.IP1=CORTEX_M33_NS Mcu.IP10=TIM5 Mcu.IP11=UART5 +Mcu.IP12=USART3 Mcu.IP2=DEBUG Mcu.IP3=ICACHE Mcu.IP4=MEMORYMAP @@ -56,29 +57,32 @@ Mcu.IP6=PWR Mcu.IP7=RCC Mcu.IP8=SYS Mcu.IP9=TIM2 -Mcu.IPNb=12 +Mcu.IPNb=13 Mcu.Name=STM32H533RETx Mcu.Package=LQFP64 Mcu.Pin0=PC14-OSC32_IN(OSC32_IN) Mcu.Pin1=PC15-OSC32_OUT(OSC32_OUT) -Mcu.Pin10=VP_CORTEX_M33_NS_VS_Hclk -Mcu.Pin11=VP_ICACHE_VS_ICACHE -Mcu.Pin12=VP_PWR_VS_SECSignals -Mcu.Pin13=VP_PWR_VS_LPOM -Mcu.Pin14=VP_SYS_VS_Systick -Mcu.Pin15=VP_TIM2_VS_ClockSourceINT -Mcu.Pin16=VP_TIM5_VS_ClockSourceINT -Mcu.Pin17=VP_BOOTPATH_VS_BOOTPATH -Mcu.Pin18=VP_MEMORYMAP_VS_MEMORYMAP +Mcu.Pin10=PC12 +Mcu.Pin11=PD2 +Mcu.Pin12=PB8 +Mcu.Pin13=VP_CORTEX_M33_NS_VS_Hclk +Mcu.Pin14=VP_ICACHE_VS_ICACHE +Mcu.Pin15=VP_PWR_VS_SECSignals +Mcu.Pin16=VP_PWR_VS_LPOM +Mcu.Pin17=VP_SYS_VS_Systick +Mcu.Pin18=VP_TIM2_VS_ClockSourceINT +Mcu.Pin19=VP_TIM5_VS_ClockSourceINT Mcu.Pin2=PH0-OSC_IN(PH0) +Mcu.Pin20=VP_BOOTPATH_VS_BOOTPATH +Mcu.Pin21=VP_MEMORYMAP_VS_MEMORYMAP Mcu.Pin3=PH1-OSC_OUT(PH1) -Mcu.Pin4=PA13(JTMS/SWDIO) -Mcu.Pin5=PA14(JTCK/SWCLK) -Mcu.Pin6=PC11 -Mcu.Pin7=PC12 -Mcu.Pin8=PD2 -Mcu.Pin9=PB8 -Mcu.PinsNb=19 +Mcu.Pin4=PB1 +Mcu.Pin5=PB10 +Mcu.Pin6=PB14 +Mcu.Pin7=PA13(JTMS/SWDIO) +Mcu.Pin8=PA14(JTCK/SWCLK) +Mcu.Pin9=PC11 +Mcu.PinsNb=22 Mcu.ThirdPartyNb=0 Mcu.UserConstants= Mcu.UserName=STM32H533RETx @@ -100,6 +104,19 @@ PA13(JTMS/SWDIO).Mode=Serial_Wire PA13(JTMS/SWDIO).Signal=DEBUG_JTMS-SWDIO PA14(JTCK/SWCLK).Mode=Serial_Wire PA14(JTCK/SWCLK).Signal=DEBUG_JTCK-SWCLK +PB1.GPIOParameters=GPIO_Speed +PB1.GPIO_Speed=GPIO_SPEED_FREQ_HIGH +PB1.Locked=true +PB1.Mode=Asynchronous +PB1.Signal=USART3_RX +PB10.GPIOParameters=GPIO_Speed +PB10.GPIO_Speed=GPIO_SPEED_FREQ_HIGH +PB10.Mode=Asynchronous +PB10.Signal=USART3_TX +PB14.GPIOParameters=GPIO_Speed +PB14.GPIO_Speed=GPIO_SPEED_FREQ_HIGH +PB14.Mode=Hardware Flow Control (RS485) +PB14.Signal=USART3_DE PB8.GPIOParameters=GPIO_Label PB8.GPIO_Label=SHR_DOUT_DISP PB8.Locked=true @@ -112,13 +129,15 @@ PC11.Signal=GPIO_Output PC12.Locked=true PC12.Mode=Asynchronous PC12.Signal=UART5_TX -PC14-OSC32_IN(OSC32_IN).GPIOParameters=GPIO_Label +PC14-OSC32_IN(OSC32_IN).GPIOParameters=GPIO_Label,PinAttribute PC14-OSC32_IN(OSC32_IN).GPIO_Label=SHR_CLK PC14-OSC32_IN(OSC32_IN).Locked=true +PC14-OSC32_IN(OSC32_IN).PinAttribute=Free PC14-OSC32_IN(OSC32_IN).Signal=GPIO_Output -PC15-OSC32_OUT(OSC32_OUT).GPIOParameters=GPIO_Label +PC15-OSC32_OUT(OSC32_OUT).GPIOParameters=GPIO_Label,PinAttribute PC15-OSC32_OUT(OSC32_OUT).GPIO_Label=SHR_STR PC15-OSC32_OUT(OSC32_OUT).Locked=true +PC15-OSC32_OUT(OSC32_OUT).PinAttribute=Free PC15-OSC32_OUT(OSC32_OUT).Signal=GPIO_Output PCC.Checker=false PCC.Line=STM32H5x3 @@ -167,7 +186,7 @@ ProjectManager.ToolChainLocation= ProjectManager.UAScriptAfterPath= ProjectManager.UAScriptBeforePath= ProjectManager.UnderRoot=true -ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-LL-false,2-MX_GPIO_Init-GPIO-false-LL-true,3-MX_ICACHE_Init-ICACHE-false-LL-true,4-MX_TIM5_Init-TIM5-false-LL-true,5-MX_TIM2_Init-TIM2-false-LL-true,6-MX_UART5_Init-UART5-false-LL-true,0-MX_CORTEX_M33_NS_Init-CORTEX_M33_NS-false-LL-true,0-MX_PWR_Init-PWR-false-LL-true +ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-LL-false,2-MX_GPIO_Init-GPIO-false-LL-true,3-MX_ICACHE_Init-ICACHE-false-LL-true,4-MX_TIM5_Init-TIM5-false-LL-true,5-MX_TIM2_Init-TIM2-false-LL-true,6-MX_UART5_Init-UART5-false-LL-true,7-MX_USART3_UART_Init-USART3-false-LL-true,0-MX_CORTEX_M33_NS_Init-CORTEX_M33_NS-false-LL-true,0-MX_PWR_Init-PWR-false-LL-true RCC.ADCFreq_Value=80000000 RCC.AHBFreq_Value=80000000 RCC.APB1Freq_Value=80000000 @@ -249,6 +268,11 @@ TIM2.IPParameters=Prescaler TIM2.Prescaler=39999 TIM5.IPParameters=Prescaler TIM5.Prescaler=79 +USART3.BaudRate=115200 +USART3.IPParameters=VirtualMode-Asynchronous,VirtualMode-Hardware Flow Control (RS485),BaudRate,OverSampling +USART3.OverSampling=UART_OVERSAMPLING_16 +USART3.VirtualMode-Asynchronous=VM_ASYNC +USART3.VirtualMode-Hardware\ Flow\ Control\ (RS485)=VM_ASYNC VP_BOOTPATH_VS_BOOTPATH.Mode=BP_Activate VP_BOOTPATH_VS_BOOTPATH.Signal=BOOTPATH_VS_BOOTPATH VP_CORTEX_M33_NS_VS_Hclk.Mode=Hclk_Mode