色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

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

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

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

在前面的章節(jié)中我們介紹了MM32 USB各種功能類型,也介紹了如何通過串口或者J-Link RTT方式實現(xiàn)shell輔助調(diào)試方式,但是其都需要依賴額外的工具,比如串口方式就需要USB轉(zhuǎn)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枚舉成串口設(shè)備替代USB轉(zhuǎn)TTL,直接從USB獲取數(shù)據(jù)到MCU,也不需要額外占用MCU的串口,節(jié)省資源和硬件,相關(guān)的代碼都可以從之前的文章獲取,本次只是融合兩者,改變實現(xiàn)接口,具體代碼參考如下:

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

#define USBD_POWER 0

#define USBD_MAX_PACKET0 64

#define USBD_DEVDESC_IDVENDOR 0x2F81 //0x0D28

#define USBD_DEVDESC_IDPRODUCT 0x0001 //0x0204

以上是定義的MM32 MCU CDC設(shè)備VID和PID,靈動微電子已經(jīng)獲得USB組織授權(quán)的VID和PID。當(dāng)設(shè)備插入電腦上,可以查看到如上標(biāo)識的CDC設(shè)備,如圖1所示:

pIYBAF_8DO6AFL3iAAMqMeIJuO8301.png

圖1 PC設(shè)備管理器列表

對于MM32 MCU的CDC功能來說,

在使用CDC功能之前先調(diào)用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ù)初始化配置及相關(guān)全局變量定義內(nèi)容,代碼如下:

typedef struct

{

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

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

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

unsigned short cursor; // shell光標(biāo)位置偏移

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; // 當(dāng)前記錄偏移位置

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

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

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

int keyFuncBase; // 按鍵響應(yīng)表基地址

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

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

unsigned char isActive; //是不是當(dāng)前激活的shell

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

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

}SHELL_TypeDef;

如上所示,為對象的定義接口,移植的步驟先定義一個shell對象,即:SHELL_TypeDef cdc_shell,然后實例化對象的操作接口,具體說明看注釋,對于其中我們需要關(guān)注的是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調(diào)試功能,用串口助手打開虛擬串口,用CDC shell測試發(fā)送數(shù)據(jù),結(jié)果如下:

pIYBAF_8DP-AHq7DAAXuE60Q2B0041.png

圖2 功能演示

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

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

    關(guān)注

    146

    文章

    17316

    瀏覽量

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

    關(guān)注

    60

    文章

    7979

    瀏覽量

    265620
  • Shell
    +關(guān)注

    關(guān)注

    1

    文章

    366

    瀏覽量

    23432
