在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

如何通過MM32 USB實現shell輔助調試方案

454398 ? 來源:靈動MM32MCU ? 作者:靈動MM32MCU ? 2021-02-15 06:33 ? 次閱讀

在前面的章節中我們介紹了MM32 USB各種功能類型,也介紹了如何通過串口或者J-Link RTT方式實現shell輔助調試方式,但是其都需要依賴額外的工具,比如串口方式就需要USB轉TTL,J-Link RTT需要使用J-Link下載器,所以希望有新的方法實現shell,本次我們介紹USB CDC的方式來實現shell功能。

本次我們采用MM32L373 MiniBoard作為測試開發板,驗證USB CDC的方式來實現shell功能。

前面已經為大家講解了shell的串口方法,其實原理一樣,只是用MM32 USB枚舉成串口設備替代USB轉TTL,直接從USB獲取數據到MCU,也不需要額外占用MCU的串口,節省資源和硬件,相關的代碼都可以從之前的文章獲取,本次只是融合兩者,改變實現接口,具體代碼參考如下:

對于CDC部分,其函數初始化配置及相關全局變量定義內容,代碼如下:

#define USBD_POWER 0

#define USBD_MAX_PACKET0 64

#define USBD_DEVDESC_IDVENDOR 0x2F81 //0x0D28

#define USBD_DEVDESC_IDPRODUCT 0x0001 //0x0204

以上是定義的MM32 MCU CDC設備VID和PID,靈動微電子已經獲得USB組織授權的VID和PID。當設備插入電腦上,可以查看到如上標識的CDC設備,如圖1所示:

pIYBAF_8DO6AFL3iAAMqMeIJuO8301.png

圖1 PC設備管理器列表

對于MM32 MCU的CDC功能來說,

在使用CDC功能之前先調用USB初始化函數來初始化USB協議棧。

int main(void)

{

// USB Device Initialization and connect

usbd_init();

usbd_connect(__TRUE);

while (!usbd_configured()) // Wait for USB Device to configure
{
}
while (1)
{
}
}

對于shell部分其函數初始化配置及相關全局變量定義內容,代碼如下:

typedef struct

{

char *command; // shell命令提示符

char buffer[SHELL_COMMAND_MAX_LENGTH]; // shell命令緩沖buffer

unsigned short length; // shell命令長度大小

unsigned short cursor; // shell光標位置偏移

char *param[SHELL_PARAMETER_MAX_NUMBER]; // shell參數變量

char history[SHELL_HISTORY_MAX_NUMBER][SHELL_COMMAND_MAX_LENGTH]; // 歷史記錄區域

unsigned short historyCount; // 歷史記錄數量

short historyFlag; // 當前記錄偏移位置

short historyOffset; // 歷史記錄偏移大小

SHELL_CommandTypeDef *commandBase; // 命令表基地址

unsigned short commandNumber; // 命令數量

int keyFuncBase; // 按鍵響應表基地址

unsigned short keyFuncNumber; // 按鍵響應數量

SHELL_InputMode status; // shell輸入狀態

unsigned char isActive; //是不是當前激活的shell

shellRead read; // shell讀函數接口

shellWrite write; // shell寫函數接口

}SHELL_TypeDef;

如上所示,為對象的定義接口,移植的步驟先定義一個shell對象,即:SHELL_TypeDef cdc_shell,然后實例化對象的操作接口,具體說明看注釋,對于其中我們需要關注的是shell的讀寫接口。由于本次我們使用USB CDC接收和發送數據,所以我們只需要在USB CDC的函數中處理接收到的數據即可,我們使用shellHandler(&cdc_shell, EP2RXBuff[i]);來處理數據的交互,具體函數代碼參考串口shell代碼。

shell的發送接口,只需要把數據拷貝到buffer即可。

shell的讀寫接口移植到CDC上,代碼如下:

void USBD_CDC_TASK(void)

