哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

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

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

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

關(guān)鍵指南針-NXP USB CDC_VCOM虛擬串口例程

恩智浦MCU加油站 ? 來源: 恩智浦MCU加油站 ? 2024-07-25 09:17 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

最近有小伙伴反應(yīng)USB中的 usb_examples/usb_device_cdc_vcom 例程(USB虛擬串口VCOM)中的一些使用問題,今天集中來說說使用example的必知要點(diǎn)~

實(shí)驗(yàn)平臺和軟件版本說明

本篇文章的實(shí)驗(yàn)平臺為:SDK_2_5_0_LPC54605J512oardslpcxpresso54608usb_examplesusb_device_cdc_vcom但實(shí)際上本篇文章適用于NXP大部分的硬件平臺,因?yàn)閡sb_device_cdc_vcom(以下簡稱vcom)這部分例程代碼和硬件關(guān)系并不大,屬于USB Stack之上的應(yīng)用部分,另外這部分代碼在SDK的各個(gè)版本上變化也不是很大,所以如果您使用的新版本的SDK,本篇文章也同樣適用。

40bba49a-4a20-11ef-b8af-92fbcf53809c.png

目標(biāo)讀者

關(guān)于vcom的一些基礎(chǔ)環(huán)境搭建/編譯下載等基礎(chǔ)問題這篇文章不再贅述,具體可以參考example文件夾下的readme.pdf. 這里假設(shè)讀者:

有一定的USB基礎(chǔ)知識

已經(jīng)成功跑過這個(gè)vcom例程,大概瀏覽過源代碼,并且準(zhǔn)備使用vcom的代碼作為參考開發(fā)自己的項(xiàng)目產(chǎn)品

重要概念解釋

首先一個(gè)最基本的概念:USB所有傳輸都是主機(jī)發(fā)起的,從機(jī)只是被動的響應(yīng)主機(jī)發(fā)來的請求

USB OUT 傳輸: 即 USB Host(如PC)向USB Device(如MCU)下發(fā)數(shù)據(jù), 對應(yīng)vcom 例程中事件kUSB_DeviceCdcEventRecvResponse. 這個(gè)很好理解:對于vcom例子,就是虛擬串口上有數(shù)據(jù)發(fā)到了MCU(比如PC端有一個(gè)上位機(jī)軟件,打開了虛擬串口,并且向虛擬串口寫入數(shù)據(jù))。每當(dāng)MCU收到數(shù)據(jù),都會進(jìn)入kUSB_DeviceCdcEventRecvResponse.在kUSB_DeviceCdcEventRecvResponse事件中,需要MCU這邊盡快的調(diào)用USB_DeviceCdcAcmRecv API將USB中的數(shù)據(jù)讀取出來,然后USB Stack會和USB硬件一起準(zhǔn)備好下次USB OUT事件接收工作。(類似串口的DMA接收機(jī)制)

從下圖的CallStack可以看出,kUSB_DeviceCdcEventRecvResponse本質(zhì)就是BulkOut中斷回調(diào)上來的:

40d4e3c4-4a20-11ef-b8af-92fbcf53809c.png

USB IN傳輸:即USB Host(PC) 向USB Device(如MCU)索要數(shù)據(jù), 比OUT傳輸稍微難理解一些:在vcom這個(gè)例程中,由于vcom屬于buck傳輸。每當(dāng)從機(jī)響應(yīng)上一個(gè)IN token之后,就會進(jìn)入kUSB_DeviceCdcEventSendResponse 事件,從下圖的CallStack也可以看到, kUSB_DeviceCdcEventSendResponse事件本質(zhì)就是 USB Buck In 中斷回調(diào)上來的:

40df8c7a-4a20-11ef-b8af-92fbcf53809c.png

所以每當(dāng)進(jìn)入到kUSB_DeviceCdcEventSendResponse的時(shí)候,都說明USB IN傳輸已經(jīng)完成(或取消)。那么從機(jī)如何向主機(jī)發(fā)送數(shù)據(jù)呢?調(diào)用USB_DeviceCdcAcmSend 這個(gè)API。但是調(diào)用這個(gè)API你需要注意,每次調(diào)用這個(gè)API,你都需要等待發(fā)送完成事件(kUSB_DeviceCdcEventSendResponse) 或超時(shí)(第一次除外)。在任何時(shí)候,你都不能在代碼里連續(xù)調(diào)用USB_DeviceCdcAcmSend 多次。這個(gè)機(jī)制類似于串口DMA發(fā)送,即:每次調(diào)用串口DMA發(fā)送的時(shí)候,你都要確保上一次串口DMA發(fā)送已經(jīng)完成。 總結(jié)如下:

40e5ce3c-4a20-11ef-b8af-92fbcf53809c.png



