成人免费无码不卡毛片,亚洲AⅤ无码精品一区二区三区,国产尤物精品视频,久久精品日本亚洲,欧美成人一区三区无码乱码A片,中文字日产幕码一区二区色哟哟,亞洲日韓中文字幕網AV

  • 正文
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

串口發(fā)送函數(shù)到底要怎么寫?

2024/09/24
2103
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

上一篇文章是關(guān)于串口接收Overrun的問(wèn)題,今天接著說(shuō)串口,這次討論的是串口發(fā)送函數(shù)寫法的問(wèn)題。串口發(fā)送可以通過(guò)輪詢、中斷或者DMA方式,這里我們討論輪詢發(fā)送方式。

串口發(fā)送有兩個(gè)關(guān)鍵的標(biāo)志位:Transmit Data Register Empty Flag和Transmit Complete Flag,各家MCU寄存器名字可能略有不同,但是其實(shí)都是一個(gè)含義。比如ST MCU叫TXE和TC

NXP MCU叫TDRE和TC

復(fù)旦微MCU叫TXBE和TXSE

TXE/TDRE/TXBE為1表示發(fā)送數(shù)據(jù)寄存器為空,數(shù)據(jù)已經(jīng)發(fā)送到了移位寄存器里,這時(shí)就可以發(fā)送數(shù)據(jù)寄存器里寫數(shù)據(jù)了。

TC/TXSE為1表示發(fā)送數(shù)據(jù)寄存器為空,移位寄存器數(shù)據(jù)也為空,整個(gè)發(fā)送過(guò)程都完成了。

網(wǎng)絡(luò)上有很多關(guān)于這個(gè)話題的討論,其中有一篇文章還專門針對(duì)以下5種串口發(fā)送函數(shù)的寫法做了分析和好壞討論

寫法1:先判斷TXE,再寫數(shù)據(jù)

寫法2:先判斷TC,再寫數(shù)據(jù)

寫法3:先寫數(shù)據(jù),后判斷TXE

寫法4:先寫數(shù)據(jù),后判斷TC

寫法5:先判斷TXE,再寫數(shù)據(jù),最后判斷TC

文章最后結(jié)論是寫法5最好,真的是這樣嗎?

寫法5本身沒(méi)問(wèn)題,但是如果按照下面這種寫法呢?

也就是每個(gè)字節(jié)之間只判斷TXE標(biāo)志位,最后一個(gè)字節(jié)寫完之后判斷TC標(biāo)志位。

這種寫法相比上述5寫法完成的功能一樣的,但是減少了字節(jié)之間的時(shí)間間隔,字節(jié)和字節(jié)之間不需要去判斷TC,只需要判斷TXE就可以做到字節(jié)間無(wú)間隔發(fā)送。

比如波特率為9600bps,發(fā)送時(shí)字節(jié)之間不加TC,可以看到兩個(gè)字節(jié)之間時(shí)間為1.041ms。1/9600101000=1.041。

當(dāng)加上TC標(biāo)志判斷之后,兩個(gè)字節(jié)數(shù)據(jù)之間時(shí)間為1.145ms

兩者相差的0.104ms(1.145ms-1.041ms=0.104ms)是因?yàn)榧尤肓薚C標(biāo)志位判斷,導(dǎo)致最后高電平時(shí)間增加了104us。

至于所有字節(jié)都發(fā)送完之后,要不要去判斷一下TC,這個(gè)取決于實(shí)際應(yīng)用。

不是任何情況都需要等待TC標(biāo)志,比如循環(huán)往多個(gè)串口發(fā)送字符串,等待TC會(huì)拉長(zhǎng)操作時(shí)間。第一個(gè)串口寫完字符串,可以馬上往第二個(gè)串口寫,如果等待第一個(gè)串口最后一個(gè)字符寫完,會(huì)拉長(zhǎng)時(shí)間。

如果調(diào)用完串口發(fā)送函數(shù)后,緊接著就有關(guān)閉串口或進(jìn)入低功耗的動(dòng)作,那么就需要判斷TC標(biāo)志位,否則就可能會(huì)導(dǎo)致最后一字節(jié)數(shù)據(jù)沒(méi)有正確發(fā)出去?;蛘咂渌恍?yīng)用要求必須要等串口數(shù)據(jù)實(shí)際發(fā)送完成后才執(zhí)行其他動(dòng)作,就得加上TC標(biāo)志位的判斷。

所以這倆標(biāo)志位到底怎么用,大家搞清楚了嗎?

關(guān)注我們:掃碼加入嵌入式交流群

相關(guān)推薦

  • 在LPC55S69上實(shí)現(xiàn)的秘鑰系統(tǒng)
    方案
    1815
    2024/07/25
  • 基于單片機(jī)proteus仿真的設(shè)計(jì)作業(yè)3個(gè)實(shí)驗(yàn)串口、并口、定時(shí)器(仿真圖、源代碼)
    方案
    1019
    2024/07/25
  • 基于單片機(jī)proteus仿真的串口和計(jì)算機(jī)通信系統(tǒng)設(shè)計(jì)(仿真圖、源代碼、講解視頻)
    方案
    1472
    2024/07/25
  • 基于單片機(jī)proteus仿真的風(fēng)光互補(bǔ)充電管理系統(tǒng)設(shè)計(jì)(AD原理圖、仿真圖、源代碼、講解視頻
    方案
    2547
    2024/07/18
  • 登錄即可解鎖
    • 海量技術(shù)文章
    • 設(shè)計(jì)資源下載
    • 產(chǎn)業(yè)鏈客戶資源
    • 寫文章/發(fā)需求
    立即登錄

    TopSemic,讓芯片使用更簡(jiǎn)單。 專注分享:嵌入式,單片機(jī),STM32,ARM,RTOS,Linux, 軟硬件,半導(dǎo)體,電子技術(shù)等相關(guān)內(nèi)容。

    青神县| 松潘县| 兴隆县| 石台县| 兴化市| 石景山区| 鸡西市| 响水县| 金湖县| 福贡县| 图木舒克市| 河南省| 齐齐哈尔市| 新和县| 平度市| 孝感市| 芦山县| 浠水县| 清苑县| 手机| 阳城县| 宽甸| 沿河| 陇西县| 惠来县| 昔阳县| 库尔勒市| 呼伦贝尔市| 潼南县| 嵊州市| 化州市| 雅安市| 遂平县| 仁寿县| 锡林郭勒盟| 连江县| 兰州市| 泾源县| 全南县| 建德市| 武清区|