日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

winUSB設(shè)備的開發(fā)方法

RTThread物聯(lián)網(wǎng)操作系統(tǒng) ? 來源:未知 ? 2022-12-14 20:10 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1、winUSB功能介紹

winUSB設(shè)備在win10系統(tǒng)下自帶驅(qū)動(dòng)程序的,winUSB設(shè)備連接到USB后,可以直接被系統(tǒng)識別,無需安裝驅(qū)動(dòng),實(shí)現(xiàn)了免驅(qū)的功能。就像鍵盤、鼠標(biāo)插入到電腦上直接使用一下。

winUSB設(shè)備使用BULK傳輸,具有傳輸數(shù)據(jù)量的優(yōu)點(diǎn),設(shè)備使用BULK IN, BULK OUT,CONTROL3個(gè)端點(diǎn)來進(jìn)行通信。因此winUSB設(shè)備在開發(fā)USB產(chǎn)品時(shí)是一個(gè)很好的選擇。

2、winUSB軟件選型

winUSB軟件采用RT thread操作系統(tǒng)自帶的USB device協(xié)議中 Winusb類驅(qū)動(dòng),此協(xié)議棧已經(jīng)實(shí)現(xiàn)了USB的基本功能,具體代碼可以參考分享倉庫地址:GitHub - longtengmcu/USB-HOST-driver-4G-rndis-device: STM32F429 USB HOST driver 4G rndis device, Realization of high speed Ethernet data communication。

1程序在STM32中運(yùn)行USB連接到WIN10電腦后是可以直接枚舉到的,但是具體進(jìn)行數(shù)據(jù)通信時(shí)要做軟件上的修改。
2其中對于winUSB部分代碼做了改進(jìn):

對于winUSB的read部分函數(shù):修改成讀取剩余部分的數(shù)據(jù),這樣在USB主機(jī)發(fā)送一包數(shù)據(jù)后就會立即觸發(fā)接收回調(diào)函數(shù)來處理數(shù)據(jù),原來的寫法是接收到輸入緩沖區(qū)長度的數(shù)據(jù)后才什么觸發(fā)接收回調(diào)函數(shù)。

d6566716-7ba4-11ed-8abf-dac502259ad0.png

對winusb設(shè)備端點(diǎn)IN處理流程中增加對發(fā)送整最大包數(shù)長度數(shù)據(jù)的處理,即這種情況下發(fā)送一個(gè)ZLP,0長度包,讓主機(jī)知道這次傳輸完成。

d6754776-7ba4-11ed-8abf-dac502259ad0.png

到這里,winUSB的驅(qū)動(dòng)部分已經(jīng)改好了。但是要做USB進(jìn)行通信還有很多代碼要寫。

3、winUSB應(yīng)用程序的編寫

winUSB設(shè)備在RT THREAD操作系統(tǒng)中注冊成winUSB設(shè)備,所以對winUSB的讀寫要使用設(shè)備操作的幾個(gè)函數(shù)rt_device_find, rt_device_open, rt_device_read, rt_device_write。感覺跟其他設(shè)備一樣,但是在實(shí)際調(diào)試過程中由于底層是USB設(shè)備,用法還是有不少區(qū)別的,應(yīng)用時(shí)要做很多特殊的處理。

3.1 winUSB設(shè)備的初始化