實(shí)際上,vcom例程實(shí)現(xiàn)的東西很簡單,就是自發(fā)自收(echo),把虛擬串口接到的數(shù)據(jù)再原封不動的發(fā)回而已。所涉及的數(shù)據(jù)傳輸過程中的事件也只有:kUSB_DeviceCdcEventSendResponse 和kUSB_DeviceCdcEventRecvResponse. 其他的USB Class回調(diào)事件實(shí)際上多半是有關(guān)一些配置,控制 (波特率,打開,關(guān)閉虛擬串口)等,這部分內(nèi)容暫不展開,需自學(xué)。

usb_device_cdc_vcom的問題 這個(gè)例程不太方便的地方就是代碼里把發(fā)送和接收是耦合在一起的,對于新手且對USB不熟悉的用戶,都不知道怎么解耦。實(shí)際應(yīng)用中,串口的發(fā)送和接收應(yīng)該是獨(dú)立的,沒有太大關(guān)系的,但是很可惜,這個(gè)example設(shè)計(jì)的時(shí)候硬生生的把發(fā)送和接收”粘”在一起,讓新手不太容易剝離開。

這里給出一個(gè)簡單的改造方案,把VCOM的發(fā)送和接收拆開:

1. 首先對于USB_IN: 注釋掉之前的 USB_DeviceCDCAcmRecv部分,USB IN 傳輸和USB OUT之間沒有必然關(guān)系。另外在kUSB_DeviceCdcEventSendResponse中,定義一個(gè)標(biāo)志is_cdc_in_compelte (類比于串口的發(fā)送完成中斷,或者DMA發(fā)送完成中斷):

40f6a978-4a20-11ef-b8af-92fbcf53809c.png

2. 對于USB OUT: 將之前的代碼替換為下圖,在收到Host下發(fā)的數(shù)據(jù)后,第一時(shí)間調(diào)用USB_DeviceCDCAcmRecv,把數(shù)據(jù)接下來,然后通過一個(gè)消息隊(duì)列(你可以用你自己實(shí)現(xiàn)的一個(gè)消息隊(duì)列) 發(fā)送給應(yīng)用層。不要在DeviceCdcEventSendResponse中做過多的應(yīng)用層處理:

4128ef82-4a20-11ef-b8af-92fbcf53809c.png

3. 其他的有關(guān)原demo中的一些變量,比如s_recvSize, s_sendSize 之類的,刪掉處理。在while(1)主循環(huán)中,處理USB中斷回調(diào)發(fā)出來的消息隊(duì)列:

412d9960-4a20-11ef-b8af-92fbcf53809c.png

通過解耦VCOM的Tx(發(fā)送)與Rx(接收),代碼不僅變得清晰簡潔,還提升了模塊間的獨(dú)立性和可維護(hù)性。這種設(shè)計(jì)促進(jìn)了代碼的復(fù)用性和可擴(kuò)展性,為未來的功能升級或定制開發(fā)奠定了堅(jiān)實(shí)基礎(chǔ)。無論是對于初次接觸的開發(fā)者還是資深工程師,都能從中受益,享受更流暢的編程體驗(yàn)。希望本期分享對大家有所幫助!

恩智浦致力于打造安全的連接和基礎(chǔ)設(shè)施解決方案,為智慧生活保駕護(hù)航。

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

    關(guān)注

    61

    文章

    1410

    瀏覽量

    199121
  • usb
    usb
    +關(guān)注

    關(guān)注

    60

    文章

    8475

    瀏覽量

    285773
  • 虛擬串口
    +關(guān)注

    關(guān)注

    3

    文章

    64

    瀏覽量

    14605
  • VCOM
    +關(guān)注

    關(guān)注

    0

    文章

    15

    瀏覽量

    16342
  • 指南針
    +關(guān)注

    關(guān)注

    2

    文章

    17

    瀏覽量

    11187

原文標(biāo)題:關(guān)鍵指南針-NXP USB CDC_VCOM虛擬串口例程

