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

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

3天內不再提示

如何通過MM32 USB實現(xiàn)shell輔助調試方案

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

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

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

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

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

#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,靈動微電子已經(jīng)獲得USB組織授權的VID和PID。當設備插入電腦上,可以查看到如上標識的CDC設備,如圖1所示:

pIYBAF_8DO6AFL3iAAMqMeIJuO8301.png

圖1 PC設備管理器列表

對于MM32 MCU的CDC功能來說,

在使用CDC功能之前先調用USB初始化函數(shù)來初始化USB協(xié)議棧。

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部分其函數(shù)初始化配置及相關全局變量定義內容,代碼如下:

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參數(shù)變量

char history[SHELL_HISTORY_MAX_NUMBER][SHELL_COMMAND_MAX_LENGTH]; // 歷史記錄區(qū)域

unsigned short historyCount; // 歷史記錄數(shù)量

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

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

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

unsigned short commandNumber; // 命令數(shù)量

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

unsigned short keyFuncNumber; // 按鍵響應數(shù)量

SHELL_InputMode status; // shell輸入狀態(tài)

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

shellRead read; // shell讀函數(shù)接口

shellWrite write; // shell寫函數(shù)接口

}SHELL_TypeDef;

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

shell的發(fā)送接口,只需要把數(shù)據(jù)拷貝到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實現(xiàn)shell調試功能,用串口助手打開虛擬串口,用CDC shell測試發(fā)送數(shù)據(jù),結果如下:

pIYBAF_8DP-AHq7DAAXuE60Q2B0041.png

圖2 功能演示

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

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

    關注

    146

    文章

    16802

    瀏覽量

    349358
  • usb
    usb
    +關注

    關注

    60

    文章

    7848

    瀏覽量

    263311
  • Shell
    +關注

    關注

    1

    文章

    361

    瀏覽量

    23234
收藏 人收藏

    評論

    相關推薦

    shell具有的功能和特點

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

    靈動微電子MM32系列MCU SPI LCD彩屏參考方案

    ,同時也受到了市場的廣泛關注,為此,靈動微電子推出了搭載MM32系列MCU的SPI LCD彩屏參考方案。 硬件方案介紹 LCD顯示應用開發(fā)一直以來都是方案開發(fā)公司的難點項目,在開發(fā)過程
    的頭像 發(fā)表于 04-26 10:01 ?2114次閱讀
    靈動微電子<b class='flag-5'>MM32</b>系列MCU SPI LCD彩屏參考<b class='flag-5'>方案</b>

    MM32自旋系列電機專用 24V電機驅動DK板功能介紹

    電子發(fā)燒友網(wǎng)站提供《MM32自旋系列電機專用 24V電機驅動DK板功能介紹.pdf》資料免費下載
    發(fā)表于 03-24 09:24 ?2次下載

    請問如何通過AURIX輔助其他SOC實現(xiàn)功能安全設計?

    請問如何通過AURIX輔助其他SOC實現(xiàn)功能安全設計?
    發(fā)表于 01-24 07:05

    3.5mm耳機接口和usb接口的區(qū)別

    3.5mm耳機接口和USB接口是兩種常見的音頻和感知設備的連接方式。雖然它們都用于連接設備以實現(xiàn)音頻傳輸,但它們在幾個方面有所不同。在本文中,我們將詳細探討3.5mm耳機接口和
    的頭像 發(fā)表于 01-11 10:34 ?1.5w次閱讀

    shell腳本調試技巧

    /a.txt.ori/tmp/a.txtset+x 提示: 開啟調試功能通過set -x 命令,而關閉調試功能通過set +x 5、習慣 最關鍵的是熟練語法,編碼習慣,編程思想,將錯誤
    發(fā)表于 12-28 16:57

    Shell腳本檢查工具ShellCheck介紹

    ShellCheck是一個用于bash/sh shell腳本的靜態(tài)分析工具,可以輔助檢查腳本語法錯誤,給出建議增強腳本健壯性。
    的頭像 發(fā)表于 12-27 13:43 ?1818次閱讀
    <b class='flag-5'>Shell</b>腳本檢查工具ShellCheck介紹

    USB調試模式是什么意思?USB調試模式有什么用?

    USB調試模式是什么意思?USB調試模式有什么用? USB調試模式是一種在Android設備上進
    的頭像 發(fā)表于 12-11 11:06 ?9806次閱讀

    python shell怎么用

    Python Shell是一種交互式解釋器,可以通過命令行直接運行Python代碼。在Shell中,可以輸入一行代碼并立即得到結果,非常適合于測試、嘗試新代碼或進行簡單的任務。本文將詳細介紹
    的頭像 發(fā)表于 11-29 14:36 ?1025次閱讀

    linux命令行與shell編程實戰(zhàn)

    。 Shell編程基礎:學習Shell腳本的基本語法和結構,如變量、數(shù)組、函數(shù)、控制結構等。通過編寫Shell腳本,可以自動化執(zhí)行一系列操作,減少重復工作,提高工作效率。
    的頭像 發(fā)表于 11-08 10:57 ?677次閱讀

    linux命令和shell編程有什么聯(lián)系

    的命令,并提供了許多功能和特性,如變量、控制結構、函數(shù)等,這些功能和特性使得Shell編程成為可能。 其次,Linux命令是Shell編程的重要組成部分。通過使用Linux命令,用戶可以執(zhí)行各種系統(tǒng)管理任務,如文件管理、進程控制
    的頭像 發(fā)表于 11-08 10:53 ?839次閱讀

    shell調用java并返回執(zhí)行結果

    Shell腳本中調用Java程序并獲取執(zhí)行結果,可以通過以下步驟實現(xiàn): 編寫Java程序:首先,你需要編寫一個Java程序,包含你想要執(zhí)行的功能。確保你的Java程序包含一個主類(包含main方法
    的頭像 發(fā)表于 11-08 10:32 ?1374次閱讀

    shell運行javamain的方法

    Shell中運行Java Main類的方法可以通過以下步驟實現(xiàn): 確保你已經(jīng)安裝了Java開發(fā)工具包(Java Development Kit,JDK)。你可以通過在終端中輸入 ja
    的頭像 發(fā)表于 11-08 10:30 ?756次閱讀

    如何利用shell進行腳本程序的設計?

    Again Shell)。可以通過在終端中輸入命令來檢查系統(tǒng)中是否已經(jīng)安裝了Bash。 打開終端:在大多數(shù)Unix和Linux系統(tǒng)中,可以通過查找“終端”或者“命令行”來找到一個用于與She
    的頭像 發(fā)表于 11-08 10:17 ?504次閱讀

    基于靈動MM32 MCU的便攜式血氧儀應用

    基于靈動MM32 MCU的便攜式血氧儀應用
    的頭像 發(fā)表于 10-24 15:31 ?469次閱讀
    基于靈動<b class='flag-5'>MM32</b> MCU的便攜式血氧儀應用