{

uint8_t i, count;

NotifyOnStatusChange();

if (CDC_UART ->ISR & 0x08)

{

CDC_UART ->GCR &= ~(3 << 3);

CDC_UART ->GCR = 3 << 3;

UART_ClearITPendingBit(CDC_UART, UART_OVER_ERR);

}

// USB -> UART

if (EP2ReceiveFlag == 1)

{

EP2ReceiveFlag = 0;

for (i = 0; i < RxBufLen; i++)

shellHandler(&cdc_shell, EP2RXBuff[i]);

}

// UART -> USB

if (EP2TransferFlag == 1)

{

if (TxBufLen > 0)

{

while (USB->rEP2_CTRL & 0x80);

if (TxBufLen > 64)

{

UART_ReadData(EP2TXBuff, 64);

count = 64;

TxBufLen -= 64;

}

else

{

UART_ReadData(EP2TXBuff, TxBufLen);

count = TxBufLen;

TxBufLen = 0;

}

usb_buf_busy_flag = 1;

for (i = 0; i < count; i++)

{

USB->rEP2_FIFO = *(EP2TXBuff + i);

}

if ((USB ->rEP2_AVIL & 0x3f) == count)

{

USB->rEP2_CTRL = 0x80 | count;

}

else

{

USB->rTOP |= 1 << 3;

USB->rTOP &= ~(1 << 3);

}

USB->rEP2_CTRL = 0x80 | count;

if (0 == TxBufLen)

EP2TransferFlag = 0;

}

}

}

如上,我們就完成通過MM32 MCU的CDC實現shell調試功能,用串口助手打開虛擬串口,用CDC shell測試發送數據,結果如下:

pIYBAF_8DP-AHq7DAAXuE60Q2B0041.png

圖2 功能演示

