@@ -1070,16 +1070,46 @@ HRESULT Library_sys_io_ser_native_System_IO_Ports_SerialPort::NativeConfig___VOI
10701070 break ;
10711071
10721072 case SerialMode_RS485:
1073+
10731074#ifdef USART_CR3_DEM
1075+ // target has support for RS485 DE pin control
10741076 // Set Driver Enable Mode
10751077 palUart->Uart_cfg .cr3 |= USART_CR3_DEM;
1078+
10761079 // Set Driver Enable Polarity
1080+
1081+ #if defined(NF_SERIAL_RS485_DE_POLARITY_HIGH) || !defined(NF_SERIAL_RS485_DE_POLARITY_LOW)
1082+ // DEP is active high or not defined, therefore default is high, clear DEP bit
1083+ palUart->Uart_cfg .cr3 &= ~USART_CR3_DEP;
1084+ #elif defined(NF_SERIAL_RS485_DE_POLARITY_LOW)
1085+ // set DEP bit
10771086 palUart->Uart_cfg .cr3 |= USART_CR3_DEP;
1078- // Auto-RTS delay - set to maximum
1079- palUart->Uart_cfg .cr1 |= USART_CR1_DEDT;
1080- // Auto-RTS delay - set to maximum
1081- palUart->Uart_cfg .cr1 |= USART_CR1_DEAT;
1087+ #endif
1088+
1089+ // Auto-DE deassertion delay
1090+ // clear bits
1091+ palUart->Uart_cfg .cr1 &= ~USART_CR1_DEDT;
1092+
1093+ #if defined(NF_SERIAL_RS485_DE_DEASSERTION_DELAY)
1094+ palUart->Uart_cfg .cr1 |= NF_SERIAL_RS485_DE_DEASSERTION_DELAY;
1095+ #else
1096+ // set to default value, being 2 bit periods
1097+ palUart->Uart_cfg .cr1 |= USART_CR1_DEDT_1;
1098+ #endif
1099+
1100+ // Auto-DE assetion delay
1101+ // clear bits
1102+ palUart->Uart_cfg .cr1 &= ~USART_CR1_DEAT;
1103+
1104+ #if defined(NF_SERIAL_RS485_DE_ASSERTION_DELAY)
1105+ palUart->Uart_cfg .cr1 |= NF_SERIAL_RS485_DE_ASSERTION_DELAY;
1106+ #else
1107+ // set to default value, being 2 bit periods
1108+ palUart->Uart_cfg .cr1 |= USART_CR1_DEAT_1;
1109+ #endif
1110+
10821111#else
1112+ // target doesn't have support for RS485 DE pin control
10831113 NANOCLR_SET_AND_LEAVE (CLR_E_NOT_SUPPORTED);
10841114#endif
10851115 break ;
0 commit comments