![RT-Thread设备驱动开发指南](https://wfqqreader-1252317822.image.myqcloud.com/cover/260/46670260/b_46670260.jpg)
上QQ阅读APP看书,第一时间看更新
2.4 注册UART设备
UART设备的操作方法实现后需要注册设备到操作系统,注册UART设备的rt_hw_serial_register接口如下所示:
![](https://epubservercos.yuewen.com/8B2CE7/25929799901480006/epubprivate/OEBPS/Images/43_01.jpg?sign=1738908200-Qp23xLuaO2eh2jLPb4gk3rsORV894Dsr-0-c4f4f83224133b0b498adcb4c8ae98f4)
rt_hw_serial_register接口的参数及返回值如表2-6所示。
表2-6 rt_hw_serial_register接口的参数及返回值
![](https://epubservercos.yuewen.com/8B2CE7/25929799901480006/epubprivate/OEBPS/Images/43_02.jpg?sign=1738908200-98HM4wFXV6q83sZ1pnzckOzprqHztf6H-0-0ca8ff66c8a3786c938f7e0bacc9835e)
其中,flag参数支持下列取值(可以采用“按位或”的方式支持多种操作):
![](https://epubservercos.yuewen.com/8B2CE7/25929799901480006/epubprivate/OEBPS/Images/43_03.jpg?sign=1738908200-c30ceRMFhImkcx6DthN7QY757ms6TV8l-0-dda58e94f98a5364fef9178d91f65fd3)
注意:RT_DEVICE_FLAG_STREAM流模式主要是当串口外设作为控制台时才会使用,该模式用来解决用户回车换行的问题,在正常的串口外设通信场景中一般不会使用该模式。
在注册UART设备之前,需要根据struct rt_uart_ops的定义创建一个全局的ops结构体变量stm32_uart_ops。stm32_uart_ops将在注册UART设备时赋值给UART设备的ops参数。在STM32中注册设备的代码如下所示。
![](https://epubservercos.yuewen.com/8B2CE7/25929799901480006/epubprivate/OEBPS/Images/43_04.jpg?sign=1738908200-WUhaYGcbwtve9RDVrnYJDPAEpJOr7MGe-0-b270a0a9dfe6f6a4970422cfbb9940fa)
![](https://epubservercos.yuewen.com/8B2CE7/25929799901480006/epubprivate/OEBPS/Images/44_01.jpg?sign=1738908200-aHkN54BJmMtl06XRRSSSMFmBaNQbSW3U-0-5b1dd2495a740ed5cdfec6c49acf489a)
在示例代码中,因为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进行修饰。