3.1 rtthread 串口设备(V1)详解

本文详细介绍了RT-Thread操作系统如何通过serial.c和serial.h管理串口设备,包括串口设备的结构体定义、继承关系以及初始化和注册过程。在启动阶段,通过rt_hw_usart_init函数配置串口设备,并使用rt_hw_serial_register进行设备挂载,确保STM32串口设备的正确关联。
摘要由CSDN通过智能技术生成

1、串口(UART)设备说明

        rtthread通过serial.c和serial.h两个文件进行串口设备的管理。通过serial.h中的结构体rt_serial_device进行串口设备的定义,串口设备继承自设备基类rt_device,rt_device继承自rt_object基类,继承关系如下

         串口设备通过结构体的定义实现了对rt_device设备基类的继承,结构体的私有成员据定了串口设备的相关操作。

struct rt_serial_device
{
    struct rt_device          parent;

    const struct rt_uart_ops *ops;
    struct serial_configure   config;

    void *serial_rx;
    void *serial_tx;
};
typedef struct rt_serial_device rt_serial_t;

2、串口设备的初始化及注册

        启动阶段rtthread会根据是否进行了RT_USING_SERIAL定义,在hw_board_init函数中进行串口设备的初始化,在rt_hw_usart_init函数中进行DMA和串口的相关配置参数,最终调用函数rt_hw_serial_register来实现STM32的串口设备的关联及设备的挂载。

int rt_hw_usart_init(void)
{
    /*
        进行串口设备数量计算
        1、drv_uasrt.c文件进行了struct stm32_uart类型数组uart_obj的定义,
            数组的个数有宏定义BSP_USING_UARTx的数量决定。
    */
    rt_size_t obj_num = sizeof(uart_obj) / sizeof(struct stm32_uart);
    /*
        配置信息进行默认值赋值,115200-8-n-1
    */
    struct serial_configure config = RT_SERIAL_CONFIG_DEFAULT;
    rt_err_t result = 0;
    /*
        根据宏定义进行DMA的相关配置信息初始化
    */
    stm32_uart_get_dma_config();
    /*
       根据串口数量进行相应串口外设的挂载
    */
    for (int i = 0; i < obj_num; i++)
    {
        uart_obj[i].config = &uart_config[i];
        uart_obj[i].serial.ops    = &stm32_uart_ops;
        uart_obj[i].serial.config = config;
        /* register UART device */
        result = rt_hw_serial_register(&uart_obj[i].serial, uart_obj[i].config->name,
                                       RT_DEVICE_FLAG_RDWR
                                       | RT_DEVICE_FLAG_INT_RX
                                       | RT_DEVICE_FLAG_INT_TX
                                       | uart_obj[i].uart_dma_flag
                                       , NULL);
        RT_ASSERT(result == RT_EOK);
    }
    return result;
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值