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

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

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

3天內不再提示

芯片設計上的BUG

嵌入式電子創(chuàng)客街 ? 來源:嵌入式電子創(chuàng)客街 ? 作者:嵌入式電子創(chuàng)客街 ? 2022-10-26 09:28 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

近期白嫖君在使用GD32這款芯片時候,發(fā)現(xiàn)了一個大概率是芯片設計上的BUG,貼出來和大家分享一下。

我們在使用串口發(fā)送數據時,無非是使用兩種方法,一種是逐字節(jié)發(fā)送,另一種是DMA發(fā)送。

af7164ca-54cb-11ed-a3b6-dac502259ad0.png

一般串口發(fā)送數據前,我們需要先查看TBE標志位,判斷緩存區(qū)內是不是已經空了,如果空了我們才會往里填數據。

但是當發(fā)送緩存區(qū)為空時,并不代表我們的數據已經實際發(fā)完了,只是代表緩存區(qū)內的數據空了,這時物理意義上的發(fā)送可能還在進行中,如果你使用RS485器件,這時候把發(fā)送使能關斷的話,就會丟失一個字節(jié)的數據。

因此,一般發(fā)送完成后,需要檢查TC標志是不是已經被拉高了,以此來判斷數據線上的數據是不是確實已經發(fā)結束了。

void usart_sendbuf(uint32_t usart_periph, uint8_t *Buffer , uint16_t ucSend_num)
{        
    unsigned int i;
    usart_flag_clear(usart_periph, USART_FLAG_TC);  //在發(fā)送前要先清除TC
    for(i = 0; i < ucSend_num; i++)
    {        
        while(usart_flag_get(usart_periph, USART_FLAG_TBE) == RESET); 
        usart_data_transmit(usart_periph, Buffer[i]);
    }
while(usart_flag_get(usart_periph,USART_FLAG_TC)==RESET);
}

這次白嫖君的程序就是還按照這個套路來寫的,串口發(fā)送數據量比較大,在運行一段時間后,程序突然就死機了,查看一下,是死在了最后一行等待TC標志位這里。查看寄存器列表,TC始終為0。

af90f7fe-54cb-11ed-a3b6-dac502259ad0.png

下面是官方庫函數手冊上給出的說明:

afa87802-54cb-11ed-a3b6-dac502259ad0.png

TC標識是受單片機硬件控制的,并不受程序影響,這里無法拉高九成九就是芯片BUG了,于是白嫖君谷歌了一下,發(fā)現(xiàn)也有人遇到類似問題:

afb65058-54cb-11ed-a3b6-dac502259ad0.png

針對這種情況,硬件上無法做出改善,只能從軟件上規(guī)避了:

void usart_sendbuf(uint32_t usart_periph, uint8_t *Buffer , uint16_t ucSend_num)
{        
    uint32_t i;
    uint32_t j = 0;
    
    usart_flag_clear(usart_periph, USART_FLAG_TC);  //為了使用TC,在發(fā)送前要先清除TC
    for(i = 0; i< ucSend_num; i++)
    {        
        while(usart_flag_get(usart_periph, USART_FLAG_TBE) == RESET); 
        usart_data_transmit(usart_periph, Buffer[i]);
    }
    while(usart_flag_get(usart_periph, USART_FLAG_TC) == RESET)
    {
        if(j++ >= 0xFFFF) //在這里加超時機制
        {
            break;
        }
    }        
}

引入超時機制,當等待時間超過設定閾值,則不再等待TC置位,以此來避免程序阻塞假死。

特別注意:出現(xiàn)這種情況目前來說可能GD全系都有可能存在這個問題,且不區(qū)分是USART0還是USARTx,同時似乎只在數據量較大時會出現(xiàn)此種情況。我以前用GD的片子也不少,從沒遇見過這種情況。特此說明,避免抬杠嘛~

審核編輯 :李倩


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

    關注

    463

    文章

    54190

    瀏覽量

    467932
  • 單片機
    +關注

    關注

    6078

    文章

    45536

    瀏覽量

    672378

原文標題:國產單片機GD32 串口發(fā)送再現(xiàn)BUG?

