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

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

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

了解在MCU中實現(xiàn)串口的不定長數(shù)據(jù)包接收的過程

5RJg_mcuworld ? 來源:未知 ? 作者:工程師郭婷 ? 2018-08-03 16:37 ? 次閱讀

MCU的應用中,經(jīng)常需要通過串口進行不定長數(shù)據(jù)包的傳輸。發(fā)送方很簡單,不需特別的考慮,而接收方則需要能夠偵測到數(shù)據(jù)包的結束。接收方的簡單做法是結合串口的IDLE中斷,或使用DMA并利用DMA的超時傳輸機制。

但有些MCU在設計時出于成本上的考慮,簡化了串口接收的IDLE模式以及DMA超時傳輸機制。沒有串口IDLE中斷或者DMA超時傳輸?shù)臋C制,我們就不知道什么時候通信結束了。這種情況下,為了實現(xiàn)通過串口傳輸不定長數(shù)據(jù)包的要求,需要使用軟件和其它片內(nèi)外設的配合,協(xié)同完成指定的功能。

LPC54101系列的UART模塊,支持FIFO的接收超時,能夠方便地實現(xiàn)上述功能。除此之外,本文介紹一種基于LPC54101和SDK,通過使用引腳中斷和定時器配合,實現(xiàn)串口DMA接收超時,實現(xiàn)串口DMA接收超時的機制。

先分析下UART傳輸?shù)臅r序,圖1是一個典型的8位數(shù)據(jù)位1位停止位的串口通信數(shù)據(jù)流。串口每次發(fā)送數(shù)據(jù)時會首先發(fā)送一個起始位,在TTL電平邏輯下,Start位首先是一個下降沿信號

了解在MCU中實現(xiàn)串口的不定長數(shù)據(jù)包接收的過程

圖1. 串口接收數(shù)據(jù)時序圖

在串口DMA接收超時系統(tǒng)中,我們需要利用MCU的引腳中斷功能偵測這個下降沿信號,引腳中斷觸發(fā)后告訴系統(tǒng)開始計時。要特別注意的是,當系統(tǒng)偵測到Start位的下降沿后最好關閉引腳中斷,不然后續(xù)數(shù)據(jù)流等信號的下降沿也會觸發(fā)引腳中斷使得整套方案失去了意義(還不如直接用串口接收完成中斷)。

LPC54101的引腳中斷可以在任意IO引腳上使能,所以可以直接把LPC54101的串口接收的引腳的中斷功能打開,并設置成下降沿觸發(fā)。

超時計數(shù)器最好是系統(tǒng)里的低功耗定時器,這個例程中我們用的是LPC54101的RIT定時器。超時的時間設置要考慮到當前串口設置的波特率以及一次串口傳輸?shù)淖畲蟀L。

超時定時器計數(shù)溢出產(chǎn)生中斷后,軟件首先要從DMA的狀態(tài)寄存器中獲取到當前接收到數(shù)據(jù)的長度(對于LPC54101來說,串口DMA接收數(shù)據(jù)的長度在XFERCFGn寄存器中的XFERCOUNT位,如圖2所示),然后從串口DMA預設置的數(shù)據(jù)緩沖區(qū)獲取對應的數(shù)據(jù)即可。

了解在MCU中實現(xiàn)串口的不定長數(shù)據(jù)包接收的過程

圖2. LPC54101 DMA傳輸數(shù)據(jù)長度計數(shù)位

在初始化設置串口對應的DMA通道時,最好設置傳輸長度為可能的最大長度,在接收超時后也別忘記重新復位一下串口對應DMA通道的狀態(tài),不然本次接收的數(shù)據(jù)和數(shù)據(jù)長度還會帶入下次傳輸?shù)倪^程中。

圖3是例程的流程圖,分主程序,串口RX引腳中斷服務程序,超時定時器服務程序三個部分。

了解在MCU中實現(xiàn)串口的不定長數(shù)據(jù)包接收的過程

了解在MCU中實現(xiàn)串口的不定長數(shù)據(jù)包接收的過程

了解在MCU中實現(xiàn)串口的不定長數(shù)據(jù)包接收的過程

圖3. 程序流程圖

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

    關注

    146

    文章

    16665

    瀏覽量

    347753
  • 串口
    +關注

    關注

    14

    文章

    1533

    瀏覽量

    75455

原文標題:在MCU中,如何實現(xiàn)串口的不定長數(shù)據(jù)包接收?

