0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

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

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

關(guān)于 USART很多人都容易忽視的一個(gè)問題

黃工的嵌入式技術(shù)圈 ? 來源:黃工的嵌入式技術(shù)圈 ? 2020-03-24 11:38 ? 次閱讀

Ⅰ、寫在前面

今天這篇文章分享的知識(shí)點(diǎn)比較少,但比較重要,是大部分人在實(shí)際項(xiàng)目開發(fā)中都容易忽視,且容易犯下的低級(jí)錯(cuò)誤。

本文講述在項(xiàng)目開發(fā)中,或在學(xué)習(xí)中經(jīng)常遇到USART發(fā)送字符串,對(duì)方?jīng)]有接收完成(最后一兩字節(jié)),也就是最后字節(jié)數(shù)據(jù)丟失了。具體可以看下面章節(jié)實(shí)驗(yàn)。

關(guān)于本文的更多詳情請(qǐng)往下看。

Ⅱ、實(shí)例工程

為了方便大家學(xué)習(xí),提供實(shí)驗(yàn)源代碼工程給大家參考。

STM32F10x_SART(驗(yàn)證USART發(fā)送字符串):

https://yunpan.cn/ckInh8YTwWHVP訪問密碼 81f9

提供下載的實(shí)例實(shí)現(xiàn)的功能比較簡(jiǎn)單,主要是用于驗(yàn)證不同情況下,發(fā)送字符的不同。

實(shí)例實(shí)現(xiàn)功能可以從下面main函數(shù)中看的出來,打印數(shù)據(jù),進(jìn)入待機(jī)。為了方便用戶進(jìn)入待機(jī)不能下載程序,例程使用了一個(gè)喚醒按鍵PC13(可以修改),喚醒有一個(gè)LED閃爍和延時(shí),這個(gè)期間可以重新下載代碼。

Ⅲ、本文要點(diǎn)

這里主要說的是在特殊情況下發(fā)送字符軟件代碼的寫法。

特殊情況指的是:

1.調(diào)用發(fā)送字符串函數(shù)“發(fā)送完”本機(jī)立即掉電;

2.調(diào)用發(fā)送字符串函數(shù)“發(fā)送完”從機(jī)立即掉電;

【上面兩種主要用于芯片對(duì)電源控制的項(xiàng)目中】

3.調(diào)用發(fā)送字符串函數(shù)“發(fā)送完”立刻進(jìn)入待機(jī)或停機(jī);

其實(shí)本文主要說的是兩個(gè)標(biāo)志位:USART_FLAG_TXE 和 USART_FLAG_TC.

USART_FLAG_TXE發(fā)送緩沖區(qū)空標(biāo)志:說明可以往數(shù)據(jù)寄存器寫入數(shù)據(jù)了,但并不代碼數(shù)據(jù)發(fā)送完成了。

USART_FLAG_TC發(fā)送完成標(biāo)志:這個(gè)才是代表USART在緩沖區(qū)的數(shù)據(jù)發(fā)送完成了,即從機(jī)接收到了數(shù)據(jù)。

這兩個(gè)標(biāo)志的區(qū)別在于:它們分別表示數(shù)據(jù)在發(fā)送過程中,在兩個(gè)不同的階段中的完成情況。TXE 表示數(shù)據(jù)被從發(fā)送緩沖區(qū)中取走,轉(zhuǎn)移到的移位寄存器中,此時(shí)發(fā)送緩沖是空的,可以向其中補(bǔ)充新的數(shù)據(jù)了。而 TC 則表示最后放入發(fā)送緩沖區(qū)的數(shù)據(jù)已經(jīng)完成了從移位寄存器向發(fā)送信號(hào)線 Tx 上的轉(zhuǎn)移。所以,判定數(shù)據(jù)最終發(fā)送完成的標(biāo)志是 TC,而不是 TXE.

下面講述在不同代碼寫法下,得到不同實(shí)驗(yàn)效果【調(diào)試助手接收數(shù)據(jù)】:

1.常見寫法一

這種寫法在不是特殊(不掉電、不待機(jī)等)情況下,問題不大,USART數(shù)據(jù)會(huì)成功發(fā)送出去。 但是在上面說的特殊情況下,問題就來了,代碼只將數(shù)據(jù)放到了發(fā)送緩沖區(qū),而沒有發(fā)送出去就掉電或待機(jī)了,這個(gè)時(shí)候其實(shí)最后兩個(gè)字符是沒有發(fā)送出去的。

2.常見寫法二

這種寫法達(dá)到的效果和上面存在不同的就是倒數(shù)第二個(gè)數(shù)據(jù)發(fā)送出去了,也就是只有最后一個(gè)字符是沒有發(fā)送出去的。

3.常見寫法三


