当前位置:网站首页>3.1 detailed explanation of rtthread serial port device (V1)

3.1 detailed explanation of rtthread serial port device (V1)

2022-07-06 03:25:00 rou252051452

1、 A serial port (UART) Equipment description

        rtthread adopt serial.c and serial.h Two files are used to manage serial port devices . adopt serial.h Structural body in rt_serial_device Define serial port equipment , The serial port device inherits from the device base class rt_device,rt_device Inherited from rt_object Base class , The inheritance relationship is as follows

         The serial port device realizes the function of rt_device Inheritance of device base class , The private member of the structure determines the relevant operations of the serial port 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、 Initialization and registration of serial port devices

         Start-up phase rtthread It will be based on whether RT_USING_SERIAL Definition , stay hw_board_init Function to initialize the serial port device , stay rt_hw_usart_init In function DMA And serial port related configuration parameters , Finally call the function rt_hw_serial_register To achieve STM32 Serial port device association and device mounting .

int rt_hw_usart_init(void)
{
    /*
         Calculate the number of serial port devices 
        1、drv_uasrt.c The document went on struct stm32_uart Type array uart_obj The definition of ,
             The number of arrays has macro definitions BSP_USING_UARTx It's the number of .
    */
    rt_size_t obj_num = sizeof(uart_obj) / sizeof(struct stm32_uart);
    /*
         Assign the default value to the configuration information ,115200-8-n-1
    */
    struct serial_configure config = RT_SERIAL_CONFIG_DEFAULT;
    rt_err_t result = 0;
    /*
         According to macro definition DMA Initialization of relevant configuration information 
    */
    stm32_uart_get_dma_config();
    /*
        Mount the corresponding serial port peripherals according to the number of serial ports 
    */
    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;
}

 

原网站

版权声明
本文为[rou252051452]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/187/202207060319451841.html