文章出處:【微信號:mcuworld,微信公眾號:嵌入式資訊精選】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Iphone4上運行UDP接收器,數(shù)據(jù)包丟失怎么解決?

    ;255.255.255.255\",48899 現(xiàn)在使用 AT CIPSEND 每秒發(fā)送 1 個數(shù)據(jù)包 并非所有的Iphone似乎都受到嚴重的影響,但Iphone4是最糟糕的。
    發(fā)表于 07-18 06:56

    AN65974數(shù)據(jù)包和零長數(shù)據(jù)包是什么意思?

    AN65974 ,短數(shù)據(jù)包和零長數(shù)據(jù)包是什么意思? 非常感謝!
    發(fā)表于 05-30 07:41

    如何在AIROC GUI上獲取良好數(shù)據(jù)包和總數(shù)據(jù)包

    使用 IQxel-MW LifePoint 作為發(fā)生器并發(fā)送波形BT_1DH5_00001111_Fs80M.iqvsg,但無法 AIROC 工具接收數(shù)據(jù)包。 以下是從 IQxel
    發(fā)表于 05-22 06:39

    求助,關于串口數(shù)據(jù)解析疑問求解

    過來,正在中斷里面接收數(shù)據(jù),此時又來一條,那么串口會不會繼續(xù)接數(shù)據(jù)進來? 4. 接收數(shù)據(jù)
    發(fā)表于 04-29 06:34

    stm32f103通過UART_RX空閑中斷服務函數(shù)接收不定長數(shù)據(jù),運行一段時間后會進入HardFault_Handler的原因?

    目的:通過UART RX DMA + UART空閑中斷接收不定長數(shù)據(jù)。 描述:打開UART_RX_DMA接收,通過UART_RX空閑中斷服務函數(shù)
    發(fā)表于 04-26 06:43

    STM32F030串口用IDLE中斷接收不定長度數(shù)據(jù)包,中斷異常的原因?

    如題,使用IDLE中斷接收不定長度的數(shù)據(jù)包,發(fā)現(xiàn)程序一直處于IDLE中斷。程序如下 串口配置
    發(fā)表于 04-12 06:08

    用STM32F030F4串口空閑中斷接收不定長數(shù)據(jù),發(fā)生中斷后不知道如何計算接收到的字節(jié)數(shù)?

    我用STM32F030F4串口空閑中斷接收不定長數(shù)據(jù),發(fā)生中斷后不知道怎樣計算接收到的字節(jié)數(shù)。
    發(fā)表于 04-03 07:12

    stm32f103如何實現(xiàn)spi從機接收不定長數(shù)據(jù)

    stm32f103 如何實現(xiàn)spi從機接收不定長數(shù)據(jù)數(shù)據(jù)首字節(jié)說明了數(shù)據(jù)長度) 求個思路或例程
    發(fā)表于 03-28 07:47

    STM32H7接收數(shù)據(jù)包異常,一接收數(shù)據(jù)出現(xiàn)兩發(fā)送的內(nèi)容怎么解決?

    、接收到的數(shù)據(jù)包:be1c01016de1000000000000000001000000000000000200000000000000030000000000000082ed 前4個字
    發(fā)表于 03-08 08:05

    DPDKAI驅(qū)動的高效數(shù)據(jù)包處理應用

    傳統(tǒng)的數(shù)據(jù)包處理方式是數(shù)據(jù)包先到內(nèi)核最后再到用戶層進行處理。這種方式會增加額外的延遲和CPU開銷,嚴重影響數(shù)據(jù)包處理的性能。 DPDK 繞過內(nèi)核,在用戶空間中實現(xiàn)快速
    的頭像 發(fā)表于 02-25 11:28 ?713次閱讀
    DPDK<b class='flag-5'>在</b>AI驅(qū)動的高效<b class='flag-5'>數(shù)據(jù)包</b>處理應用

    stm32虛擬串口接收數(shù)據(jù)處理

    ,我們需要了解虛擬串口的工作原理。虛擬串口是通過軟件模擬的串口,數(shù)據(jù)通過USB端口傳輸。STM
    的頭像 發(fā)表于 12-20 11:22 ?1793次閱讀

    STM32串口中斷接收不定長報文介紹

    本項目中,需要使用STM32的USART6串口與FPGA板(下位機)通信,需要發(fā)送和接收數(shù)據(jù),有報文應答機制。
    的頭像 發(fā)表于 10-26 11:01 ?865次閱讀
    STM32<b class='flag-5'>串口</b>中斷<b class='flag-5'>接收</b><b class='flag-5'>不定長</b>報文介紹

    串口怎么才能實現(xiàn)接收不定長數(shù)據(jù)?

    大家都是怎么處理不定長數(shù)據(jù)
    發(fā)表于 10-24 06:43

    如何把接收不定長的字符串到指定結構體內(nèi)?

    發(fā)送命令,然后串口接收不定長的字符串,想存到指定的結構體內(nèi),組成設備信息
    發(fā)表于 10-16 08:04

    modbus通信的過程中如何實現(xiàn)數(shù)據(jù)包的傳輸?

    modbus通信的過程中如何實現(xiàn)數(shù)據(jù)包的傳輸
    發(fā)表于 10-15 12:23