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);