RT Thread 串列埠裝置驅動

2021-06-03 16:43:20 字數 1656 閱讀 6507

檔名   serial.c

驅動介面

1. 註冊裝置

2. 初始化裝置

3. 開啟裝置

4. 關閉裝置

5. 讀操作

6. 寫操作

1. 註冊裝置

rt_err_t rt_hw_serial_register(rt_device_t device, const char* name, rt_uint32_t flag, struct stm32_serial_device *serial)

device->type  = rt_device_class_char;

device->rx_indicate = rt_null;

device->tx_complete = rt_null;

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;

device->user_data= serial;

/* register a character device */

return rt_device_register(device, name, rt_device_flag_rdwr | flag);

}2.初始化裝置

static rt_err_t rt_serial_init (rt_device_t dev)

3.開啟裝置

static rt_err_t rt_serial_open(rt_device_t dev, rt_uint16_t oflag)

4.關閉裝置

static rt_err_t rt_serial_close(rt_device_t dev)

5.讀操作

static rt_size_t rt_serial_read (rt_device_t dev, rt_off_t pos, void* buffer, rt_size_t size)}}

6.寫操作

static rt_size_t rt_serial_write (rt_device_t dev, rt_off_t pos, const void* buffer, rt_size_t size)

/* polling mode */

if (dev->flag & rt_device_flag_stream)

while (!(uart->uart_device->sr & usart_flag_txe));  //注:  等待上乙個資料傳送完畢,通過檢查狀態暫存器的txe實現

uart->uart_device->dr = (*ptr & 0x1ff);                          //將要傳送的資料寫入dr暫存器,實現傳送  

++ptr; --size;}}

附:stm32庫中串列埠傳送資料的**

void usart_senddata(usart_typedef* usartx, uint16_t data)

可見,向串列埠傳送資料(寫操作),主要是向dr寫資料。

RT Thread串列埠驅動分析 一

筆記 2016年12月9日10 19 00 串列埠配置在drivers rt hw uart.c rt hw uart init rt hw serial register 這裡可以設定串列埠的工作模式,中斷接收還有dma傳送.具體設定在rt serial init 函式裡 分析下串列埠初始化 是怎...

rt thread 串列埠裝置的配置流程

板級硬體初始化 系統定時器初始化 系統排程器初始化 建立初始化執行緒 元件初始化 定時器執行緒初始化 空閒執行緒初始化 系統排程器工作 串列埠裝置配置函式中遍歷要使用的串列埠裝置,做一些工作引數配置和裝置介面實現並註冊裝置 但在此不初始化裝置或不使能裝置 具體配置過程 1.註冊串列埠裝置,以便 fi...

RT thread 裝置驅動元件之PIN裝置

在rt thread 2.0.0正式版中引入了pin裝置作為雜類裝置,其裝置驅動檔案pin.c在rt thread 2.0.1 components drivers misc中,主要用於操作晶元gpio,如點亮led,按鍵等。同時對於相應的晶元平台,需要自行編寫底層gpio驅動,如gpio.c。本文...