From e8b03043a51b8a8c19be54dba8ce4081213c5034 Mon Sep 17 00:00:00 2001 From: ryancw <1831931681@qq.com> Date: Fri, 7 Nov 2025 17:57:56 +0800 Subject: [PATCH] =?UTF-8?q?[=E4=BF=AE=E6=94=B9]=20=E4=B8=BAserial=5Fv2?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E5=A2=9E=E5=8A=A0=E6=96=B0=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E6=8F=8F=E8=BF=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../device/uart/uart_v2/figures/mcfg_dma.jpg | Bin 15246 -> 0 bytes .../device/uart/uart_v2/figures/mcfg_int.jpg | Bin 14767 -> 0 bytes .../uart/uart_v2/figures/mcfg_txdma_intrx.jpg | Bin 14885 -> 0 bytes .../uart_v2/figures/mcfg_txpoll_rxint.jpg | Bin 14433 -> 0 bytes .../device/uart/uart_v2/uart.md | 209 ++++++++++++------ 5 files changed, 140 insertions(+), 69 deletions(-) delete mode 100644 rt-thread-version/rt-thread-standard/programming-manual/device/uart/uart_v2/figures/mcfg_dma.jpg delete mode 100644 rt-thread-version/rt-thread-standard/programming-manual/device/uart/uart_v2/figures/mcfg_int.jpg delete mode 100644 rt-thread-version/rt-thread-standard/programming-manual/device/uart/uart_v2/figures/mcfg_txdma_intrx.jpg delete mode 100644 rt-thread-version/rt-thread-standard/programming-manual/device/uart/uart_v2/figures/mcfg_txpoll_rxint.jpg diff --git a/rt-thread-version/rt-thread-standard/programming-manual/device/uart/uart_v2/figures/mcfg_dma.jpg b/rt-thread-version/rt-thread-standard/programming-manual/device/uart/uart_v2/figures/mcfg_dma.jpg deleted file mode 100644 index 0776e193f1363771971808d8f0b66332b18a779f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15246 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 akRg6%oQ1nkH}z%@+yDFFJ=9$x*Zv39+H0`@ diff --git a/rt-thread-version/rt-thread-standard/programming-manual/device/uart/uart_v2/figures/mcfg_int.jpg b/rt-thread-version/rt-thread-standard/programming-manual/device/uart/uart_v2/figures/mcfg_int.jpg deleted file mode 100644 index 18ce4565bc5d126d6958aa2983ab3d29c9520d38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14767 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 diff --git a/rt-thread-version/rt-thread-standard/programming-manual/device/uart/uart_v2/uart.md b/rt-thread-version/rt-thread-standard/programming-manual/device/uart/uart_v2/uart.md index 418fa79..2e8f2f8 100644 --- a/rt-thread-version/rt-thread-standard/programming-manual/device/uart/uart_v2/uart.md +++ b/rt-thread-version/rt-thread-standard/programming-manual/device/uart/uart_v2/uart.md @@ -57,7 +57,7 @@ rt_device_t rt_device_find(const char* name); 一般情况下,注册到系统的串口设备名称为 uart0,uart1 等,使用示例如下所示: ```c -#define SAMPLE_UART_NAME "uart2" /* 串口设备名称 */ +#define SAMPLE_UART_NAME "uart1" /* 串口设备名称 */ static rt_device_t serial; /* 串口设备句柄 */ /* 查找串口设备 */ serial = rt_device_find(SAMPLE_UART_NAME); @@ -105,12 +105,8 @@ rt_device_open(dev, RT_DEVICE_FLAG_RX_NON_BLOCKING | RT_DEVICE_FLAG_TX_BLOCKING) > [!NOTE] > 注:为了避免 阻塞 / 非阻塞模式 和 轮询 / 中断 / DMA 模式 在文中描述上可能存在的误解,故本文以 应用层操作模式 指代 阻塞 / 非阻塞模式,以 硬件工作模式 指代 轮询 / 中断 / DMA 模式。 -而对于流模式 `RT_DEVICE_FLAG_STREAM`,主要是当串口外设作为控制台时才会使用,该模式用来解决用户回车换行的问题,在正常的串口外设通信场景中,该模式一般不会使用。 - > [!NOTE] -> 注:`RT_DEVICE_FLAG_STREAM` 流模式用于向串口终端输出字符串:当输出的字符是 `"\n"` (对应 16 进制值为 0x0A)时,自动在前面输出一个 `"\r"`(对应 16 进制值为 0x0D) 做分行。 - -流模式 RT_DEVICE_FLAG_STREAM 可以和接收发送模式参数使用或 “|” 运算符一起使用。 +> 注:`RT_DEVICE_FLAG_STREAM` 流模式用于向串口终端输出字符串:当输出的字符是 `"\n"` (对应 16 进制值为 0x0A)时,自动在前面输出一个 `"\r"`(对应 16 进制值为 0x0D) 做分行。在正常的串口外设通信场景中,该模式一般不会使用。 #### 硬件工作模式选择 @@ -129,71 +125,94 @@ rt_device_open(dev, RT_DEVICE_FLAG_RX_NON_BLOCKING | RT_DEVICE_FLAG_TX_BLOCKING) **发送端的模式对应关系如下表所示:** -| 编号 | 配置发送缓冲区(有 / 无)说明 | 硬件工作模式(TX) | 应用层操作模式(TX) | +| **硬件工作模式(TX)** | **应用层操作模式(TX)** | 配置发送缓冲区 | 是否生效 | | ---- | --------------------------------------- | ------------------ | -------------------- | -| (1) | **不使用缓存区,且设置缓存区长度为0** | 轮询 | 阻塞 | -| (2) | 不支持该模式 | 轮询 | 非阻塞 | -| (3) | 使用缓存区 | 中断 | 阻塞 | -| (4) | 使用缓存区 | 中断 | 非阻塞 | -| (5) | **不使用缓存区,但需要设置缓冲区长度大于0** | DMA | 阻塞 | -| (6) | 使用缓存区 | DMA | 非阻塞 | +| 轮询 | 阻塞 | 不使用缓存区,但需要设置**设置缓存区长度为0** | ✔ | +| 轮询 | 非阻塞 | ❌不支持该模式 | ❌ | +| 中断 | 阻塞 | 使用缓存区 | ✔ | +| 中断 | 非阻塞 | 使用缓存区 | ✔ | +| DMA | 阻塞 | 不使用缓存区,但需要设置**缓冲区长度大于0** | ✔ | +| DMA | 非阻塞 | 使用缓存区 | ✔ | -对于编号 (1) 模式,如果必须使用轮询模式时,一定要将缓冲区大小配置为 0,因为如果缓冲区大小不为 0,在应用层使用发送阻塞模式时,将会使用中断模式(如果开 DMA,则使用 DMA 模式)。 +当使用 **轮询 阻塞模式发送**时,一定要将**缓冲区大小配置为 0**,因为如果缓冲区大小不为 0,在应用层使用发送阻塞模式时,将会使用中断模式(如果开 DMA,则使用 DMA 模式)。 -对于编号 (5) 模式,当用户设置为 DMA 阻塞模式时,虽然设置了缓冲区不为 0,但是该缓冲区并不会进行初始化,而是直接进行 DMA 数据搬运。从而省去了内存搬运造成的性能下降的问题。需要注意的是,当使用 DMA 阻塞模式时,虽然不用缓冲区,但是也要将缓冲区长度设置为大于 0 的值,因为当缓冲区长度为 0 时,将会错误地使用轮询模式。 +当使用 **DMA 阻塞模式发送**时,虽然不用缓冲区,但是也要将**缓冲区长度设置为大于 0** 的值,因为当缓冲区长度为 0 时,将会错误地使用轮询模式。虽然设置了缓冲区不为 0,但是该缓冲区并不会进行初始化占用空间,而是直接进行 DMA 数据搬运。 **接收端的模式对应关系如下表所示:** -| 编号 | 配置接收缓冲区(有 / 无)说明 | 硬件工作模式(RX) | 应用层操作模式(RX) | +| **硬件工作模式(RX)** | **应用层操作模式(RX)** | 配置发送缓冲区 | 是否生效 | | ---- | ------------------------------------- | ------------------ | -------------------- | -| (1) | **不使用缓存区,且设置缓存区长度为0** | 轮询 | 阻塞 | -| (2) | 不支持该模式 | 轮询 | 非阻塞 | -| (3) | 使用缓存区 | 中断 | 阻塞 | -| (4) | 使用缓存区 | 中断 | 非阻塞 | -| (5) | 使用缓存区 | DMA | 阻塞 | -| (6) | 使用缓存区 | DMA | 非阻塞 | +| 轮询 | 阻塞 | 不使用缓存区,但需要设置**设置缓存区长度为0** | ✔ | +| 轮询 | 非阻塞 | ❌不支持该模式 | ❌ | +| 中断 | 阻塞 | 使用缓存区 | ✔ | +| 中断 | 非阻塞 | 使用缓存区 | ✔ | +| DMA | 阻塞 | 不使用缓存区,但需要设置**缓冲区长度大于0** | ✔ | +| DMA | 非阻塞 | 使用缓存区 | ✔ | -对于编号 (1) 模式,如果必须使用轮询模式时,一定要将缓冲区大小配置为 0,因为如果缓冲区大小不为 0,在应用层使用接收阻塞模式时,将会使用中断模式(如果开 DMA,则使用 DMA 模式)。 +当使用 **轮询 阻塞模式接收**时,一定要将**缓冲区大小配置为 0**,因为如果缓冲区大小不为 0,在应用层使用接收阻塞模式时,将会使用中断模式(如果开 DMA,则使用 DMA 模式)。 下面举例说明如何配置硬件工作模式: -##### 配置发送接收为 DMA 模式 - 在 menuconfig 中配置效果如下: -![menuconfig](figures/mcfg_dma.jpg) +##### 配置发送接收为 DMA 模式 -上图所示,对于 UART1 的配置为开启 DMA RX 和 DMA TX,且发送和接收缓存区大小设置为 1024 字节。 +```shell +Enable UART1 ---> + [*] Enable UART1 RX DMA (是否使能 RX DMA) + [*] Enable UART1 TX DMA (是否使能 TX DMA) + (64)Set UART1 RX DMA ping-pong buffer size (RX DMA 的乒乓缓冲区) + (128)Set UART1 RX buffer size (rx 缓冲区大小) + (128)Set UART1 TX buffer size (tx 缓冲区大小。TX DMA下无效但必须大于0,请参考上面介绍) +``` +如上所示,对于 UART1 的配置为开启 DMA RX 和 DMA TX,且发送和接收缓存区大小设置为 128 字节 由此用户在应用层对串口的接收和发送的操作模式进行配置时,无论配置阻塞或者非阻塞,均使用的是 DMA 模式。 -##### 配置发送接收为中断模式 -在 menuconfig 中配置效果如下: -![menuconfig](figures/mcfg_int.jpg) +##### 配置发送接收为中断模式 -上图所示,对于 UART1 的配置为关闭 DMA RX 和 DMA TX,且发送和接收缓存区大小设置为 1024 字节。 +```shell +Enable UART1 ---> + [ ] Enable UART1 RX DMA (是否使能 RX DMA) + [ ] Enable UART1 TX DMA (是否使能 TX DMA) + (128)Set UART1 RX buffer size (rx 缓冲区大小) + (128)Set UART1 TX buffer size (tx 缓冲区大小。TX DMA下无效但必须大于0,请参考上面介绍) +``` +如上所示,对于 UART1 的配置为开启 INT RX 和 INT TX,且发送和接收缓存区大小设置为 128 字节。 由此用户在应用层对串口的接收和发送的操作模式进行配置时,无论配置阻塞或者非阻塞,均使用的是中断模式。 -##### 配置发送 DMA 模式、接收中断模式 -在 menuconfig 中配置效果如下: -![menuconfig](figures/mcfg_txdma_intrx.jpg) +##### 配置发送 DMA 模式、接收中断模式 + +```shell +Enable UART1 ---> + [ ] Enable UART1 RX DMA (是否使能 RX DMA) + [*] Enable UART1 TX DMA (是否使能 TX DMA) + (128)Set UART1 RX buffer size (rx 缓冲区大小) + (128)Set UART1 TX buffer size (tx 缓冲区大小。TX DMA下无效但必须大于0,请参考上面介绍) +``` -上图所示,对于 UART1 的配置为关闭 DMA RX 和开启 DMA TX,且发送和接收缓存区大小设置为 1024 字节。 +如上所示,对于 UART1 的配置为开启 INT RX ,开启 DMA TX,且发送和接收缓存区大小设置为 128 字节。 由此用户在应用层对串口的接收和发送的操作模式进行配置时,无论配置阻塞或者非阻塞,均使用的是 DMA 发送模式和中断接收模式。 -##### 配置发送轮询模式、接收中断模式(串口控制台默认模式) -在 menuconfig 中配置效果如下: -![menuconfig](figures/mcfg_txpoll_rxint.jpg) +##### 配置发送轮询模式、接收中断模式(串口控制台默认模式) -上图所示,对于 UART1 的配置为关闭 DMA RX 和 DMA TX,接收缓存区大小设置为 1024 字节,但设置 `UART1 TX buffer size` 为 0。 +```shell +Enable UART1 ---> + [ ] Enable UART1 RX DMA (是否使能 RX DMA) + [ ] Enable UART1 TX DMA (是否使能 TX DMA) + (128)Set UART1 RX buffer size (rx 缓冲区大小) + ( 0 )Set UART1 TX buffer size (tx 缓冲区大小。TX DMA下无效但必须大于0,请参考上面介绍) +``` + +如上所示,对于 UART1 的配置为关闭 DMA RX 和 DMA TX,接收缓存区大小设置为 1024 字节,但设置 `UART1 TX buffer size` 为 0。 由此用户在应用层对串口的接收和发送的操作模式进行配置时,发送只能使用阻塞模式,接收可以使用阻塞和非阻塞模式。串口控制台默认使用这样的配置模式,且操作模式为阻塞发送和非阻塞接收。 @@ -217,20 +236,55 @@ rt_err_t rt_device_control(rt_device_t dev, rt_uint8_t cmd, void* arg); | -RT_ENOSYS | 执行失败,dev 为空 | | 其他错误码 | 执行失败 | +指示控制命令 cmd 当前支持的命令包括: + +```c +/* 更新串口配置 */ +#define RT_DEVICE_CTRL_CONFIG /* arg类型: (struct serial_configure *) */ + +/* 设置接收超时时间。在调用 rt_device_read 之前设置。在轮询模式下不支持 */ +#define RT_SERIAL_CTRL_SET_RX_TIMEOUT /* arg类型: (rt_int32_t *) */ + +/* 设置发送超时时间。在调用 rt_device_write 之前设置。在轮询模式下不支持 */ +#define RT_SERIAL_CTRL_SET_TX_TIMEOUT /* arg类型: (rt_int32_t *) */ + +/* 获取接收超时时间。在轮询模式下不支持 */ +#define RT_SERIAL_CTRL_GET_RX_TIMEOUT /* arg类型: (rt_int32_t *) */ + +/* 获取发送超时时间。在轮询模式下不支持 */ +#define RT_SERIAL_CTRL_GET_TX_TIMEOUT /* arg类型: (rt_int32_t *) */ + +/* 清空接收缓冲区,丢弃所有数据 */ +#define RT_SERIAL_CTRL_RX_FLUSH /* arg类型: (RT_NULL) */ + +/* 清空发送缓冲区,阻塞并等待缓冲区数据全部发送完成。在轮询模式下不支持 */ +#define RT_SERIAL_CTRL_TX_FLUSH /* arg类型: (RT_NULL) */ + +/* 获取未读字节数。在轮询模式下不支持 */ +#define RT_SERIAL_CTRL_GET_UNREAD_BYTES_COUNT /* arg类型: (rt_ssize_t *) */ + +/* 获取串口配置 */ +#define RT_SERIAL_CTRL_GET_CONFIG /* arg类型: (struct serial_configure *) */ +``` + 控制参数结构体 struct serial_configure 原型如下: ```c struct serial_configure { - rt_uint32_t baud_rate; /* 波特率 */ - rt_uint32_t data_bits :4; /* 数据位 */ - rt_uint32_t stop_bits :2; /* 停止位 */ - rt_uint32_t parity :2; /* 奇偶校验位 */ - rt_uint32_t bit_order :1; /* 高位在前或者低位在前 */ - rt_uint32_t invert :1; /* 模式 */ - rt_uint32_t rx_bufsz :16; /* 接收数据缓冲区大小 */ - rt_uint32_t tx_bufsz :16; /* 发送数据缓冲区大小 */ - rt_uint32_t reserved :4; /* 保留位 */ + rt_uint32_t baud_rate; /* 波特率 */ + rt_uint32_t data_bits :4; /* 数据位 */ + rt_uint32_t stop_bits :2; /* 停止位 */ + rt_uint32_t parity :2; /* 奇偶校验位 */ + rt_uint32_t bit_order :1; /* 高位在前或者低位在前 */ + rt_uint32_t invert :1; /* 模式 */ + rt_uint32_t rx_bufsz :16; /* 接收数据缓冲区大小 */ + rt_uint32_t tx_bufsz :16; /* 发送数据缓冲区大小 */ + rt_uint32_t flowcontrol :1; /* 流控模式 */ + rt_uint32_t reserved :5; /* 保留位 */ +#ifdef RT_SERIAL_USING_DMA + rt_uint32_t dma_ping_bufsz :16; /* rx dma的乒乓缓冲区 */ +#endif }; ``` @@ -271,6 +325,9 @@ RT-Thread 提供的配置参数可取值为如下宏定义: /* 模式可取值 */ #define NRZ_NORMAL 0 /* normal mode */ #define NRZ_INVERTED 1 /* inverted mode */ +/* 流控模式 */ +#define RT_SERIAL_FLOWCONTROL_CTSRTS 1 /* 硬件流控:使用 RTS/CTS 引脚 */ +#define RT_SERIAL_FLOWCONTROL_NONE 0 /* 无流控 */ #define RT_SERIAL_RX_MINBUFSZ 64 /* 限制接收缓冲区最小长度 */ #define RT_SERIAL_TX_MINBUFSZ 64 /* 限制发送缓冲区最小长度 */ @@ -280,22 +337,23 @@ RT-Thread 提供的默认串口配置如下,即 RT-Thread 系统中默认每 ```c /* Default config for serial_configure structure */ -#define RT_SERIAL_CONFIG_DEFAULT \ -{ \ - BAUD_RATE_115200, /* 115200 bits/s */ \ - DATA_BITS_8, /* 8 databits */ \ - STOP_BITS_1, /* 1 stopbit */ \ - PARITY_NONE, /* No parity */ \ - BIT_ORDER_LSB, /* LSB first sent */ \ - NRZ_NORMAL, /* Normal mode */ \ - RT_SERIAL_RX_MINBUFSZ, /* rxBuf size */ \ - RT_SERIAL_TX_MINBUFSZ, /* txBuf size */ \ - 0 \ +#define RT_SERIAL_CONFIG_DEFAULT \ +{ \ + BAUD_RATE_115200, /* 115200 bits/s */ \ + DATA_BITS_8, /* 8 databits */ \ + STOP_BITS_1, /* 1 stopbit */ \ + PARITY_NONE, /* No parity */ \ + BIT_ORDER_LSB, /* LSB first sent */ \ + NRZ_NORMAL, /* Normal mode */ \ + RT_SERIAL_RX_MINBUFSZ, /* rxBuf size */ \ + RT_SERIAL_TX_MINBUFSZ, /* txBuf size */ \ + RT_SERIAL_FLOWCONTROL_NONE, /* Off flowcontrol */ \ + 0, /* reserved */ \ } ``` > [!NOTE] -> 注:虽然默认串口配置设置了 rx_bufsz 和 tx_bufsz 的大小,但是其缓冲区具体长度会在底层驱动初始化时再次配置,这里无需关心其值。 +> 注:虽然默认串口配置设置了 rx_bufsz 和 tx_bufsz 的大小,但是其缓冲区具体长度会在底层驱动初始化时根据Kconfig再次配置,这里无需关心其值。 若实际使用串口的配置参数与默认配置参数不符,则用户可以通过应用代码进行修改。修改串口配置参数,如波特率、数据位、校验位、缓冲区接收 buffsize、停止位等的示例程序如下: @@ -347,19 +405,20 @@ rt_size_t rt_device_write(rt_device_t dev, rt_off_t pos, const void* buffer, rt_ #define SAMPLE_UART_NAME "uart2" /* 串口设备名称 */ static rt_device_t serial; /* 串口设备句柄 */ char str[] = "hello RT-Thread!\r\n"; -struct serial_configure config = RT_SERIAL_CONFIG_DEFAULT; /* 配置参数 */ + /* 查找串口设备 */ serial = rt_device_find(SAMPLE_UART_NAME); /* 以非阻塞接收和阻塞发送模式打开串口设备 */ rt_device_open(serial, RT_DEVICE_FLAG_RX_NON_BLOCKING | RT_DEVICE_FLAG_TX_BLOCKING); + /* 发送字符串 */ rt_device_write(serial, 0, str, (sizeof(str) - 1)); ``` ### 设置发送完成回调函数 -在应用程序调用 `rt_device_write()` 写入数据时,如果底层硬件能够支持自动发送,那么上层应用可以设置一个回调函数。这个回调函数会在底层硬件数据发送完成后 (例如 DMA 传送完成或 FIFO 已经写入完毕产生完成中断时) 调用。可以通过如下函数设置设备发送完成指示 : +在应用程序调用 `rt_device_write()` 写入数据时,如果底层硬件能够支持自动发送,那么上层应用可以设置一个回调函数。这个回调函数会在底层硬件数据发送完成后 (例如 DMA 传送完成或 FIFO 已经写入完毕产生完成中断时) 调用。仅推荐非阻塞模式下使用,可以通过如下函数设置设备发送完成指示 : ```c rt_err_t rt_device_set_tx_complete(rt_device_t dev, rt_err_t (*tx_done)(rt_device_t dev,void *buffer)); @@ -372,7 +431,7 @@ rt_err_t rt_device_set_tx_complete(rt_device_t dev, rt_err_t (*tx_done)(rt_devic | **返回** | —— | | RT_EOK | 设置成功 | -调用这个函数时,回调函数由调用者提供,当硬件设备发送完数据时,由设备驱动程序回调这个函数并把发送完成的数据块地址 buffer 作为参数传递给上层应用。上层应用(线程)在收到指示时会根据发送 buffer 的情况,释放 buffer 内存块或将其作为下一个写数据的缓存。 +调用这个函数时,回调函数由调用者提供,当硬件设备发送完数据时,由设备驱动程序回调这个函数并把发送完成的数据块地址 buffer (如果存在的话)作为参数传递给上层应用。 ### 设置接收回调函数 @@ -501,7 +560,7 @@ rt_err_t rt_device_close(rt_device_t dev); RT_DEVICE_FLAG_INT_TX RT_DEVICE_FLAG_DMA_RX RT_DEVICE_FLAG_DMA_TX - + // 新版本 oflags 的参数取值 RT_DEVICE_FLAG_RX_NON_BLOCKING RT_DEVICE_FLAG_RX_BLOCKING @@ -509,8 +568,13 @@ rt_err_t rt_device_close(rt_device_t dev); RT_DEVICE_FLAG_TX_BLOCKING ``` - **为了兼容旧版本的框架,使用新版本串口框架时旧版本的应用代码可直接使用,只需注意一点,旧版本的 oflags 参数不再起作用,默认使用新版本的操作模式: 接收非阻塞发送阻塞模式。** +* V2版本默认 `rt_device_read` 为阻塞读取,如果为了兼容V1框架的应用代码可通过下面方式进行修改。 + ```c + rt_int32_t rx_timeout = RT_WAITING_NO; + rt_device_control(client->device, RT_SERIAL_CTRL_SET_RX_TIMEOUT, (void *)&rx_timeout); + ``` + * 缓冲区宏定义区别 旧版本接收缓冲区统一为 `RT_SERIAL_RB_BUFSZ` ,旧版本没有发送缓冲区的设置。 @@ -534,7 +598,7 @@ rt_err_t rt_device_close(rt_device_t dev); struct serial_configure { rt_uint32_t baud_rate; - + rt_uint32_t data_bits :4; rt_uint32_t stop_bits :2; rt_uint32_t parity :2; @@ -543,12 +607,12 @@ rt_err_t rt_device_close(rt_device_t dev); rt_uint32_t bufsz :16; rt_uint32_t reserved :6; }; - + // 新版本 struct serial_configure { rt_uint32_t baud_rate; - + rt_uint32_t data_bits :4; rt_uint32_t stop_bits :2; rt_uint32_t parity :2; @@ -556,7 +620,12 @@ rt_err_t rt_device_close(rt_device_t dev); rt_uint32_t invert :1; rt_uint32_t rx_bufsz :16; rt_uint32_t tx_bufsz :16; - rt_uint32_t reserved :6; + rt_uint32_t flowcontrol :1; + rt_uint32_t reserved :5; + + #ifdef RT_SERIAL_USING_DMA + rt_uint32_t dma_ping_bufsz :16; + #endif }; ``` @@ -696,3 +765,5 @@ static int uart_dma_sample(int argc, char *argv[]) /* 导出到 msh 命令列表中 */ MSH_CMD_EXPORT(uart_dma_sample, uart device dma sample); ``` + +更多用法可参考 https://github.com/RT-Thread/rt-thread/tree/master/components/drivers/serial/utest/v2 -- Gitee