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

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

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

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

關(guān)于GD32虛擬串口的兩個(gè)BUG

Dp1040 ? 來(lái)源:魚鷹談單片機(jī) ? 2023-07-25 09:55 ? 次閱讀

最近在搞調(diào)試器,折騰了好多天,終于理解了MDK、下載算法、調(diào)試器、MCU之間的關(guān)系。

簡(jiǎn)單來(lái)說(shuō)就是,調(diào)試器作為USB轉(zhuǎn)SWD協(xié)議的轉(zhuǎn)換工具,MDK通過(guò)USB驅(qū)動(dòng)這個(gè)工具,下載算法包含了一些MCU內(nèi)部FLASH擦除、編程代碼。與普通代碼不同的是,該代碼可以下載在任意位置運(yùn)行。如果需要校驗(yàn),還會(huì)加入CRC校驗(yàn)代碼,扇區(qū)檢測(cè)代碼。

MDK首先通過(guò)調(diào)試器將算法寫入內(nèi)部RAM,然后把需要寫入的固件程序?qū)懭隦AM,再由MDK控制(通過(guò)調(diào)試器)MCU執(zhí)行相應(yīng)代碼(擦除或?qū)懭肷葏^(qū)),通過(guò)MCU的寄存器和設(shè)定軟件斷點(diǎn)得到執(zhí)行結(jié)果,如此來(lái)回搬運(yùn),就可完成固件下載。

說(shuō)起來(lái)簡(jiǎn)單,做起來(lái)很麻煩(調(diào)試器工具功能簡(jiǎn)單,只做協(xié)議轉(zhuǎn)換,如何控制通過(guò)MDK),這里點(diǎn)到為止,有時(shí)間會(huì)好好整理分享一下。

之后準(zhǔn)備USB相關(guān)的工作,發(fā)現(xiàn)總是沒有滿意的USB CORE庫(kù),官方的庫(kù)感覺還不錯(cuò),可惜被封裝了,看不到源碼,放棄。

之前魚鷹分享過(guò)虛擬串口的代碼,于是下載下來(lái)使用,發(fā)現(xiàn)竟然在GD32中用不了,當(dāng)初明明ST測(cè)試沒問題的。

還以為是GD芯片問題,然后使用之前的USB雙緩沖讀卡器代碼,發(fā)現(xiàn)沒有問題。

只能在線調(diào)試比較差異,借助邏輯分析儀,總算解決了這兩個(gè)BUG,順利自發(fā)自收。

1c63214c-2a03-11ee-a368-dac502259ad0.png

BUG 1

枚舉失敗。

通過(guò)邏輯分析儀發(fā)現(xiàn),電腦發(fā)送控制幀給USB設(shè)備,竟然沒有任何回應(yīng),即沒有NAK,也米有STALL,更不用說(shuō)ACK了。

1c91f8be-2a03-11ee-a368-dac502259ad0.png

▲正?;貞?yīng)

1ca760f0-2a03-11ee-a368-dac502259ad0.png

▲無(wú)回應(yīng)

通過(guò)調(diào)試發(fā)現(xiàn),該端點(diǎn)接收狀態(tài)為0,禁用狀態(tài),再參考可用代碼,發(fā)現(xiàn)在復(fù)位之后,應(yīng)該設(shè)置為接收有效才對(duì)。因此修改如下:

void USBD_Reset (void)
{
………………
……
  ……
EPxREG(0)=EP_CONTROL|EP_RX_VALID;// 除了設(shè)定端點(diǎn)類型外,還要使能接收
  DADDR = DADDR_EF | 0;                 /* Enable USB Default Address         */
}

很奇怪的是,ST我以前測(cè)試是沒問題的,可能也是兩者之間的差異吧。

BUG2

枚舉成功后,又出現(xiàn)另外一個(gè)問題,就是串口只能發(fā)送第一幀數(shù)據(jù),第二次卡死……

經(jīng)過(guò)邏輯分析儀發(fā)現(xiàn),發(fā)送的數(shù)據(jù)會(huì)被NAK。后來(lái)才發(fā)現(xiàn)下面的語(yǔ)句不滿足,直接沒有讀USB數(shù)據(jù)包,從而沒有恢復(fù)接收有效狀態(tài),導(dǎo)致串口助手卡死。 1cc0d6de-2a03-11ee-a368-dac502259ad0.png 這段官方代碼也確實(shí)比較迷,沒有最大利用緩存空間(最少需要滿一包的空間,但實(shí)際可能不滿一包),不過(guò)按下不表。 那就是第一次收到的數(shù)據(jù)未讀唄,在main()函數(shù)里面發(fā)現(xiàn)根本沒進(jìn)來(lái),發(fā)現(xiàn)竟然一直在USB中斷執(zhí)行……

