- RT-Thread设备驱动开发指南
- 杨洁 郭占鑫等
- 463字
- 2025-02-18 04:12:46
2.4 注册UART设备
UART设备的操作方法实现后需要注册设备到操作系统,注册UART设备的rt_hw_serial_register接口如下所示:

rt_hw_serial_register接口的参数及返回值如表2-6所示。
表2-6 rt_hw_serial_register接口的参数及返回值

其中,flag参数支持下列取值(可以采用“按位或”的方式支持多种操作):

注意:RT_DEVICE_FLAG_STREAM流模式主要是当串口外设作为控制台时才会使用,该模式用来解决用户回车换行的问题,在正常的串口外设通信场景中一般不会使用该模式。
在注册UART设备之前,需要根据struct rt_uart_ops的定义创建一个全局的ops结构体变量stm32_uart_ops。stm32_uart_ops将在注册UART设备时赋值给UART设备的ops参数。在STM32中注册设备的代码如下所示。


在示例代码中,因为STM32串口驱动只实现了中断接收、DMA接收及轮询发送的模式,所以注册设备时flag参数取值为RT_DEVICE_FLAG_RDWR、RT_DEVICE_FLAG_INT_RX、RT_DEVICE_FLAG_DMA_RX,表示串口设置支持读写、中断接收及DMA接收模式,轮询发送模式不需要置标志位。
stm32_uart_ops中的stm32_configure是操作方法对应的函数名,即函数指针,函数需要按照rt_uart_ops结构中的configure原型实现,并赋值给各个相应的成员,剩余其他操作方法的函数也一样。操作方法的名称可以自定义,但不要脱离实际意义,并且需要遵循代码规范。所有的操作方法的函数都属于内部函数,在函数实现时,需要使用static进行修饰。