文章出處:【微信號:NXP_SMART_HARDWARE,微信公眾號:恩智浦MCU加油站】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

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

    使用keil編譯下載usb_cdc_vcom freertos例程sdk2.15版本無法正常檢測到串口,怎么解決?

    使用keil編譯下載usb_cdc_vcom freertos例程sdk2.15版本無法正常檢測到串口但是sdk2.4.1的例程可以...怎么檢查問題
    發(fā)表于 03-27 08:00

    電子指南針解決方案

    電子指南針解決方案指南針是一個(gè)重要的導(dǎo)航工具甚至在GPS 中也會用到電子指南針將替代舊的針式指南針或羅盤指南針因?yàn)殡娮?/div>
    發(fā)表于 07-20 17:40

    電子指南針

    各位大俠 你們好!我正在準(zhǔn)備用51單片機(jī)做電子指南針的畢業(yè)設(shè)計(jì),現(xiàn)在還沒頭緒,希望各位大俠多指點(diǎn)指點(diǎn)!謝謝!
    發(fā)表于 02-09 23:14

    電子指南針

    用電子指南針來控制三個(gè)電路的閉合能實(shí)現(xiàn)嗎?120度一個(gè)電路。
    發(fā)表于 02-23 14:21

    指南針?。?!

    stm32.i2c通信,怎么才能實(shí)現(xiàn)指南針???求指導(dǎo),求代碼參考
    發(fā)表于 04-12 01:16

    基于單片機(jī)電子指南針系統(tǒng)的設(shè)計(jì)資料分享

    資料下載地址-1020(百度網(wǎng)盤):點(diǎn)擊下載摘 要早期的指南針采用了磁化指針和方位盤的組合方式,整個(gè)指南針從便攜性、指示靈敏度上都有一定不足。本系統(tǒng)采用專用的磁場傳感器結(jié)合高速微控制器(MCU
    發(fā)表于 11-11 08:23

    基于OpenHarmony的智能指南針

    電子指南針是現(xiàn)代的一種重要導(dǎo)航工具,大到飛機(jī)船舶的導(dǎo)航,小到個(gè)人手機(jī)導(dǎo)航,電子指南針可以說和咱們生活息息相關(guān),密不可分。為什么電子指南針能指示方向?本 Demo 將為你呈現(xiàn),其中蘊(yùn)含了人類智慧
    發(fā)表于 07-08 11:04

    電子指南針

    電子指南針模組的資料,包括:使用說明書、電路原理圖、演示實(shí)例代碼
    發(fā)表于 01-01 12:14 ?114次下載

    電子指南針原理

    電子指南針原理:指南針是一個(gè)重要的導(dǎo)航工具甚至在GPS 中也會用到電子指南針將替代舊的針式指南針或羅盤指南針因?yàn)殡娮?/div>
    發(fā)表于 07-20 17:49 ?1.1w次閱讀
    電子<b class='flag-5'>指南針</b>原理

    指南針巧作磁化檢驗(yàn)器

    指南針巧作磁化檢驗(yàn)器 把商店出售的微型指南針,用環(huán)氧樹脂粘貼在塑料
    發(fā)表于 09-05 12:17 ?882次閱讀
    用<b class='flag-5'>指南針</b>巧作磁化檢驗(yàn)器

    labview與指南針芯片通訊

    labview與指南針芯片通訊 串口協(xié)議9600波特率
    發(fā)表于 02-23 11:30 ?31次下載

    iPhone自帶的指南針的妙用

    大家在日常使用中應(yīng)該用過iPhone的指南針功能吧,當(dāng)你在野外或者是工作生活有需求時(shí),指南針除了能夠指示方向,其實(shí)還有其他的妙用,今天我們就要教大家如何解鎖指南針的其他功能。
    的頭像 發(fā)表于 05-22 08:56 ?9125次閱讀

    電子指南針的C語言程序詳細(xì)資料免費(fèi)下載

    主要包括了以下這幾個(gè)函數(shù)功能1.讀取指南針傳感器測量角度值 2.校準(zhǔn)指南針傳感器 3.關(guān)閉指南針的校準(zhǔn) 4.恢復(fù)出廠設(shè)置 5.修改指南針磁偏角值
    發(fā)表于 09-04 16:44 ?35次下載

    DIY 尋星指南針,Satellite searcher

    DIY 尋星指南針,Satellite searcher 關(guān)鍵字:DIY 尋星指南針 DIY 尋星指南針 ??? 使
    的頭像 發(fā)表于 09-20 19:17 ?1486次閱讀

    為什么電子指南針能指示方向

    電子指南針是現(xiàn)代的一種重要導(dǎo)航工具,大到飛機(jī)船舶的導(dǎo)航,小到個(gè)人手機(jī)導(dǎo)航,電子指南針可以說和咱們生活息息相關(guān),密不可分。為什么電子指南針能指示方向?本 Demo 將為你呈現(xiàn),其中蘊(yùn)含了人類智慧及大自然的奧妙。
    的頭像 發(fā)表于 07-25 14:06 ?3412次閱讀
    崇州市| 亚东县| 兴安县| 梁山县| 察雅县| 乌恰县| 普洱| 巴林右旗| 南城县| 平远县| 台前县| 辽宁省| 克东县| 资阳市| 鹤山市| 博罗县| 交口县| 曲周县| 塔城市| 禄丰县| 广东省| 惠州市| 馆陶县| 永顺县| 当涂县| 和平区| 保亭| 天等县| 新建县| 文安县| 墨江| 日照市| 洛川县| 开封市| 库伦旗| 正宁县| 郑州市| 宾川县| 遂川县| 吐鲁番市| 韶关市|