1初始化時(shí)跟基他設(shè)備類型,find,open,注意除了注冊接收回調(diào)函數(shù)外還要注冊發(fā)送回調(diào)函數(shù)。最后必須先調(diào)用一下rt_device_read()給winUSB設(shè)備接收數(shù)據(jù)時(shí)傳入接收數(shù)據(jù)使用的緩沖區(qū),同時(shí)啟動(dòng)USB設(shè)備接收。
 1/*findandopencommanddevice*/
 2dev_name=“winUSB”
 3client->device=rt_device_find(dev_name);
 4if(client->device)
 5{
 6/*usingthetxinterruptwhenuartisRS485*/
 7open_result=rt_device_open(client->device,RT_DEVICE_OFLAG_RDWR);
 8RT_ASSERT(open_result==RT_EOK);
 9rt_device_set_tx_complete(client->device,utc_d_tx_ind);
10rt_device_set_rx_indicate(client->device,utc_d_rx_ind);
11client->putc_package=client->utcA_package;
12/*waitreadthewinusbdevicesuccess*/
13while(rt_device_read(client->device,0,client->putc_package,sizeof(client->utcA_package))==0)
14{
15rt_thread_mdelay(10);
16}
17}
18else
19{
20LOG_E("Notfindthedevice(%s).",dev_name);
21result=-RT_ERROR;
22}

		
1接收回調(diào)函數(shù),USB設(shè)備接收到數(shù)據(jù)后,發(fā)送一個(gè)信號量給接收數(shù)據(jù)的線程通知數(shù)據(jù)處理。這個(gè)接收回調(diào)函數(shù)中使用雙緩沖區(qū),讓接收數(shù)據(jù)與處理數(shù)據(jù)互不干擾。

		
 1staticrt_err_tutc_d_rx_ind(rt_device_tdev,rt_size_tsize)
 2{
 3utc_d_client_tclient=&utc_d_client;
 4if(client->package_len)
 5{
 6LOG_W("utcpackageoverwrite!");
 7}
 8client->package_len=size;
 9if(client->putc_package==client->utcA_package)
10{
11client->putc_package=client->utcB_package;
12}
13else
14{
15client->putc_package=client->utcA_package;
16}
17/*readtheusbdatanext*/
18rt_device_read(dev,0,client->putc_package,sizeof(client->utcA_package));
19if(size)
20{
21/*releasethesem*/
22rt_sem_release(client->rx_notice);
23}
24returnRT_EOK;
25}

		

		
1發(fā)送回調(diào)函數(shù),usb設(shè)備發(fā)送成功后會調(diào)用發(fā)送回調(diào)函數(shù),發(fā)送一個(gè)信號量,通知發(fā)送函數(shù)已經(jīng)成功完成發(fā)送,這個(gè)功能非常重要,否則,USB設(shè)備無法正常工作。

		
1staticrt_err_tutc_d_tx_ind(rt_device_tdev,void*buffer)
2{
3utc_d_client_tclient=&utc_d_client;
4rt_sem_release(client->tx_notice);
5returnRT_EOK;
6}

		
1usb設(shè)備發(fā)送函數(shù)通過rt_device_write函數(shù)把數(shù)據(jù)發(fā)送給usb設(shè)備驅(qū)動(dòng)后,一定要等待發(fā)送完成才行。

			
 1staticintutc_d_send(utc_d_client_tclient,rt_uint8_t*send_data,rt_uint32_tsend_len)
 2{
 3/*sendthepacketcounter*/
 4client->send_packet_counter++;
 5if(rt_device_write(client->device,0,send_data,send_len)==send_len)
 6{
 7/*Mustwaittheusbsenddatafinish*/
 8returnrt_sem_take(client->tx_notice,RT_WAITING_FOREVER);
 9}
10else
11{
12return-RT_ERROR;
13}
14}

			
1至此,winUSB設(shè)備的應(yīng)用程序基本功能就全部實(shí)現(xiàn),你可以基于此來進(jìn)行與上位機(jī)的數(shù)據(jù)通信了。
2下期預(yù)告,winUSB的調(diào)試環(huán)境搭建與調(diào)試方法。

			

winUSB設(shè)備上位機(jī)驅(qū)動(dòng)開發(fā)環(huán)境的搭建:

https://club.rt-thread.org/ask/article/691e79f4e05eb0fc.html(請復(fù)制至外部瀏覽器打開)

版權(quán)聲明:本文為RT-Thread論壇用戶「fhqmcu」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。

原文鏈接:

https://club.rt-thread.org/ask/article/691e79f4e05eb0fc.html


RT-Thread開發(fā)者大會

我們將聯(lián)合重量級合作伙伴,圍繞AIoT的發(fā)展、產(chǎn)業(yè)技術(shù)趨勢,聚焦控制、連接、行業(yè)應(yīng)用開發(fā),通過主題演講、技術(shù)分享、應(yīng)用演示等環(huán)節(jié),助力開發(fā)者探索萬物智能的世界,期待與大家一起相聚線上直播間!

現(xiàn)在掃碼報(bào)名 我們將在報(bào)名者中抽取“幸運(yùn)參會者100名” 贈送RT-Thread新款開發(fā)板(即將揭秘)

d6952e38-7ba4-11ed-8abf-dac502259ad0.png

本次將在大會當(dāng)天在直播間宣布中獎(jiǎng)名單

更多獎(jiǎng)品即將來襲...

原文標(biāo)題:winUSB設(shè)備的開發(fā)方法

文章出處:【微信公眾號:RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • RT-Thread
    +關(guān)注

    關(guān)注

    32

    文章

    1644

    瀏覽量

    45273

原文標(biāo)題:winUSB設(shè)備的開發(fā)方法

