一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(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ù)包的結(jié)束。接收方的簡單做法是結(jié)合串口的IDLE中斷,或使用DMA并利用DMA的超時傳輸機制。

但有些MCU在設計時出于成本上的考慮,簡化了串口接收的IDLE模式以及DMA超時傳輸機制。沒有串口IDLE中斷或者DMA超時傳輸?shù)臋C制,我們就不知道什么時候通信結(jié)束了。這種情況下,為了實現(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位的下降沿后最好關(guān)閉引腳中斷,不然后續(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)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    146

    文章

    17983

    瀏覽量

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

    關(guān)注

    15

    文章

    1588

    瀏覽量

    79940

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

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

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

掃碼添加小助手

加入工程師交流群

    評論

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

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

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

    藍牙數(shù)據(jù)通道空口數(shù)據(jù)包

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

    【RA-Eco-RA4M2開發(fā)板評測】使用RA4M2的串口實現(xiàn)任意任意類型任意長度的數(shù)據(jù)接收,并將接收到的數(shù)據(jù)顯示串口助手上

    使用RA4M2的串口實現(xiàn)任意任意類型任意長度的數(shù)據(jù)接收,并將接收到的任意類型任意長度的數(shù)據(jù)顯示
    發(fā)表于 05-04 14:11

    【RA-Eco-RA4M2開發(fā)板評測】定時器輔助串口不定長數(shù)據(jù)接收

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

    為UART、MCXA142實現(xiàn)ISP通信的主機端,發(fā)送Ping數(shù)據(jù)包并收到預期的響應,發(fā)送和接收數(shù)據(jù)包的典型順序是什么?

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

    如何使用DMA進行USART不定長接收

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

    mtu配置步驟詳解 mtu與數(shù)據(jù)包丟失的關(guān)系

    步驟 確定當前MTU值 : 配置MTU之前,首先需要了解當前網(wǎng)絡的MTU值。這可以通過使用ping命令(如ping -f -l [數(shù)據(jù)包長度] [網(wǎng)關(guān)IP地址])來測試,并通過逐步調(diào)整數(shù)據(jù)包
    的頭像 發(fā)表于 12-16 14:33 ?2573次閱讀

    【代碼分享】基于樂鑫ESP32的串口不定長數(shù)據(jù)接收方法

    【代碼分享】基于樂鑫ESP32的串口不定長數(shù)據(jù)接收方法
    的頭像 發(fā)表于 11-15 01:02 ?1452次閱讀
    【代碼分享】基于樂鑫ESP32的<b class='flag-5'>串口</b><b class='flag-5'>不定長</b><b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>接收</b>方法

    【AG32開發(fā)板免費試用】+串口不定長收超時設置閾值多少合適?

    串口不定長收發(fā)超時設置閾值多少合適?這個和波特率有關(guān)系嗎? 考慮最大接收長度嗎?
    發(fā)表于 10-31 18:26

    STM32CUBEMX(8)--USART通過定時器中斷方式接收不定長數(shù)據(jù)

    概述 本文利用中斷實現(xiàn)串口不定長接收(非DMA),使用HAL庫,將接收數(shù)據(jù)打印出去。 DMA
    發(fā)表于 09-06 16:48

    STM32CUBEMX(2)--USART通過DMA方式接收不定長數(shù)據(jù)

    主要用于為不同的外設模塊實現(xiàn)集中數(shù)據(jù)緩沖存儲(通常在系統(tǒng)SRAM)。與分布式解決方案(其中每個外設都需要實現(xiàn)自己的本地數(shù)據(jù)存儲)相比,DM
    發(fā)表于 09-04 11:48

    GD32F407跑了freeRTOS,中斷調(diào)用xEventGroupSetBitsFromISR函數(shù)后就會死機,為什么?

    GD32F407跑了freeRTOS,串口接收使用了DMA+IDLE中斷來實現(xiàn)不定長接收,
    發(fā)表于 07-26 06:37

    使用AT SAVETRANSLINK時UDP數(shù)據(jù)包丟失怎么解決?

    Android 發(fā)送一個小 UDP 數(shù)據(jù)包(5 字節(jié))。這個小數(shù)據(jù)包被我的微控制器UART上接收到。微控制器將更大的數(shù)據(jù)包(可變長度,約
    發(fā)表于 07-18 07:17

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

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

    ESP8266收到重傳的UDP數(shù)據(jù)包,則udp接收回調(diào)函數(shù)會調(diào)用兩次,怎么解決?

    UDP 數(shù)據(jù)包的 payload 回調(diào)函數(shù)完全相同) 有幾種方法可以解決這個問題。但是我們的應用程序解決方案需要一個大的內(nèi)存池。 我認為這個問題應該在無線驅(qū)動程序得到解決。
    發(fā)表于 07-18 06:29