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

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

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

3天內不再提示

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

魚鷹談單片機 ? 來源:魚鷹談單片機 ? 2023-07-18 17:40 ? 次閱讀

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

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

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

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

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

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

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

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

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

BUG 1

枚舉失敗。

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

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

正?;貞?/p>

cb8f9236-254e-11ee-962d-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 數據包,從而沒有恢復接收有效狀態,導致串口助手卡死。

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

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

那就是第一次收到的數據未讀唄,在 main() 函數里面發現根本沒進來,發現竟然一直在 USB 中斷執行……

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

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






審核編輯:劉清

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

    關注

    6

    文章

    1974

    瀏覽量

    45694
  • RAM
    RAM
    +關注

    關注

    8

    文章

    1369

    瀏覽量

    115089
  • 狀態機
    +關注

    關注

    2

    文章

    492

    瀏覽量

    27686
  • 調試器
    +關注

    關注

    1

    文章

    306

    瀏覽量

    23856
  • GD32
    +關注

    關注

    7

    文章

    416

    瀏覽量

    24520

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

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

收藏 人收藏

    評論

    相關推薦

    什么是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 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

    兩個實用的串口調試助手

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

    虛擬串口VSPD

    虛擬串口,對于程序調試很有用,可以建立兩個互聯的虛擬串口,調
    發表于 01-08 12:03 ?46次下載

    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組合設備

    關于GD32虛擬串口兩個BUG

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

    GD32和AT32哪個好?

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

    GD32與STM32兼容嗎?

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

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

    前面我們介紹過GD32 485發送時出現異常的最常見原因,有小伙伴反饋想要知道GD32 串口接受異常的可能原因,今天我們就來安排。
    的頭像 發表于 01-18 09:57 ?4452次閱讀
    <b class='flag-5'>GD32</b> <b class='flag-5'>串口</b>接受異常的幾個原因
    主站蜘蛛池模板: 一级特黄国产高清毛片97看片 | 久久奇米 | 日本资源在线观看 | 国产三级视频 | 午夜亚洲福利 | 黄色日本视频 | 口述他拿舌头进去我下面好爽 | 色多网站免费视频 | 视频精品一区二区三区 | 国产色产综合色产在线观看视频 | 伊人啪| www.激情网.com | 特黄日韩免费一区二区三区 | 久久久久久久久久免免费精品 | 磁力bt种子搜索在线 | 亚洲午夜精品久久久久久抢 | 亚洲成人免费在线 | 国产在线精品观看 | 亚洲2020天天堂在线观看 | 美女拍拍拍爽爽爽爽爽爽 | 热99热| 狠狠噜天天噜日日噜 | 天天操网 | 18男女很黄的视频 | 午夜视频在线免费观看 | 自偷自拍亚洲欧美清纯唯美 | 理论视频在线观看 | 一本大道高清在线视频 视频 | 一级片在线免费播放 | 日韩av线观看 | 首页 亚洲 欧美 制服 丝腿 | 婷婷久久五月天 | 亚欧毛片基地国产毛片基地 | 91精品久久国产青草 | 女人被免费网站视频在线 | 日韩毛片在线 | 男女一区二区三区免费 | 人人玩人人弄人人曰 | 日本黄色大片在线观看 | 免费视频一区二区性色 | 国产欧美亚洲精品第二区首页 |