当前位置:网站首页>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;
}
边栏推荐
猜你喜欢

Quartz misfire missed and compensated execution

OCR文字识别方法综述

Image super-resolution using deep convolutional networks(SRCNN)解读与实现

Era5 reanalysis data download strategy

Game theory matlab

Web security SQL injection vulnerability (1)

MySQL Server层四个日志

1、工程新建

SAP ALV颜色代码对应颜色(整理)

Precautions for single chip microcomputer anti reverse connection circuit
随机推荐
Pointer written test questions ~ approaching Dachang
深入探究指针及指针类型
Web security SQL injection vulnerability (1)
Arabellacpc 2019 (supplementary question)
Map sorts according to the key value (ascending plus descending)
给新人工程师组员的建议
Remote Sensing Image Super-resolution and Object Detection: Benchmark and State of the Art
电机控制反Park变换和反Clarke变换公式推导
Erreur de la carte SD "erreur - 110 whilst initialisation de la carte SD
Crazy, thousands of netizens are exploding the company's salary
jsscript
八道超经典指针面试题(三千字详解)
Distributed service framework dobbo
Deno介绍
下一个行业风口:NFT 数字藏品,是机遇还是泡沫?
Redis cache breakdown, cache penetration, cache avalanche
ESBuild & SWC浅谈: 新一代构建工具
遥感图像超分辨重建综述
真机无法访问虚拟机的靶场,真机无法ping通虚拟机
Redo file corruption repair