以上就是MM32 MCU USB的CDC shell功能。
編輯:hfy

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

    關注

    146

    文章

    17874

    瀏覽量

    361217
  • usb
    usb
    +關注

    關注

    60

    文章

    8150

    瀏覽量

    271143
  • Shell
    +關注

    關注

    1

    文章

    372

    瀏覽量

    24036
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    通過御控APP實現PLC遠程調試與遠程監控

    御控APP,通過移動化、智能化的手段,實現了PLC遠程調試與監控,為工業生產帶來了便捷與高效。
    的頭像 發表于 06-04 09:49 ?75次閱讀

    靈動微電子MM32MCU的主流型芯片選型

    靈動微電子MM32系列32位MCU已經在江湖上久負盛名,以產品平臺化、系列化、兼容性好、性價比高、易于開發著稱。MM32MCU分為超值型、主流型、性能型、低功耗、汽車控制、電機與電源等六大系列。今天給大家綜合介紹MM32MCU的
    的頭像 發表于 05-06 13:32 ?504次閱讀
    靈動微電子<b class='flag-5'>MM</b>32MCU的主流型芯片選型

    USB 3.0CX3中的輔助引導加載程序后無法識別怎么解決?

    的引導加載程序實現基于來自boot_fw/src/spi_test.c的參考代碼。 觀察到的行為 1當直接加載應用程序(不使用 SBL)時 →USB 3.0 工作正常。 2. 通過輔助
    發表于 05-06 08:39

    樹莓派新手必看!在樹莓派上編寫和運行 Shell 腳本!

    在本教程中,我將討論Shell腳本的基礎知識、它們的用途以及如何在RaspberryPi上編寫和運行Shell腳本。什么是Shell腳本?Shell腳本可以讓你自動化幾乎所有在Linu
    的頭像 發表于 03-25 09:28 ?333次閱讀
    樹莓派新手必看!在樹莓派上編寫和運行 <b class='flag-5'>Shell</b> 腳本!

    極致性價比USB-C接口ESD保護方案

    什么是USB-CUSBType-C(簡稱USB-C)是通用串行總線(USB)的標準化接口規范。其插頭與插座采用對稱式設計,支持雙向插拔操作,物理尺寸為8.3mm×2.5
    的頭像 發表于 03-24 18:03 ?441次閱讀
    極致性價比<b class='flag-5'>USB</b>-C接口ESD保護<b class='flag-5'>方案</b>

    如何通過J-Link實現STM32H5控制調試端口

    基于J-Link實現STM32H5安全編程介紹了在禁用TrustZone時,如何通過J-Link實現STM32H5控制調試端口的安全鎖定或回歸打開。
    的頭像 發表于 03-17 10:25 ?371次閱讀
    如何<b class='flag-5'>通過</b>J-Link<b class='flag-5'>實現</b>STM32H5控制<b class='flag-5'>調試</b>端口

    利用FPGA實現USB 2.0通信接口

    USB?2.0接口的實現方式 利用FPGA來實現USB 2.0接口的方式一般有兩種,一是借助外圍的USB接口芯片,二是FPGA內部
    的頭像 發表于 12-30 13:59 ?2668次閱讀
    利用FPGA<b class='flag-5'>實現</b><b class='flag-5'>USB</b> 2.0通信接口

    快速入門!RNDIS網卡實現USB上網~

    本文將帶你使用RNDIS的方式,搭配Linux主控終端,快速實現USB上網。 ? RNDIS是指Remote NDIS,基于USB實現RNDIS實際上就是TCP/IP over
    的頭像 發表于 12-24 17:02 ?1218次閱讀
    快速入門!RNDIS網卡<b class='flag-5'>實現</b><b class='flag-5'>USB</b>上網~

    Linux從零到精通:最簡單的Shell腳本入門教程

    通過簡單的命令和腳本,實現對系統的靈活控制和自動化管理。 shell腳本前言 shell腳本入門 shell變量基礎
    的頭像 發表于 12-05 09:56 ?1404次閱讀
    Linux從零到精通:最簡單的<b class='flag-5'>Shell</b>腳本入門教程

    樂鑫USB方案設備互聯傳輸,豐富的外設支持應用

    啟明云端/01樂鑫USB方案USB是一種通用的總線標準,用于連接主機和外部設備。樂鑫USB方案為用戶提供了方便快捷的設備互聯和數據傳輸方式。
    的頭像 發表于 11-14 01:00 ?755次閱讀
    樂鑫<b class='flag-5'>USB</b><b class='flag-5'>方案</b>設備互聯傳輸,豐富的外設支持應用

    什么是EPS?通過馬達來輔助轉向操作的系統

    背景 ? EPS是一種通過馬達來減輕和輔助駕駛員在轉向操作時所需力量的設備。此外,通過采用EPS,可望提高燃效,降低車輛重量。我們將在本消息中就EPS的功能和系統構成進行解說,同時對構成的電子零部件
    的頭像 發表于 11-03 14:23 ?972次閱讀
    什么是EPS?<b class='flag-5'>通過</b>馬達來<b class='flag-5'>輔助</b>轉向操作的系統

    TCSH shell 編程入門

    ICer從業人員最先需要掌握的語言,就是linux shell語言。TCSH是ICer使用最多的Shell語言,可以說ICer入門語言從TCSH開始。
    發表于 11-01 10:45 ?0次下載

    求助,請問PCM2904能實現耳機輸入,USB輸出的功能嗎?

    您好! 我想實現一個從手機或者電腦支持耳機插口的設備上獲取音頻然后通過USB輸出, 也就是 headphone-->USB AUDIO CODEC--->
    發表于 10-21 06:00

    shell具有的功能和特點

    是執行命令。用戶可以在 Shell 提示符下輸入命令,Shell 會解析命令并將其傳遞給操作系統執行。Shell 支持各種類型的命令,包括內置命令、外部命令和腳本命令。 命令歷史 Shell
    的頭像 發表于 08-30 14:48 ?1236次閱讀

    丟掉數據線,你還會調試Android設備嗎?

    進行連接,當Android設備USB接口出現問題或身邊沒有USB數據線時,使用WiFi調試Android設備便成為了一種實用的替代方案。本文以平板電腦為例,為大家介
    的頭像 發表于 08-14 17:09 ?667次閱讀
    丟掉數據線,你還會<b class='flag-5'>調試</b>Android設備嗎?
    主站蜘蛛池模板: 久久观看午夜精品 | 黄色3级| 51视频在线观看免费国产 | 亚洲黄色第一页 | 夜夜想夜夜爽天天爱天天摸 | 国产精品天天操 | 97人操| 女的扒开尿口让男人桶 | 亚偷熟乱区视频在线观看 | 美女扒开尿口给男人桶爽视频 | 操女人免费视频 | 一级特黄特色的免费大片视频 | 免费黄色大片网站 | 1024免费看片 | 午夜视频www| 久久久久久国产精品免费 | 色综合亚洲天天综合网站 | 日本黄色免费在线 | 日韩在线影院 | 九九99久久精品午夜剧场免费 | 美女被曹 | 婷婷亚洲综合五月天小说在线 | 最新eeuss影院第256页 | 欧美一二三区在线 | 天天爽夜爽免费精品视频 | 九色福利| 欧美专区在线播放 | 天天干夜夜操 | 久久久噜噜噜久久久午夜 | 超人碰碰碰人人成碰人 | 国产最好的精华液网站 | 男子扒开美女尿口做羞羞的事 | 国内精品一级毛片免费看 | 国产小视频免费观看 | 在线免费看黄视频 | 激情视频综合网 | xxxx日本在线播放免费不卡 | 高颜值大长腿美女啪啪 | 三级视频网 | 久久夜夜操妹子 | 视频一区 在线 |