summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernard Xiong <[email protected]>2021-09-11 08:48:42 +0800
committerGitHub <[email protected]>2021-09-11 08:48:42 +0800
commit7c526cea93ce2d6e430b7c993ad65342d7b6f3c5 (patch)
tree657978e46078de3ac950f1a245584adc2236b88d
parent45440d2456e62bf223ff6df0bd8d9f92894f45b6 (diff)
parentfca920751761da33a58fb9565fea31f7099f826d (diff)
Merge pull request #5019 from Jackistang/master
serial: add CTS/RTS flowcontrol.
-rw-r--r--bsp/stm32/libraries/HAL_Drivers/drv_usart.c14
-rw-r--r--components/drivers/include/drivers/serial.h7
2 files changed, 19 insertions, 2 deletions
diff --git a/bsp/stm32/libraries/HAL_Drivers/drv_usart.c b/bsp/stm32/libraries/HAL_Drivers/drv_usart.c
index be8b50bba1..06c1d81dfd 100644
--- a/bsp/stm32/libraries/HAL_Drivers/drv_usart.c
+++ b/bsp/stm32/libraries/HAL_Drivers/drv_usart.c
@@ -107,10 +107,22 @@ static rt_err_t stm32_configure(struct rt_serial_device *serial, struct serial_c
uart = rt_container_of(serial, struct stm32_uart, serial);
uart->handle.Instance = uart->config->Instance;
uart->handle.Init.BaudRate = cfg->baud_rate;
- uart->handle.Init.HwFlowCtl = UART_HWCONTROL_NONE;
uart->handle.Init.Mode = UART_MODE_TX_RX;
uart->handle.Init.OverSampling = UART_OVERSAMPLING_16;
+ switch (cfg->flowcontrol)
+ {
+ case RT_SERIAL_FLOWCONTROL_NONE:
+ uart->handle.Init.HwFlowCtl = UART_HWCONTROL_NONE;
+ break;
+ case RT_SERIAL_FLOWCONTROL_CTSRTS:
+ uart->handle.Init.HwFlowCtl = UART_HWCONTROL_RTS_CTS;
+ break;
+ default:
+ uart->handle.Init.HwFlowCtl = UART_HWCONTROL_NONE;
+ break;
+ }
+
switch (cfg->data_bits)
{
case DATA_BITS_8:
diff --git a/components/drivers/include/drivers/serial.h b/components/drivers/include/drivers/serial.h
index c2e951e9b1..f0d0edbfad 100644
--- a/components/drivers/include/drivers/serial.h
+++ b/components/drivers/include/drivers/serial.h
@@ -77,6 +77,9 @@
#define RT_SERIAL_TX_DATAQUEUE_SIZE 2048
#define RT_SERIAL_TX_DATAQUEUE_LWM 30
+#define RT_SERIAL_FLOWCONTROL_CTSRTS 1
+#define RT_SERIAL_FLOWCONTROL_NONE 0
+
/* Default config for serial_configure structure */
#define RT_SERIAL_CONFIG_DEFAULT \
{ \
@@ -87,6 +90,7 @@
BIT_ORDER_LSB, /* LSB first sent */ \
NRZ_NORMAL, /* Normal mode */ \
RT_SERIAL_RB_BUFSZ, /* Buffer size */ \
+ RT_SERIAL_FLOWCONTROL_NONE, /* Off flowcontrol */ \
0 \
}
@@ -100,7 +104,8 @@ struct serial_configure
rt_uint32_t bit_order :1;
rt_uint32_t invert :1;
rt_uint32_t bufsz :16;
- rt_uint32_t reserved :6;
+ rt_uint32_t flowcontrol :1;
+ rt_uint32_t reserved :5;
};
/*