91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

3天內不再提示

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

魚鷹談單片機 ? 來源:魚鷹談單片機 ? 2023-07-18 17:40 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

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

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

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

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

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

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

cb537256-254e-11ee-962d-dac502259ad0.png

BUG 1

枚舉失敗。

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

cb75ba14-254e-11ee-962d-dac502259ad0.png

正常回應

cb8f9236-254e-11ee-962d-dac502259ad0.png

無回應

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

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

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

BUG2

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

經過邏輯分析儀發(fā)現(xiàn),發(fā)送的數(shù)據(jù)會被 NAK。后來才發(fā)現(xiàn)下面的語句不滿足,直接沒有讀 USB 數(shù)據(jù)包,從而沒有恢復接收有效狀態(tài),導致串口助手卡死。

cbad0dfc-254e-11ee-962d-dac502259ad0.png

這段官方代碼也確實比較迷,沒有最大利用緩存空間(最少需要滿一包的空間,但實際可能不滿一包),不過按下不表。

那就是第一次收到的數(shù)據(jù)未讀唄,在 main() 函數(shù)里面發(fā)現(xiàn)根本沒進來,發(fā)現(xiàn)竟然一直在 USB 中斷執(zhí)行……

void main()
 {
   while(1)
   {
    ……
     if (usb_rx_ch == -1)
            usb_rx_ch = USBD_CDC_ACM_GetChar();
    ……  
   }
}

然后看到這個標志一直在,未清除導致。

cbfbf354-254e-11ee-962d-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;
  }
  
  ……
}

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






審核編輯:劉清

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

    關注

    6

    文章

    2227

    瀏覽量

    48881
  • RAM
    RAM
    +關注

    關注

    8

    文章

    1399

    瀏覽量

    120550
  • 狀態(tài)機
    +關注

    關注

    2

    文章

    499

    瀏覽量

    29141
  • 調試器
    +關注

    關注

    1

    文章

    328

    瀏覽量

    25086
  • GD32
    +關注

    關注

    7

    文章

    432

    瀏覽量

    27343

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

文章出處:【微信號:emOsprey,微信公眾號:魚鷹談單片機】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    GD32串口DMA收發(fā)數(shù)據(jù)失敗怎么解決?

    gd32_hw_usart_init()函數(shù)中并未注冊DMA收發(fā)的方式, GD32該函數(shù)如下: 而STM32的該函數(shù)如下: 查找GD32串口操作庫中相關的一些DMA操作也缺失,不
    發(fā)表于 09-17 06:04

    什么是GD32

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

    GD32與STM32有何區(qū)別

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

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

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

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

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

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

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

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

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

    兩個實用的串口調試助手

    電子發(fā)燒友網站提供《兩個實用的串口調試助手.zip》資料免費下載
    發(fā)表于 07-22 15:22 ?8次下載

    虛擬串口VSPD

    虛擬串口,對于程序調試很有用,可以建立兩個互聯(lián)的虛擬串口,調
    發(fā)表于 01-08 12:03 ?47次下載

    GD32 DMA串口通訊DEMO

    GD32 DMA串口通訊GD32 USART0 DMA發(fā)送與接收不定長數(shù)據(jù)GD32E230簡介GD32E230采用DMA進行
    發(fā)表于 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虛擬
    發(fā)表于 12-02 16:06 ?59次下載
    stm32f103&<b class='flag-5'>gd32</b>的usb<b class='flag-5'>虛擬</b><b class='flag-5'>串口</b>,打印類printer組合設備

    關于GD32虛擬串口兩個BUG

    最近在搞調試器,折騰了好多天,終于理解了MDK、下載算法、調試器、MCU之間的關系。
    的頭像 發(fā)表于 07-25 09:55 ?3046次閱讀
    關于<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和AT32哪個好?

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

    GD32與STM32兼容嗎?

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

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

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