![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=1739302814-C82svAfFfKjfNDltQn8kF6i1rG7KXj1c-0-4a53e95bbadb0d1b85ca7a979642b04d)
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=1739302814-2o1ciXlqhsWZzXk60hQKTVwMtXAgQcav-0-1d29a85fdc2bb2d499a3916a7047f292)
其中,flag参数支持下列取值(可以采用“按位或”的方式支持多种操作):
![](https://epubservercos.yuewen.com/8B2CE7/25929799901480006/epubprivate/OEBPS/Images/43_03.jpg?sign=1739302814-pL5nSs6UTcBmcWwzjEmQLCKo65tMZu3S-0-27680c6bfe2d2369cb6900f930677011)
注意: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=1739302814-y9jp85qIPMwhWpjIulCqJUZv9Ex3HhCj-0-069da1184057d45c25320be517b1b510)
![](https://epubservercos.yuewen.com/8B2CE7/25929799901480006/epubprivate/OEBPS/Images/44_01.jpg?sign=1739302814-e54z9GN2o3aarCh8wHlb6UpcvCITVtMJ-0-bc5a262ba08036f4d63f552bb30217d2)
在示例代码中,因为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进行修饰。