收藏 人收藏

    評論

    相關(guān)推薦

    電動牙刷USB接口的芯片保護電路方案

    1 USB2.0的ESD保護方案 如圖1所示為USB接口與ESD保護芯片連接示意圖,其中USB Controller/Charger指的是USB
    的頭像 發(fā)表于 01-17 16:52 ?193次閱讀
    電動牙刷<b class='flag-5'>USB</b>接口的芯片保護電路<b class='flag-5'>方案</b>

    利用FPGA實現(xiàn)USB 2.0通信接口

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

    快速入門!RNDIS網(wǎng)卡實現(xiàn)USB上網(wǎng)~

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

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

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

    樂鑫USB方案設(shè)備互聯(lián)傳輸,豐富的外設(shè)支持應(yīng)用

    啟明云端/01樂鑫USB方案USB是一種通用的總線標(biāo)準(zhǔn),用于連接主機和外部設(shè)備。樂鑫USB方案為用戶提供了方便快捷的設(shè)備互聯(lián)和數(shù)據(jù)傳輸方式。
    的頭像 發(fā)表于 11-14 01:00 ?390次閱讀
    樂鑫<b class='flag-5'>USB</b><b class='flag-5'>方案</b>設(shè)備互聯(lián)傳輸,豐富的外設(shè)支持應(yīng)用

    什么是EPS?通過馬達來輔助轉(zhuǎn)向操作的系統(tǒng)

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

    TCSH shell 編程入門

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

    求助,請問PCM2904能實現(xiàn)耳機輸入,USB輸出的功能嗎?

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

    shell具有的功能和特點

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

    shell基本介紹及常用命令之shell介紹

    一、Shell是什么?我們在剛開始接觸Linux的時候,經(jīng)常會聽到工程師提到Shell這個詞,剛開始不知道這是個干什么的,簡單的說,它是一個應(yīng)用,接收用戶命令,調(diào)用相應(yīng)的內(nèi)核接口函數(shù)或應(yīng)用程序,并
    發(fā)表于 08-15 09:28

    丟掉數(shù)據(jù)線,你還會調(diào)試Android設(shè)備嗎?

    進行連接,當(dāng)Android設(shè)備USB接口出現(xiàn)問題或身邊沒有USB數(shù)據(jù)線時,使用WiFi調(diào)試Android設(shè)備便成為了一種實用的替代方案。本文以平板電腦為例,為大家介
    的頭像 發(fā)表于 08-14 17:09 ?432次閱讀
    丟掉數(shù)據(jù)線,你還會<b class='flag-5'>調(diào)試</b>Android設(shè)備嗎?

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

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

    USB調(diào)試助手來調(diào)試USB所遇到的困惑求解

    請教下大家,用USB調(diào)試助手來調(diào)試USB所遇到的困惑。問題如下面截圖; 在程序只找到一個MCU接收PC所發(fā)數(shù)據(jù)的函數(shù)(如下)。但這是EP1的,而非EP2的。但在
    發(fā)表于 04-23 07:32

    CW-DAPLINK調(diào)試工具

    CW-DAPLINK是武漢芯源半導(dǎo)體有限公司專為CW32系列MCU的在線調(diào)試和編程工具而設(shè)計的。 它通過SWD接口和應(yīng)用單板的MCU進行在線通信。通過CW-DAPLINK的全速USB
    的頭像 發(fā)表于 04-09 17:16 ?832次閱讀
    CW-DAPLINK<b class='flag-5'>調(diào)試</b>工具

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

    電子發(fā)燒友網(wǎng)站提供《MM32自旋系列電機專用 24V電機驅(qū)動DK板功能介紹.pdf》資料免費下載
    發(fā)表于 03-24 09:24 ?2次下載
    主站蜘蛛池模板: 亚洲 欧美 视频 手机在线 | 国产偷抇久久精品A片蜜臀A | 视频成人app永久在线观看 | 国产精品 中文字幕 亚洲 欧美 | beeg日本高清xxxx | 亚洲欧美中文字幕高清在线 | 最新在线黄色网址 | 日本免费xxx | 国产成人a一在线观看 | 伊人久久大香线蕉综合电影 | 亚洲精品一区三区三区在线观看 | 中文字幕亚洲欧美日韩2019 | 欧美特黄三级成人 | 亚洲一区二区三区高清网 | 国产1769一七六九视频在线 | 成年人在线免费观看视频网站 | 国产伦精品一区二区三区 | 91se在线看片国产免费观看 | 色AV色婷婷96人妻久久久 | 九九九精品国产在线 | 老师掀开短裙让我挺进动态 | aaa在线观看视频高清视频 | 亚洲精品无夜久久久久久久久 | 国产99久久亚洲综合精品西瓜tv | 成人午夜精品无码区久久漫画日本 | 丰满女朋友在线观看中文 | 两百磅美女| 性色AV一区二区三区V视界影院 | 日韩人妻无码专区一本二本 | 第一次破女视频出血视频 | 伊人最新网址 | 男人国产AV天堂WWW麻豆 | 国产精品久久久久影院免费 | 欧洲最大无人区免费高清完整版 | 国产白色视频在线观看w | 嫩草影院在线观看网站成人 | 久久国语露脸精品国产 | 闺蜜撬开我的腿用黄瓜折磨我 | 国产亚洲欧洲日韩在线三区 | 亚洲一区免费看 | 嫩草影院永久在线一二三四 |