国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

3天內不再提示

了解在MCU中實現串口的不定長數據包接收的過程

5RJg_mcuworld ? 來源:未知 ? 作者:工程師郭婷 ? 2018-08-03 16:37 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

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

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

了解在MCU中實現串口的不定長數據包接收的過程

圖1. 串口接收數據時序圖

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

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

超時計數器最好是系統里的低功耗定時器,這個例程中我們用的是LPC54101的RIT定時器。超時的時間設置要考慮到當前串口設置的波特率以及一次串口傳輸的最大包長。

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

了解在MCU中實現串口的不定長數據包接收的過程

圖2. LPC54101 DMA傳輸數據長度計數位

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

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

了解在MCU中實現串口的不定長數據包接收的過程

了解在MCU中實現串口的不定長數據包接收的過程

了解在MCU中實現串口的不定長數據包接收的過程

圖3. 程序流程圖

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

    關注

    147

    文章

    18924

    瀏覽量

    398010
  • 串口
    +關注

    關注

    15

    文章

    1618

    瀏覽量

    82809

原文標題:在MCU中,如何實現串口的不定長數據包接收?

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    CW32R030可以兼容BLE及XN297L數據包,請問這個XN297L數據包是什么?

    CW32R030可以兼容BLE及XN297L數據包,請問這個XN297L數據包是什么?
    發表于 01-20 06:37

    請問CW32L的UART是不是沒有空閑中斷?

    CW32L083的UART是不是沒有空閑中斷?大家一般怎么實現不定長數據接收?是串口中斷+定時器嗎?
    發表于 12-15 07:28

    CW32L052串口數據傳輸怎么解決?

    CW32L052串口數據傳輸
    發表于 11-24 07:35

    串口空閑中斷與串口超時中斷介紹

    。 特點 依賴總線物理狀態,而非時間。 常用于檢測不定長數據幀的結束,無需依賴特定結束符。 應用場景 Modbus通信:不定長數據包接收
    發表于 11-21 08:31

    使用nrf54L15的NORDIC藍牙芯片,通過串口發送一幀數據包時,會出現分包發送分析

    使用nrf54L15的NORDIC藍牙芯片,通過串口發送一幀數據包時,會出現分包發送分析,是什么原因呢
    發表于 11-17 15:52

    【道生物聯TKB-623評估板試用】TKB-623評估板雙機通訊測試_程序開發

    操作即可: 發送程序設置完成后,就會自動開始數據發送: 發送的過程中接收程序會及時統計收到的數據包的情況: 為了模仿丟情況下,
    發表于 10-18 23:54

    串口DMA接收數據包丟失怎么解決?

    RTT串口DMA接收數據,超過緩沖區后為什么會吞掉一個數據包呢,不能每次處理完后清除緩沖區數據嗎,感覺
    發表于 09-29 07:50

    求助,關于串口設備驅動fifo問題

    目前在做高頻數據采集分析,使用串口設備驅動(使用rs485),開啟DMA+空閑中斷,接收不定長數據接收
    發表于 09-12 08:18

    【RA4M2-SENSOR】—— 12.串口接收不定長度數據

    U1_Rxlen 計算總共收到了多少個字符; 假如一幀的數據接收完成了,那么 U1_Rxlen 變量的值應該維持不變。 第一個步驟比較好實現,還是
    發表于 09-01 11:22

    請問DCTCP與DCUDP 的登錄數據包和心跳數據包與服務器端是如何交互的?

    DCTCP與DCUDP 的登錄數據包和心跳數據包與服務器端是如何交互的?
    發表于 08-06 06:29

    EZ串行的BLE“無響應寫入”, CAN一次通信中接收的最大數據包大小是多少?

    :所有數據都顯示與 ez-Serial 和 PUART 連接的 TeraTerm 上 [問題] (1) EZ 串行的 BLE“無響應寫入”, CAN 一次通信中
    發表于 07-07 07:33

    藍牙數據通道空口數據包

    可以用下面的流程圖來描述上述過程。 ? 編輯 MD(1bit) ,more data,用來指示對方我還有數據包要傳,請繼續打開射頻窗口準備接收。比如Nordic nRF51822一個connection
    發表于 06-03 10:51

    【RA-Eco-RA4M2開發板評測】定時器輔助串口不定長數據接收

    assert(status==FSP_SUCCESS); } ??2.定時器輔助串口接收,實現不定長數據
    發表于 04-30 14:44

    當從接收DMA一次接收一個字節時,如何檢查是否已接收到任意長度的所有數據包呢?

    當從接收 DMA 一次接收一個字節時,如何檢查是否已接收到任意長度的所有數據包?
    發表于 04-21 08:22

    為UART、MCXA142實現ISP通信的主機端,發送Ping數據包并收到預期的響應,發送和接收數據包的典型順序是什么?

    我想為 UART、MCXA142 實現 ISP 通信的主機端。我發送 Ping 數據包并收到預期的響應。發送和接收數據包的典型順序是什么? 此刻,我的照片是這樣的: 1. 發送 Pi
    發表于 04-03 08:05