女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

關鍵指南針-NXP USB CDC_VCOM虛擬串口例程

恩智浦MCU加油站 ? 來源: 恩智浦MCU加油站 ? 2024-07-25 09:17 ? 次閱讀

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

實驗平臺和軟件版本說明

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

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

目標讀者

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

有一定的USB基礎知識

已經成功跑過這個vcom例程,大概瀏覽過源代碼,并且準備使用vcom的代碼作為參考開發自己的項目產品

重要概念解釋

首先一個最基本的概念:USB所有傳輸都是主機發起的,從機只是被動的響應主機發來的請求

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

從下圖的CallStack可以看出,kUSB_DeviceCdcEventRecvResponse本質就是BulkOut中斷回調上來的:

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

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

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

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

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



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

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

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

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

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

2. 對于USB OUT: 將之前的代碼替換為下圖,在收到Host下發的數據后,第一時間調用USB_DeviceCDCAcmRecv,把數據接下來,然后通過一個消息隊列(你可以用你自己實現的一個消息隊列) 發送給應用層。不要在DeviceCdcEventSendResponse中做過多的應用層處理:

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

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

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

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

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • NXP
    NXP
    +關注

    關注

    61

    文章

    1328

    瀏覽量

    187358
  • usb
    usb
    +關注

    關注

    60

    文章

    8136

    瀏覽量

    270688
  • 虛擬串口
    +關注

    關注

    3

    文章

    63

    瀏覽量

    14138
  • VCOM
    +關注

    關注

    0

    文章

    15

    瀏覽量

    15770
  • 指南針
    +關注

    關注

    2

    文章

    17

    瀏覽量

    10990

原文標題:關鍵指南針-NXP USB CDC_VCOM虛擬串口例程

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

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    會說話的指南針電路

    會說話的羅盤(指南針電路)是由霍爾效應的方向傳感器(MOD1)和模擬音頻存儲設備ISD1016制成的。
    發表于 01-04 10:21 ?4267次閱讀
    會說話的<b class='flag-5'>指南針</b>電路

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

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

    電子指南針解決方案

    電子指南針解決方案指南針是一個重要的導航工具甚至在GPS 中也會用到電子指南針將替代舊的針式指南針或羅盤指南針因為電子
    發表于 07-20 17:40

    電子指南針

    各位大俠 你們好!我正在準備用51單片機做電子指南針的畢業設計,現在還沒頭緒,希望各位大俠多指點指點!謝謝!
    發表于 02-09 23:14

    電子指南針

    用電子指南針來控制三個電路的閉合能實現嗎?120度一個電路。
    發表于 02-23 14:21

    指南針!!!

    stm32.i2c通信,怎么才能實現指南針???求指導,求代碼參考
    發表于 04-12 01:16

    基于單片機電子指南針系統的設計資料分享

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

    基于OpenHarmony的智能指南針

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

    電子指南針

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

    電子指南針原理

    電子指南針原理:指南針是一個重要的導航工具甚至在GPS 中也會用到電子指南針將替代舊的針式指南針或羅盤指南針因為電子
    發表于 07-20 17:49 ?1w次閱讀
    電子<b class='flag-5'>指南針</b>原理

    指南針巧作磁化檢驗器

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

    labview與指南針芯片通訊

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

    iPhone自帶的指南針的妙用

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

    DIY 尋星指南針,Satellite searcher

    DIY 尋星指南針,Satellite searcher 關鍵字:DIY 尋星指南針 DIY 尋星指南針 ??? 使
    的頭像 發表于 09-20 19:17 ?1058次閱讀

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

    電子指南針是現代的一種重要導航工具,大到飛機船舶的導航,小到個人手機導航,電子指南針可以說和咱們生活息息相關,密不可分。為什么電子指南針能指示方向?本 Demo 將為你呈現,其中蘊含了人類智慧及大自然的奧妙。
    的頭像 發表于 07-25 14:06 ?2330次閱讀