void main()
 {
   while(1)
   {
    ……
     if (usb_rx_ch == -1)
            usb_rx_ch = USBD_CDC_ACM_GetChar();
    ……  
   }
}
然后看到這個(gè)標(biāo)志一直在,未清除導(dǎo)致。

1cf46878-2a03-11ee-a368-dac502259ad0.png

但很奇怪的事,該代碼在ST里面跑的挺好的。不管它,加上處理:

void USB_LP_CAN1_RX0_IRQHandler(void) {
 ……


 if (istr & ISTR_ESOF)
  {  
    if (USBD_P_Error_Event)
    {
      USBD_P_Error_Event(3);
    }
    ISTR = ~ISTR_ESOF;
  }


  ……
}

這下串口助手一下子絲滑了,舒服!

審核編輯:湯梓紅

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

    關(guān)注

    146

    文章

    17679

    瀏覽量

    357583
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5397

    瀏覽量

    122618
  • 調(diào)試器
    +關(guān)注

    關(guān)注

    1

    文章

    309

    瀏覽量

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

    關(guān)注

    3

    文章

    62

    瀏覽量

    14084
  • GD32
    +關(guān)注

    關(guān)注

    7

    文章

    418

    瀏覽量

    24976

原文標(biāo)題:關(guān)于GD32虛擬串口的兩個(gè)BUG

