精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

關于GD32虛擬串口的兩個BUG

Dp1040 ? 來源:魚鷹談單片機 ? 2023-07-25 09:55 ? 次閱讀

最近在搞調試器,折騰了好多天,終于理解了MDK、下載算法、調試器、MCU之間的關系。

簡單來說就是,調試器作為USB轉SWD協議的轉換工具,MDK通過USB驅動這個工具,下載算法包含了一些MCU內部FLASH擦除、編程代碼。與普通代碼不同的是,該代碼可以下載在任意位置運行。如果需要校驗,還會加入CRC校驗代碼,扇區檢測代碼。

MDK首先通過調試器將算法寫入內部RAM,然后把需要寫入的固件程序寫入RAM,再由MDK控制(通過調試器)MCU執行相應代碼(擦除或寫入扇區),通過MCU的寄存器和設定軟件斷點得到執行結果,如此來回搬運,就可完成固件下載。

說起來簡單,做起來很麻煩(調試器工具功能簡單,只做協議轉換,如何控制通過MDK),這里點到為止,有時間會好好整理分享一下。

之后準備USB相關的工作,發現總是沒有滿意的USB CORE庫,官方的庫感覺還不錯,可惜被封裝了,看不到源碼,放棄。

之前魚鷹分享過虛擬串口的代碼,于是下載下來使用,發現竟然在GD32中用不了,當初明明ST測試沒問題的。

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

只能在線調試比較差異,借助邏輯分析儀,總算解決了這兩個BUG,順利自發自收。

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

BUG 1

枚舉失敗。

通過邏輯分析儀發現,電腦發送控制幀給USB設備,竟然沒有任何回應,即沒有NAK,也米有STALL,更不用說ACK了。

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

▲正常回應

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

▲無回應

通過調試發現,該端點接收狀態為0,禁用狀態,再參考可用代碼,發現在復位之后,應該設置為接收有效才對。因此修改如下:

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

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

BUG2

枚舉成功后,又出現另外一個問題,就是串口只能發送第一幀數據,第二次卡死……

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

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

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;
  }


  ……
}

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

審核編輯:湯梓紅

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

    關注

    146

    文章

    16984

    瀏覽量

    350294
  • 寄存器
    +關注

    關注

    31

    文章

    5317

    瀏覽量

    120002
  • 調試器
    +關注

    關注

    1

    文章

    300

    瀏覽量

    23689
  • 虛擬串口
    +關注

    關注

    3

    文章

    62

    瀏覽量

    13866
  • GD32
    +關注

    關注

    7

    文章

    403

    瀏覽量

    24219

原文標題:關于GD32虛擬串口的兩個BUG

文章出處:【微信號:玩點嵌入式,微信公眾號:玩點嵌入式】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    什么是GD32

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

    GD32與STM32有何區別

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

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

    GD32與STM32的啟動時間存在差異,為了讓GD32 MCU更準確復位(不修改可能無法復位)。12.串口通信不同點: GD32在連續發送數據的時候每
    發表于 09-26 14:28

    GD32 DMA串口通訊DEMO的相關資料推薦

    GD32 DMA串口通訊GD32 USART0 DMA發送與接收不定長數據GD32E230簡介GD32E230采用DMA進行
    發表于 12-10 06:26

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

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

    GD32串口回環的設置解析

    GD32串口IO該怎樣去設置呢?GD32串口接收該怎樣去設置呢?
    發表于 02-28 06:33

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

    STM32還是要高的。6、串口GD在連續發送數據的時候每兩個字節之間會有一Bit的Idle,而STM32沒有,如下圖。GD
    發表于 03-31 10:51

    GD32 DMA串口通訊DEMO

    GD32 DMA串口通訊GD32 USART0 DMA發送與接收不定長數據GD32E230簡介GD32E230采用DMA進行
    發表于 11-26 19:36 ?74次下載
    <b class='flag-5'>GD32</b> DMA<b class='flag-5'>串口</b>通訊DEMO

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

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

    STM32和GD32有什么區別?

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

    如何調試GD32虛擬串口兩個BUG

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

    gd32和stm32的區別

    gd32和stm32的區別 現在的市場上有很多種不同類型的微控制器,其中比較常見的有種,即gd32和stm32。種微控制器都是中國和歐洲的兩個
    的頭像 發表于 08-16 11:16 ?7089次閱讀

    GD32和AT32哪個好?

    創科技(Atmel的中國合資公司)開發。這種型號都具有自己的特點和優缺點,選擇哪一更好取決于你的具體需求。 GD32GD32是GigaDevice Semiconductor推
    的頭像 發表于 08-16 11:32 ?2305次閱讀

    GD32與STM32兼容嗎?

    GD32與STM32兼容嗎? GD32與STM32是兩個不同的微控制器系列,是由兩個不同的公司設計和生產的。GD32系列是由國內的長沙國芯微
    的頭像 發表于 08-16 11:32 ?2851次閱讀

    GD32 串口接受異常的幾個原因

    前面我們介紹過GD32 485發送時出現異常的最常見原因,有小伙伴反饋想要知道GD32 串口接受異常的可能原因,今天我們就來安排。
    的頭像 發表于 01-18 09:57 ?4111次閱讀
    <b class='flag-5'>GD32</b> <b class='flag-5'>串口</b>接受異常的幾個原因