rt-thread下 和 的区别和作用

Drivers–配置函数–【drv_usart.c】

涉及更多硬件信息,为配置服务

    #define USART3_TX_PIN                    GPIO_PIN_10
    #define USART3_TX_GPIO_PORT              GPIOB
    #define USART3_TX_AF                     GPIO_AF7_USART3
    #define USART3_RX_PIN                    GPIO_PIN_11
    #define USART3_RX_GPIO_PORT              GPIOB
    #define USART3_RX_AF                     GPIO_AF7_USART3

    #define USART3_RX_DMA_CHANNEL            DMA1_Channel3
    #define USART3_RX_DMA_REUQEST            DMA_REQUEST_2
    #define USART3_RX_DMA_IRQN               DMA1_Channel3_IRQn
    #define USART3_RX_DMA_IRQHandler         DMA1_Channel3_IRQHandler

DeviceDrivers–操作函数–【serial.c】

定义device下ops的动作函数,
定义 rt_hw_serial_register,将动作函数加入到设备中。

    device->init        = rt_serial_init;
    device->open        = rt_serial_open;
    device->close       = rt_serial_close;
    device->read        = rt_serial_read;
    device->write       = rt_serial_write;
    device->control     = rt_serial_control;

外部函数列举–串口

  • Drivers
    drv_usart.h
int stm32_hw_usart_init(void);

  • DeviceDrivers
    serial.h
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;

/**
 * uart operators
 */
struct rt_uart_ops
{
    rt_err_t (*configure)(struct rt_serial_device *serial, struct serial_configure *cfg);
    rt_err_t (*control)(struct rt_serial_device *serial, int cmd, void *arg);

    int (*putc)(struct rt_serial_device *serial, char c);
    int (*getc)(struct rt_serial_device *serial);

    rt_size_t (*dma_transmit)(struct rt_serial_device *serial, rt_uint8_t *buf, rt_size_t size, int direction);
};

void rt_hw_serial_isr(struct rt_serial_device *serial, int event);

rt_err_t rt_hw_serial_register(struct rt_serial_device *serial,
                               const char              *name,
                               rt_uint32_t              flag,
                               void                    *data);

你可能感兴趣的:(rt-thread)