文章出處:【微信號:RTThread,微信公眾號:RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    航空電子設(shè)備覆冰測試有哪些方法?需要用到哪些設(shè)備?怎么測試?

    航空電子設(shè)備覆冰測試是一種在實(shí)驗(yàn)室或特定環(huán)境中模擬航空電子設(shè)備在覆冰條件下的運(yùn)行狀態(tài)的測試方法。這種測試的目的是評估航空電子設(shè)備在遭受冰雪覆蓋時(shí)的性能表現(xiàn),確保其能夠在極端天氣條件下正
    的頭像 發(fā)表于 04-16 15:18 ?180次閱讀
    航空電子<b class='flag-5'>設(shè)備</b>覆冰測試有哪些<b class='flag-5'>方法</b>?需要用到哪些<b class='flag-5'>設(shè)備</b>?怎么測試?

    減少變頻器諧波對其它設(shè)備影響的方法

    變頻器作為現(xiàn)代工業(yè)中廣泛應(yīng)用的電力電子設(shè)備,其產(chǎn)生的諧波問題已成為影響電能質(zhì)量和設(shè)備安全運(yùn)行的重要挑戰(zhàn)。諧波會導(dǎo)致電網(wǎng)電壓畸變、設(shè)備過熱、繼電保護(hù)誤動(dòng)作等一系列問題,如何有效抑制變頻器諧波對其它
    的頭像 發(fā)表于 03-12 16:56 ?374次閱讀

    報(bào)名開啟!2026年開源鴻蒙“北向應(yīng)用”與“南向設(shè)備開發(fā)研修班等你加入!

    為深化校企合作,推動(dòng)開源鴻蒙(OpenHarmony)技術(shù)發(fā)展,促進(jìn)高校教師掌握開源鴻蒙北向應(yīng)用開發(fā)和南向設(shè)備開發(fā)的前沿技術(shù)與教學(xué)實(shí)踐方法,提升“雙師型”教師隊(duì)伍建設(shè)水平,由高校畢業(yè)生
    的頭像 發(fā)表于 01-08 17:24 ?1459次閱讀
    報(bào)名開啟!2026年開源鴻蒙“北向應(yīng)用”與“南向<b class='flag-5'>設(shè)備</b>”<b class='flag-5'>開發(fā)</b>研修班等你加入!

    速通攻略 | RK3588開發(fā)板U-Boot階段的存儲設(shè)備文件讀取方法

    控制器、多規(guī)格USB接口等,為存儲設(shè)備調(diào)試筑牢硬件根基。有了這樣強(qiáng)大的硬件支撐,在實(shí)際的開發(fā)調(diào)試與系統(tǒng)驗(yàn)證過程中,對各類存儲設(shè)備文件內(nèi)容的讀取操作就顯得尤為重要。
    的頭像 發(fā)表于 12-12 08:03 ?1160次閱讀
    速通攻略 | RK3588<b class='flag-5'>開發(fā)</b>板U-Boot階段的存儲<b class='flag-5'>設(shè)備</b>文件讀取<b class='flag-5'>方法</b>

    【免費(fèi)送書】成為硬核Linux開發(fā)者:《Linux 設(shè)備驅(qū)動(dòng)開發(fā)(第 2 版)》

    Linux系統(tǒng)的設(shè)備驅(qū)動(dòng)開發(fā),一直給人門檻較高的印象,主要因內(nèi)核機(jī)制抽象、需深度理解硬件原理、開發(fā)調(diào)試難度大所致。2021年,一本講解驅(qū)動(dòng)開發(fā)的專著問世即獲市場青睞,暢銷近萬冊——這便
    的頭像 發(fā)表于 11-18 08:06 ?1873次閱讀
    【免費(fèi)送書】成為硬核Linux<b class='flag-5'>開發(fā)</b>者:《Linux <b class='flag-5'>設(shè)備</b>驅(qū)動(dòng)<b class='flag-5'>開發(fā)</b>(第 2 版)》

    pcm設(shè)備故障及處理方法

    。接下來,我將結(jié)合具體案例,詳細(xì)剖析PCM設(shè)備常見故障的表現(xiàn)、原因及處理方法,幫助大家在面對設(shè)備故障時(shí)能夠迅速“破案”,恢復(fù)通信。 廣州郵科PCM復(fù)接設(shè)備 一、信號全無:線路與接口的“
    的頭像 發(fā)表于 11-10 10:35 ?1294次閱讀
    pcm<b class='flag-5'>設(shè)備</b>故障及處理<b class='flag-5'>方法</b>

    Windows下解決OpenOCD找不到設(shè)備及串口無法識別的方法

    。 但有些時(shí)候,Windows系統(tǒng)并不能自動(dòng)安裝正確的串口驅(qū)動(dòng),進(jìn)而影響到IDE的程序燒寫和串口連接功能。另外,有些用戶使用PlatformIO IDE進(jìn)行開發(fā)也遇到相似問題,經(jīng)實(shí)驗(yàn),可嘗試用下述方法予以
    發(fā)表于 10-20 11:25

    條碼掃碼設(shè)備的使用方法

    使用方法,能讓其充分發(fā)揮價(jià)值,為各行業(yè)的規(guī)范化管理提供有力支撐。一、條碼掃碼設(shè)備的主要類型不同場景對條碼掃碼設(shè)備的需求存在差異,目前主流類型可分為四類,適配不同工作
    的頭像 發(fā)表于 09-17 16:15 ?1182次閱讀
    條碼掃碼<b class='flag-5'>設(shè)備</b>的使用<b class='flag-5'>方法</b>

    分享---簡單快速實(shí)現(xiàn)烘烤設(shè)備UI界面的方法

    本文分享下,如何簡單快速的設(shè)計(jì)出工業(yè)烘烤設(shè)備的UI界面方法, 借助 \"墨刀\" 界面原型設(shè)計(jì)工具,設(shè)計(jì)烘烤機(jī)主界面圖片。 使用拓普微 SGTools開發(fā)工具,建立工程和頁面
    發(fā)表于 08-26 11:58

    知識分享 | 敏捷方法在基于模型的軟件開發(fā)項(xiàng)目中的應(yīng)用

    傳統(tǒng)的瀑布式軟件開發(fā)流程存在諸多局限,這使得應(yīng)用敏捷原則變得尤為重要,尤其是面對復(fù)雜且不斷變化的開發(fā)環(huán)境時(shí)。作為最高效的軟件開發(fā)方法之一,基于模型的
    的頭像 發(fā)表于 07-16 16:52 ?1446次閱讀
    知識分享 | 敏捷<b class='flag-5'>方法</b>在基于模型的軟件<b class='flag-5'>開發(fā)</b>項(xiàng)目中的應(yīng)用

    Linux系統(tǒng)查看及修改設(shè)備型號信息,觸覺智能RK3562開發(fā)板演示

    本文介紹Linux系統(tǒng)如何查看及修改設(shè)備型號信息的方法,適用于想查看設(shè)備型號信息或者想將設(shè)備型號信息修改為自己項(xiàng)目的名稱的情況。觸覺智能RK3562
    的頭像 發(fā)表于 06-19 15:58 ?1235次閱讀
    Linux系統(tǒng)查看及修改<b class='flag-5'>設(shè)備</b>型號信息,觸覺智能RK3562<b class='flag-5'>開發(fā)</b>板演示

    波峰焊設(shè)備的維護(hù)和保養(yǎng)方法

    能延長設(shè)備使用壽命,還能降低故障發(fā)生率,確保生產(chǎn)順利進(jìn)行。以下從設(shè)備各主要組成部分出發(fā),結(jié)合晉力達(dá)波峰焊的優(yōu)勢,詳細(xì)介紹波峰焊設(shè)備的維護(hù)和保養(yǎng)方法。
    的頭像 發(fā)表于 06-17 17:03 ?1805次閱讀

    開源鴻蒙開發(fā)必備!OpenHarmony替換Full SDK全攻略

    本文介紹開源鴻蒙OpenHarmony替換FullSDK的方法,演示設(shè)備為觸覺智能PurplePiOH鴻蒙開發(fā)板獲取FullSD
    的頭像 發(fā)表于 06-06 18:11 ?1042次閱讀
    開源鴻蒙<b class='flag-5'>開發(fā)</b>必備!OpenHarmony替換Full SDK全攻略

    如何將EZ CX3 MIPI庫從Linux移植到Windows?

    ``` [ 0.030676] [000048c8] libusb:調(diào)試 [winusb_get_device_list] 發(fā)現(xiàn)會話 [57] 的現(xiàn)有設(shè)備。 [ 0.030752] [000048c8] libusb
    發(fā)表于 05-16 06:59

    使用CYUSB3014進(jìn)行編程,使用USB 3.0超高速會有什么影響嗎?

    大家好 我正在使用 CYUSB3014 進(jìn)行編程,我使用了 USB 3.0 超高速。 在我的項(xiàng)目中,我想使用 winusb 驅(qū)動(dòng)程序而不是 fx3 cyusb 驅(qū)動(dòng)程序。 它現(xiàn)在可以工作了,但我
    發(fā)表于 05-13 06:13
    平顶山市| 松潘县| 丽江市| 广南县| 福海县| 高淳县| 外汇| 阜新| 盖州市| 西峡县| 象州县| 康平县| 大宁县| 镇赉县| 姚安县| 汾西县| 弋阳县| 曲松县| 绿春县| 友谊县| 连江县| 辰溪县| 晋城| 恩平市| 金湖县| 合川市| 襄汾县| 博客| 古蔺县| 广灵县| 万年县| 会理县| 丹寨县| 侯马市| 武陟县| 钦州市| 越西县| 山阴县| 孟村| 舒兰市| 大邑县|