這種寫法達(dá)到的效果和上面兩種寫法有不一樣,發(fā)送了10個(gè)字符。

4.寫法四


這種寫法按理說可以實(shí)現(xiàn)功能,但實(shí)際多次試驗(yàn)結(jié)果確實(shí)第一字節(jié)數(shù)據(jù)丟失了。

5.寫法五(正確寫法)


這種寫法是比較完成,為了保守起見,在特殊情況下使用該寫法。。

至此,常見軟件寫法都給出了源代碼和試驗(yàn)效果,請(qǐng)根據(jù)自己實(shí)際情況寫代碼驗(yàn)證。

Ⅳ、說明

以上幾點(diǎn)內(nèi)容比較容易出現(xiàn)問題,希望對(duì)你項(xiàng)目開發(fā)起到幫助作用。

以上總結(jié)僅供參考,若有不對(duì)之處,敬請(qǐng)諒解。

聲明:本文內(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)投訴
  • 源代碼
    +關(guān)注

    關(guān)注

    96

    文章

    2952

    瀏覽量

    68087
  • USAR
    +關(guān)注

    關(guān)注

    0

    文章

    4

    瀏覽量

    8478
  • main
    +關(guān)注

    關(guān)注

    0

    文章

    38

    瀏覽量

    6372
收藏 0人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    第十四章 USART——串口通訊

    本章介紹了USART串口通訊,含物理層(RS-232、TTL電平)、協(xié)議層(波特率、數(shù)據(jù)幀),及W55MH32的USART功能與應(yīng)用。
    的頭像 發(fā)表于 06-14 16:30 ?639次閱讀
    第十四章 <b class='flag-5'>USART</b>——串口通訊

    安富利推出個(gè)人安全追蹤器解決方案

    個(gè)人安全問題在日常生活中常常容易忽視,尤其是在獨(dú)處、探險(xiǎn)或是身處偏遠(yuǎn)地帶時(shí),很多人可能未能充分認(rèn)識(shí)到潛在的風(fēng)險(xiǎn)。例如,遇到迷路、自然災(zāi)害、意外事故等突發(fā)狀況時(shí),我們?cè)撊绾吻缶龋?/div>
    的頭像 發(fā)表于 05-22 13:45 ?238次閱讀
    安富利推出個(gè)人安全追蹤器解決方案

    ESD防護(hù)設(shè)計(jì)中的10個(gè)常見誤區(qū),你中招了嗎?

    在現(xiàn)代電子產(chǎn)品中,ESD(靜電放電)防護(hù)已成為設(shè)計(jì)中不可忽視環(huán)。然而,即便是經(jīng)驗(yàn)豐富的工程師,也常會(huì)在ESD設(shè)計(jì)中掉進(jìn)些看似“理所當(dāng)然”的誤區(qū)。以下總結(jié)了10個(gè)在實(shí)際設(shè)計(jì)中最常見
    的頭像 發(fā)表于 04-24 09:51 ?302次閱讀
    ESD防護(hù)設(shè)計(jì)中的10<b class='flag-5'>個(gè)</b>常見誤區(qū),你中招了嗎?

    STM32學(xué)習(xí)USART之基礎(chǔ)篇(可下載)

    今天分享 USART 設(shè)計(jì)前的基礎(chǔ)知識(shí)我們先來了解下有關(guān)通信的基本概念:通信:兩個(gè)設(shè)備之間進(jìn)行數(shù)據(jù)交換時(shí),稱這個(gè)過程為兩個(gè)設(shè)備間的通信并行通信:設(shè)備之間的數(shù)據(jù)是以
    發(fā)表于 03-31 15:07 ?4次下載

    stm32g0b1中的usart5進(jìn)不去HAL_UARTEx_RxEventCallback,為什么?

    請(qǐng)教一下關(guān)于stm32g系列的問題,stm32g0b1中的usart5進(jìn)不去HAL_UARTEx_RxEventCallback,cudemx上配置跟其他串口也是樣的,打開中斷了,
    發(fā)表于 03-13 06:51

    為什么IIC總線會(huì)難住這么多人

    為什么 IIC 總線讓很多人頭疼?其實(shí)可以把它想象成場(chǎng)復(fù)雜的 "設(shè)備對(duì)話游戲",新手容易在這些地方栽跟頭:
    的頭像 發(fā)表于 03-12 10:14 ?463次閱讀
    為什么IIC總線會(huì)難住這么<b class='flag-5'>多人</b>?

    如何使用DMA進(jìn)行USART不定長度接收

    在上講中,我們對(duì)USART進(jìn)行了簡(jiǎn)單介紹,并講解了如何在不使用DMA的情況下進(jìn)行不定長度數(shù)據(jù)接收,本講將著重講解如何使用DMA進(jìn)行USART不定長度接收。
    的頭像 發(fā)表于 02-18 17:01 ?857次閱讀
    如何使用DMA進(jìn)行<b class='flag-5'>USART</b>不定長度接收

    為什么很多古建筑、寺容易著火?

    、安全用電隱患 線路老化:古建筑寺廟建成時(shí)間久,部分電氣線路可能使用多年未更新,絕緣層老化、破損,容易引發(fā)漏電、短路事故,進(jìn)而可能引發(fā)火災(zāi)。安科瑞+武陳燕+17269603655 過載用電:隨著
    的頭像 發(fā)表于 12-25 15:32 ?690次閱讀
    為什么<b class='flag-5'>很多</b>古建筑、寺<b class='flag-5'>容易</b>著火?

    高速、RF射頻信號(hào)的參考平面分析

    對(duì)于個(gè)電子愛好者來說,在PCB設(shè)計(jì)中,參考平面的問題經(jīng)常讓很多人感到困惑。眾所周知,電源平面可以作為參考平面,常見的6層板采用電源層
    的頭像 發(fā)表于 12-25 11:37 ?587次閱讀
    高速、RF射頻信號(hào)的參考平面分析

    電平匹配問題,簡(jiǎn)單卻容易忽視

    導(dǎo)讀在電路設(shè)計(jì)中,電平匹配是個(gè)基本要求,但常常被忽視,可能導(dǎo)致設(shè)備故障和通信異常。本文我們將揭示如何避免因電平不匹配導(dǎo)致的設(shè)備故障,并提供實(shí)用的設(shè)計(jì)建議,確保您的電路設(shè)計(jì)既高效又穩(wěn)定。電平匹配
    的頭像 發(fā)表于 12-20 11:34 ?1116次閱讀
    電平匹配問題,簡(jiǎn)單卻<b class='flag-5'>容易</b>被<b class='flag-5'>忽視</b>

    掌握調(diào)試技巧是攻克嵌入式學(xué)習(xí)難點(diǎn)的關(guān)鍵

    為什么很多人說嵌入式開發(fā)很難? 其實(shí),嵌入式開發(fā)的難度相對(duì)來說不算大,只是嵌入式開發(fā)會(huì)遇到各種各樣奇奇怪怪的問題,問題多了,很多人就覺得難。 如果把這些問題一個(gè)一個(gè)拆解開來看,其實(shí)都是小問題。今天
    的頭像 發(fā)表于 11-18 11:10 ?805次閱讀
    掌握調(diào)試技巧是攻克嵌入式學(xué)習(xí)難點(diǎn)的關(guān)鍵

    文看懂為什么貼片共模電感的感量在電路中會(huì)不穩(wěn)定

    的參數(shù)。本篇我們來探討個(gè)很多人關(guān)心的問題——貼片共模電感在電路中為什么會(huì)感量突然變化。 ? 結(jié)合多年的實(shí)踐經(jīng)驗(yàn),我們可以將引起貼片共模電感量突變的原因歸納為以下幾點(diǎn): 1. 溫度變化的影響:電感量通常與溫度變化有關(guān)
    的頭像 發(fā)表于 11-03 16:39 ?724次閱讀

    【GD32 MCU 入門教程】GD32 MCU 常見外設(shè)介紹(10)USART 模塊介紹

    通用同步異步收發(fā)器(USART) 提供了個(gè)靈活方便的串行數(shù)據(jù)交換接口,數(shù)據(jù)幀可以通過全雙工或半雙工,同步或異步的方式進(jìn)行傳輸。 USART提供了可編程的波特率發(fā)生器,能對(duì)UCLK(P
    的頭像 發(fā)表于 08-19 09:25 ?2029次閱讀
    【GD32 MCU 入門教程】GD32 MCU 常見外設(shè)介紹(10)<b class='flag-5'>USART</b> 模塊介紹

    NAS工具軟件大盤點(diǎn):瞧瞧哪個(gè)被你遺漏了

    很多人聽說過NAS,也有很多人正在使用NAS。 NAS用戶通常需要安裝些軟件來擴(kuò)展其功能,畢竟NAS的功能實(shí)在是太多了,光是部署與調(diào)試就要耗費(fèi)大量的時(shí)間, 小寶集合了NAS相關(guān)實(shí)用
    的頭像 發(fā)表于 08-01 16:26 ?2259次閱讀

    創(chuàng)建Aurix項(xiàng)目失敗怎么解決?

    我嘗試創(chuàng)建個(gè)新的 Aurix 項(xiàng)目,但點(diǎn)擊底部的 &quot;完成 &quot;后,沒有創(chuàng)建新文件,工作區(qū)仍然是空的。 我在論壇上搜索了這個(gè)問題,發(fā)現(xiàn)很多人遇到過這
    發(fā)表于 07-23 07:49

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品