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

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

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

串口發(fā)送的這幾種寫法,你用過幾種?

jf_pJlTbmA9 ? 來源:jf_pJlTbmA9 ? 作者:jf_pJlTbmA9 ? 2023-11-02 16:20 ? 次閱讀

一、STM32用USART發(fā)送字符串

void UART_Send_Message(u8 *Data)
{
  while(*Data!='?')
  {
      USART_SendData(USART1, *Data);
      while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);//讀取串口狀態(tài)
      Data++;
  }
}
 
void main(void)
{
  u8 str_buf[500];
  memset((char *)  str_buf, 0, sizeof(str_buf));
  UART_Send_Message(str_buf);
}

pYYBAGIB2JCANeDlAABaPG26uyU307.jpg
poYBAGIB2JKAAgOoAADcQH4C2Vw401.jpg

while(SET == USART_GetFlagStatus(USART1,USART_FLAG_RXNE));

含義是:當(dāng)接收引腳有數(shù)據(jù)時(shí),狀態(tài)寄存器的USART_FLAG_RXNE就會(huì)為1,此時(shí)USART_GetFlagStatus(USART1,USART_FLAG_RXNE)的返回值就為1(SET),若無數(shù)據(jù)則為RESET。

二、USART_FLAG_TXE和USART_FLAG_TC怎么用

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

特殊情況指的是:

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

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

【上面兩種主要用于芯片電源控制的項(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ù)】:

常見寫法一

poYBAGIB2JSAYHr3AAALTrKKaP4183.png
pYYBAGIB2JWAEg8vAAAdFRfPn5I835.png

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

2、常見寫法二

pYYBAGIB2JeAQgDlAAAKWjsaLQQ970.png
poYBAGIB2JiAVDcbAAAc5wK0SCo307.png

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

3、常見寫法三

poYBAGIB2JmAOj7BAAALWgTxmTA496.png
pYYBAGIB2JqAEEQAAAAdF6NcPn4113.png

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

4、寫法四

pYYBAGIB2JuAP9qiAAAJIDOgFXs339.png
poYBAGIB2J2AGqmWAAAgHdBothY493.png

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

5、寫法五(正確寫法)

poYBAGIB2J6AVfi8AAAJtYBIDMc825.png
pYYBAGIB2J-AUs4EAAAdl4VsIbs308.png

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

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

審核編輯:湯梓紅

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

    關(guān)注

    2263

    文章

    10846

    瀏覽量

    353763
  • 串口
    +關(guān)注

    關(guān)注

    14

    文章

    1535

    瀏覽量

    75885
  • USART
    +關(guān)注

    關(guān)注

    1

    文章

    195

    瀏覽量

    30740
收藏 人收藏

    評論

    相關(guān)推薦

    柵漏電流噪聲有哪幾種模型?這幾種模型有什么局限性?

    常見的柵漏電流噪聲模型有哪幾種,這幾種模型的特性是什么?有什么局限性?
    發(fā)表于 04-09 06:44

    柵漏電流噪聲有哪幾種模型?這幾種模型具有什么特性和局限性?

    柵漏電流噪聲特性是什么?柵漏電流噪聲有哪幾種模型?這幾種模型具有什么特性和局限性?
    發(fā)表于 04-14 06:53

    這幾種常見的薄膜電阻器都了解嗎?

    這幾種常見的薄膜電阻器都了解嗎?
    發(fā)表于 06-07 06:30

    常見的整流電路有哪幾種?如何去區(qū)分這幾種常見的整流電路?

    常見的整流電路有哪幾種?其特性是什么?如何去區(qū)分這幾種常見的整流電路?對整流電路中二極管的要求有哪些?
    發(fā)表于 07-11 07:19

    什么是串口通信?串口通信的基本方式有哪幾種?

    什么是串口通信?串口通信的基本方式有哪幾種?異步數(shù)據(jù)的數(shù)據(jù)發(fā)送過程有哪些步驟?串口通信的數(shù)據(jù)格式是怎樣的?
    發(fā)表于 07-16 08:21

    如何使用bxCAN過濾器的這幾種工作模式呢

    bxCAN過濾器的工作模式有哪幾種?如何使用bxCAN過濾器的這幾種工作模式呢?對應(yīng)的代碼示例是怎樣的?
    發(fā)表于 11-01 07:07

    串口接收/發(fā)送有哪幾種模式?

    串口接收/發(fā)送有哪幾種模式?
    發(fā)表于 12-09 08:02

    串口發(fā)送數(shù)據(jù)的方式有哪幾種?

    串口發(fā)送數(shù)據(jù)的方式有哪幾種?
    發(fā)表于 12-10 07:49

    STM32串口數(shù)據(jù)的接收與發(fā)送處理的幾種模式分別是哪些

    STM32串口發(fā)送數(shù)據(jù)為什么會(huì)丟失呢?怎樣去解決?STM32串口數(shù)據(jù)的接收與發(fā)送處理的幾種模式分別是哪些?
    發(fā)表于 12-10 07:37

    C語言的main函數(shù)有幾種寫法

    從學(xué)習(xí)C語言開始就一直寫個(gè)一個(gè)函數(shù),那么知道它的標(biāo)準(zhǔn)寫法什么什么樣嗎? main函數(shù),又稱主函數(shù),是程序執(zhí)行的起點(diǎn),我們平時(shí)寫的main函數(shù)是什么樣呢? 1,是這樣? main(){} 2,還是
    的頭像 發(fā)表于 10-15 11:04 ?3250次閱讀

    串口發(fā)送這幾種寫法,用過幾種

    它們分別表示數(shù)據(jù)在發(fā)送過程中,在兩個(gè)不同的階段中的完成情況。TXE 表示數(shù)據(jù)被從發(fā)送緩沖區(qū)中取走,轉(zhuǎn)移到的移位寄存器中,此時(shí)發(fā)送緩沖是空的,可以向其中補(bǔ)充新的數(shù)據(jù)了。而 TC 則表示最后放入發(fā)
    發(fā)表于 02-08 15:16 ?2次下載
    <b class='flag-5'>串口</b><b class='flag-5'>發(fā)送</b>的<b class='flag-5'>這幾種</b><b class='flag-5'>寫法</b>,<b class='flag-5'>你</b><b class='flag-5'>用過</b><b class='flag-5'>幾種</b>?

    這幾種MOS管“擊穿”,了解嗎?

    MOSFET的擊穿有哪幾種?Source、Drain、Gate,場效應(yīng)管的三極:源級S 漏級D 柵級G,(這里不講柵極GOX擊穿了啊,只針對漏極電壓擊穿)。
    發(fā)表于 02-09 11:42 ?16次下載
    <b class='flag-5'>這幾種</b>MOS管“擊穿”,<b class='flag-5'>你</b>了解嗎?

    LABVIEW打開調(diào)用子VI的幾種辦法

    總結(jié)了LABVIEW打開調(diào)用子VI的幾種辦法,程序寫法
    發(fā)表于 08-20 15:31 ?51次下載

    對HPM6750的這幾種調(diào)試方式展開介紹

    HPM6750支持jlink、dap和ft2232等多種調(diào)試方式,本文將對這幾種調(diào)試方式展開介紹,方便大家靈活選用不同的調(diào)試方式。
    的頭像 發(fā)表于 02-01 09:56 ?3435次閱讀

    串口屏的幾種安裝方式

    串口屏的幾種安裝方式
    的頭像 發(fā)表于 05-10 11:28 ?1412次閱讀