文章出處:【微信號(hào):玩點(diǎn)嵌入式,微信公眾號(hào):玩點(diǎn)嵌入式】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    什么是GD32

    是不同的產(chǎn)品,不可能所有東西都沿用STM32,有些自主開發(fā)的東西還是有區(qū)別的。相同的地方我們就不說(shuō)了,下面我給大家講一下不同的地方。二、區(qū)別1、內(nèi)核GD32采用二代的M3內(nèi)核,STM32主要采用一代M3內(nèi)核,下圖是ARM公司的M3內(nèi)核勘誤表,GD使用的內(nèi)核只有752419
    發(fā)表于 08-12 07:46

    GD32與STM32有何區(qū)別

    所有東西都沿用STM32,有些自主開發(fā)的東西還是有區(qū)別的。相同的地方我們就不說(shuō)了,下面我給大家講一下不同的地方。二、區(qū)別1、內(nèi)核GD32采用二代的M3內(nèi)核,STM32主要采用一代M3內(nèi)核,下圖是ARM公司的M3內(nèi)核勘誤表,GD使用的內(nèi)核只有752419這一
    發(fā)表于 08-13 07:21

    「必看干貨」淺談GD32與STM32之間的區(qū)別

    GD32與STM32的啟動(dòng)時(shí)間存在差異,為了讓GD32 MCU更準(zhǔn)確復(fù)位(不修改可能無(wú)法復(fù)位)。12.串口通信不同點(diǎn): GD32在連續(xù)發(fā)送數(shù)據(jù)的時(shí)候每
    發(fā)表于 09-26 14:28

    GD32 DMA串口通訊DEMO的相關(guān)資料推薦

    GD32 DMA串口通訊GD32 USART0 DMA發(fā)送與接收不定長(zhǎng)數(shù)據(jù)GD32E230簡(jiǎn)介GD32E230采用DMA進(jìn)行
    發(fā)表于 12-10 06:26

    淺析stm32f103&gd32的u***虛擬串口+打印類printer組合設(shè)備

    stm32f103&gd32的u***虛擬串口+打印類printer組合設(shè)備@TOCstm32f103&gd32的u***虛擬
    發(fā)表于 01-26 06:27

    GD32串口回環(huán)的設(shè)置解析

    GD32串口IO該怎樣去設(shè)置呢?GD32串口接收該怎樣去設(shè)置呢?
    發(fā)表于 02-28 06:33

    GD32替換STM32?這些坑你別踩...

    STM32還是要高的。6、串口GD在連續(xù)發(fā)送數(shù)據(jù)的時(shí)候每兩個(gè)字節(jié)之間會(huì)有一個(gè)Bit的Idle,而STM32沒有,如下圖。GD
    發(fā)表于 03-31 10:51

    GD32 DMA串口通訊DEMO

    GD32 DMA串口通訊GD32 USART0 DMA發(fā)送與接收不定長(zhǎng)數(shù)據(jù)GD32E230簡(jiǎn)介GD32E230采用DMA進(jìn)行
    發(fā)表于 11-26 19:36 ?74次下載
    <b class='flag-5'>GD32</b> DMA<b class='flag-5'>串口</b>通訊DEMO

    stm32f103&gd32的usb虛擬串口,打印類printer組合設(shè)備

    stm32f103&gd32的usb虛擬串口+打印類printer組合設(shè)備@TOCstm32f103&gd32的usb虛擬
    發(fā)表于 12-02 16:06 ?56次下載
    stm32f103&<b class='flag-5'>gd32</b>的usb<b class='flag-5'>虛擬</b><b class='flag-5'>串口</b>,打印類printer組合設(shè)備

    STM32和GD32有什么區(qū)別?

    是不同的產(chǎn)品,不可能所有東西都沿用STM32,有些自主開發(fā)的東西還是有區(qū)別的。相同的地方我們就不說(shuō)了,下面我給大家講一下不同的地方。二、區(qū)別1、內(nèi)核GD32采用二代的M3內(nèi)核,STM32主要采用一代M3內(nèi)核,下圖是ARM公司的M3內(nèi)核勘誤表,GD使用的內(nèi)核只有752419
    發(fā)表于 12-24 19:09 ?15次下載
    STM32和<b class='flag-5'>GD32</b>有什么區(qū)別?

    如何調(diào)試GD32虛擬串口兩個(gè)BUG

    最近魚鷹在搞調(diào)試器,折騰了好多天終于理解了 MDK 、下載算法、調(diào)試器、MCU 之間的關(guān)系。
    的頭像 發(fā)表于 07-18 17:40 ?1880次閱讀
    如何調(diào)試<b class='flag-5'>GD32</b><b class='flag-5'>虛擬</b><b class='flag-5'>串口</b>的<b class='flag-5'>兩個(gè)</b><b class='flag-5'>BUG</b>?

    gd32和stm32的區(qū)別

    gd32和stm32的區(qū)別 現(xiàn)在的市場(chǎng)上有很多種不同類型的微控制器,其中比較常見的有種,即gd32和stm32。種微控制器都是中國(guó)和歐洲的兩個(gè)
    的頭像 發(fā)表于 08-16 11:16 ?7634次閱讀

    GD32和AT32哪個(gè)好?

    創(chuàng)科技(Atmel的中國(guó)合資公司)開發(fā)。這種型號(hào)都具有自己的特點(diǎn)和優(yōu)缺點(diǎn),選擇哪一個(gè)更好取決于你的具體需求。 GD32GD32是GigaDevice Semiconductor推
    的頭像 發(fā)表于 08-16 11:32 ?3030次閱讀

    GD32與STM32兼容嗎?

    GD32與STM32兼容嗎? GD32與STM32是兩個(gè)不同的微控制器系列,是由兩個(gè)不同的公司設(shè)計(jì)和生產(chǎn)的。GD32系列是由國(guó)內(nèi)的長(zhǎng)沙國(guó)芯微
    的頭像 發(fā)表于 08-16 11:32 ?3238次閱讀

    GD32 串口接受異常的幾個(gè)原因

    前面我們介紹過(guò)GD32 485發(fā)送時(shí)出現(xiàn)異常的最常見原因,有小伙伴反饋想要知道GD32 串口接受異常的可能原因,今天我們就來(lái)安排。
    的頭像 發(fā)表于 01-18 09:57 ?4762次閱讀
    <b class='flag-5'>GD32</b> <b class='flag-5'>串口</b>接受異常的幾個(gè)原因
    主站蜘蛛池模板: 国产伦子一区二区三区四区 | 欧美一级日韩一级亚洲一级 | 午夜久久精品 | 天天舔天天| 一区二区不卡视频 | 中文字幕卡二和卡三的视频 | 四虎成人免费影院网址 | 亚洲国内精品久久 | 国产精品久久在线观看 | 四虎成人影院网址 | 亚洲成人资源 | 高清午夜毛片 | 日本不卡一区在线 | 天堂在线看 | 国产精品美女免费视频观看 | 免费高清在线视频色yeye | 久久这里只有精品免费视频 | 久久香蕉综合色一综合色88 | 亚洲影视自拍揄拍愉拍 | 不卡无毒免费毛片视频观看 | 琪琪see色原网一区二区 | 天天摸天天碰成人免费视频 | 狠狠干狠狠干狠狠干 | 久久亚洲综合中文字幕 | 色多多在线观看播放 | 欧美性色黄在线视 | 色一情一乱一乱91av | 日本加勒比在线精品视频 | 一级特级女人18毛片免费视频 | 一级片成人 | 精品福利在线视频 | 亚洲一区二区在线 | 天天毛片| 男男之h啪肉np文 | 亚洲天天在线 | 91av免费观看 | 特级毛片s级全部免费 | 51午夜| 色女孩网站| 天天在线看片 | 国产精品美女免费视频大全 |