diff --git a/components/drivers/serial/serial.c b/components/drivers/serial/serial.c index 7cb1c6b3396c3812fcb280d8181ba2b5b60a8218..a7f1bcfc08c3f85866fcb5806359e56bf454e510 100644 --- a/components/drivers/serial/serial.c +++ b/components/drivers/serial/serial.c @@ -603,8 +603,18 @@ static rt_err_t rt_serial_control(struct rt_device *dev, break; case RT_DEVICE_CTRL_CONFIG: - /* configure device */ - serial->ops->configure(serial, (struct serial_configure *)args); + if (args) + { + /* set serial configure */ + serial->config = *(struct serial_configure *)args; + + if (dev->ref_count) + { + /* serial device has been opened, to configure it */ + serial->ops->configure(serial, (struct serial_configure *)args); + } + } + break; default :