精品国产一区在线_av无码中文字幕无码王_天海翼三点刺激高潮不停_好硬好大好爽视频_欧美高清一区三区在线专区_香蕉黄色片

程序小白
認證:優質創作者
所在專題目錄 查看專題
單片機應用與驅動開發之路:這時的你只需要扣動扳機。
RT-Thread驅動之路:stm32設備驅動開發之uart注冊①
RT-Thread驅動之路:stm32設備驅動開發之uart設備創建②
RT-Thread驅動之路:stm32設備驅動開發之uart操作方法③
RT-Thread驅動之路:stm32設備驅動開發之uart中斷處理④
RT-Thread驅動之路:stm32設備驅動開發之淺析注冊機制⑤
作者動態 更多
基于stm32采用PWM驅動伺服控制器學習筆記
05-13 15:25
基于STM32驅動TM1638學習筆記——軟件篇
04-19 12:42
基于TM1638驅動8位數碼管設計分享
02-24 11:26
RT-Thread驅動之路: Studio創建FAL分區⑤
01-02 08:30
RT-Thread驅動之路: Studio 掛載通用SPI flash④
2024-12-23 13:41

RT-Thread驅動之路:stm32設備驅動開發之uart設備創建②


      開篇分割線:我們再寫驅動程序的目的是能夠注冊到系統的框架之中,那么就在創建設備之初你的設備結構體(C++中叫類)必須從系統提供的結構中進行派生出新的結構體,根據自己的設備類型定義私有數據域,

      MCU一般會有多個串口,所以串口驅動也需要支持多個串口的配置,設備結構體更應該以數組的形式出現,config信息就代表了真實的硬件有多少個固定的串口,并通過數組一次性默認配置好,至于是不是要啟用,可以通過預定義宏的方式進行開關:


      有了uart設備對象以后,我們還有需要能夠操作對象的方法(C++中的類就集成了這一部分),C語言中可以通過函數指針的方式來實現操作方法的結構體存儲:

/**
 * 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);
};

      上面定義的是函數原型的指針:后續需要我們根據stm32實現具體的方法來賦值給對應的原形,這里先說下每個函數的作用該實現怎樣的功能,后續你才好去寫這部分功能。

configure方法:用于配置串口的波特率、數據位、校驗位、停止位等參數。

control方法:用于控制串口。

putc方法:用于串口向外發送字符數據。

getc方法:用于串口獲取接收外部的字符數據。

transmit方法:用于數據發送側重于多個字節的數據發送。

      你是否發現了一個很奇怪的參數,就是這些操作方法的第一個輸入參數是系統提供的serial的結構體,按理說這里的ops需要進行最底層的硬件操作及數據收發,那為什么會是serial,而不是uart呢,其實這源于這些操作函數的調用方,假如應用和驅動不是分離的,那么應用可以很簡單的知道底層的驅動是哪個uart,但實際上應用和驅動是隔離開的,應用需要通過一個名稱來獲取串口的句柄,而串口的句柄只能來自于系統的定義,也就是serial對象,但是我們實際上需要的是uart,那么這里提前引入一個轉換,由成員對象找到派生對象的操作,不得不說C語言的強大,詳細的分析會放到configure函數的實現上來講:

/**
 * rt_container_of - return the member address of ptr, if the type of ptr is the
 * struct type.
 */
#define rt_container_of(ptr, type, member) \
    ((type *)((char *)(ptr) - (unsigned long)(&((type *)0)->member)))
聲明:本內容為作者獨立觀點,不代表電子星球立場。未經允許不得轉載。授權事宜與稿件投訴,請聯系:editor@netbroad.com
覺得內容不錯的朋友,別忘了一鍵三連哦!
贊 5
收藏 6
關注 153
成為作者 賺取收益
全部留言
0/200
成為第一個和作者交流的人吧
主站蜘蛛池模板: 欧美第24页草草影院 | 超碰在线超碰 | 秋霞鲁丝片一区二区三区 | 久久久久久com| 日本女人性淫视频 | 青青草免费在线视频播放 | 日本aⅴ在线 | 中文字幕亚洲天堂 | 香蕉久久影院 | 欧美久久a| 短裙公车被直接进入被c视频在线 | 婷婷色色狠狠爱 | 性高潮久久久久 | 欧洲女人牲交视频免费 | 人成午夜大片免费视频 | 国产区精品一区二区不卡中文 | 亚洲国产精品免费观看 | chinese7o丰满vies 大地资源好看在线 | 97超碰人摸人人人澡 | 在线播放五十路乱中文 | 末日逃生在线观看完整免费版 | 粉嫩一区二区三区国产精品 | 欧美整片在线 | 国产精品123 | 无码人妻少妇久久中文字幕蜜桃 | 国产女人叫床高潮视频在线观看 | 久久岛国电影免费观看软件 | 少妇被粗大的猛烈进出免费视频 | 大地资源网高清在线观看 | 久久高清一区二区 | 亚洲一区二区三区无码国产 | 欧美日本一区二区三区在线观看 | 男女污污的视频 | 特高潮vibeosexhd| jk啊灬好深啊灬轻一点灬 | 伊人久久精品欧洲综合网 | 亚洲精品视频自拍 | 成人av电影在线播放 | 色婷婷色综合激情国产日韩 | 国产69精品一区二区亚洲孕妇 | 337P大胆啪啪私拍人体 |