文章出處:【微信號:嵌入式電子創(chuàng)客街,微信公眾號:嵌入式電子創(chuàng)客街】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    Linux內核bug狩獵指南:從棧跟蹤到修復,官方文檔教你搞定系統(tǒng)核心故障

    內核是 Linux 系統(tǒng)的 “心臟”—— 一旦它出 bug,小則功能異常,大則系統(tǒng)崩潰、死機。但內核 bug 往往藏在百萬行代碼中,想快速定位、修復絕非易事。
    的頭像 發(fā)表于 02-06 16:59 ?3211次閱讀
    Linux內核<b class='flag-5'>bug</b>狩獵指南:從棧跟蹤到修復,官方文檔教你搞定系統(tǒng)核心故障

    Camera應用旋轉預覽拉伸Bug:RK3588+Android 12環(huán)境下的復現(xiàn)、分析與臨時解決方案

    在移動設備 Camera 應用開發(fā)中,預覽畫面穩(wěn)定性直接影響用戶拍攝體驗。近期我們在RK3588 芯片平臺 + Android 12 系統(tǒng)環(huán)境下調試時,發(fā)現(xiàn) Camera2 應用存在高概率預覽拉伸
    的頭像 發(fā)表于 02-04 16:17 ?321次閱讀
    Camera應用旋轉預覽拉伸<b class='flag-5'>Bug</b>:RK3588+Android 12環(huán)境下的復現(xiàn)、分析與臨時解決方案

    嵌入式軟件測試找bug的常見方法和秘訣

    “我怎么才能使程序跑得更快”、“什么編譯器最好”等問題。 面對這個不同尋常卻異乎成熟的問題,可能很多人都不知道怎么辦,下面就來講講軟件測試找bug常見方法和秘訣。 1懂得使用工具 通常嵌入式系統(tǒng)
    發(fā)表于 01-12 07:07

    芯片封裝方式終極指南(

    這是一份涉及芯片封裝幾乎所有關鍵概念的終極指南,它可以幫助您全面了解芯片的封裝方式以及未來互連技術的發(fā)展趨勢。
    的頭像 發(fā)表于 11-27 09:31 ?3915次閱讀
    <b class='flag-5'>芯片</b>封裝方式終極指南(<b class='flag-5'>上</b>)

    芯片制造的毫微之戰(zhàn):去膠工藝定成敗# 芯片#

    芯片
    華林科納半導體設備制造
    發(fā)布于 :2025年09月17日 16:26:50

    聊聊東芝TB67S109AFTG芯片在釣魚設備的應用體驗

    極步進電機驅動芯片,采用BiCD工藝,支持50V/4A的驅動能力。最大的特點是支持最高1/32步的細分控制,內置PWM斬波恒流驅動,還有多種保護功能。 在釣魚設備的實際表現(xiàn) 靜音運行效果明顯 在實際測試中,這款芯片的靜音表現(xiàn)令
    的頭像 發(fā)表于 09-15 15:17 ?758次閱讀

    飛騰主板芯片組X100能起到什么作用?

    飛騰主板芯片組X100作為飛騰處理器的重要配套芯片,在計算機系統(tǒng)中承擔著多元且關鍵的作用,主要體現(xiàn)在圖形圖像處理與接口擴展兩大核心功能領域。
    的頭像 發(fā)表于 07-28 09:25 ?745次閱讀

    STM32CubeMX初始配置沖突的BUG怎么處理?

    發(fā)現(xiàn)了一個BUG,比如我們在使用開發(fā)板進行板載按鍵中斷配置的時候,如果開啟板子資源初始化配置,我們再自行配置一下后,產生了一個不識別的外部中斷處理函數
    發(fā)表于 07-22 08:02

    請問STM32新出的芯片USB還需要拉電阻嗎?

    我記得F103的USB需要拉個電阻,STM32新出的芯片USB還需要拉電阻嗎?例如H5系列
    發(fā)表于 07-18 06:40

    針對晶圓芯片工藝的光刻膠剝離方法及白光干涉儀在光刻圖形的測量

    引言 在晶圓芯片制造工藝中,光刻膠剝離是承上啟下的關鍵環(huán)節(jié),其效果直接影響芯片性能與良率。同時,光刻圖形的精確測量是保障工藝精度的重要手段。本文將介紹適用于晶圓芯片工藝的光刻膠剝離方
    的頭像 發(fā)表于 06-25 10:19 ?1163次閱讀
    針對晶圓<b class='flag-5'>上</b><b class='flag-5'>芯片</b>工藝的光刻膠剝離方法及白光干涉儀在光刻圖形的測量

    芯知識|語音芯片發(fā)碼無聲解析:電無聲、連發(fā)指令才響的三大根源及解決之道

    在嵌入式語音方案開發(fā)中,廣州唯創(chuàng)電子語音芯片(如WT系列)以其高性價比和易用性廣受青睞。但當開發(fā)者遭遇“電發(fā)碼無聲”或“必須連發(fā)兩次指令才有聲音”的問題時,往往陷入調試困境。本文將深入剖析這些現(xiàn)象
    的頭像 發(fā)表于 06-19 09:14 ?1113次閱讀
    芯知識|語音<b class='flag-5'>芯片</b>發(fā)碼無聲解析:<b class='flag-5'>上</b>電無聲、連發(fā)指令才響的三大根源及解決之道

    芯知識|WT2003H 語音芯片模擬U盤功能詳解:電初始化時間解析

    擺脫了傳統(tǒng)語音芯片依賴專用燒錄器和復雜協(xié)議的束縛,大幅提升了開發(fā)和生產效率。然而,與這一強大便利性相伴的是一個重要的技術細節(jié):電初始化時間。關鍵特性:較長的電初
    的頭像 發(fā)表于 06-12 08:52 ?840次閱讀
    芯知識|WT2003H 語音<b class='flag-5'>芯片</b>模擬U盤功能詳解:<b class='flag-5'>上</b>電初始化時間解析

    如何在Android設備安裝Cyusb3014芯片驅動?

    1.如何在Android設備安裝Cyusb3014芯片驅動? 我們在 Windows 上有 FX3 驅動程序 SDK。 2.如何在Android系統(tǒng)上下載固件到芯片中?
    發(fā)表于 05-15 07:23