chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

【筆記】接收不定長(zhǎng)串口數(shù)據(jù)的方式(附代碼)

撞上電子 ? 2023-06-07 10:00 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群


在不定長(zhǎng)串口數(shù)據(jù)接收方面,有多種方式可供選擇。以下是幾種常見(jiàn)的方法:1. 基于幀頭幀尾:通過(guò)在數(shù)據(jù)幀的開(kāi)頭和結(jié)尾添加特定的幀頭和幀尾標(biāo)識(shí)來(lái)確定數(shù)據(jù)的起始和結(jié)束。在接收端,通過(guò)檢測(cè)幀頭和幀尾來(lái)截取完整的數(shù)據(jù)幀。這種方法需要約定好幀頭和幀尾的標(biāo)識(shí),并在接收端進(jìn)行相應(yīng)的處理。例如,可以使用特定的字符或字節(jié)序列作為幀頭和幀尾標(biāo)識(shí)。

#define FRAME_HEAD 0xAA#define FRAME_TAIL 0x55
uint8_t rxBuffer[100];uint8_t rxIndex = 0;uint8_t frameStarted = 0;
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){ if (huart->Instance == USART1) { if (rxData == FRAME_HEAD) { frameStarted = 1; rxIndex = 0; } else if (rxData == FRAME_TAIL && frameStarted) { // 完整的數(shù)據(jù)幀接收完成,進(jìn)行處理 // rxBuffer 中保存了完整的數(shù)據(jù)幀 // 可以進(jìn)行后續(xù)的數(shù)據(jù)解析和處理操作 frameStarted = 0; } else if (frameStarted) { rxBuffer[rxIndex++] = rxData; }
HAL_UART_Receive_IT(&huart1, &rxData, 1); }}

2. 基于定長(zhǎng)數(shù)據(jù):如果數(shù)據(jù)包的長(zhǎng)度是固定的,可以通過(guò)設(shè)定一個(gè)固定的字節(jié)數(shù)來(lái)接收數(shù)據(jù)。在達(dá)到指定的字節(jié)數(shù)后,即可認(rèn)為接收到了完整的數(shù)據(jù)。這種方式適用于數(shù)據(jù)包長(zhǎng)度固定且已知的情況。

#define DATA_LENGTH 10
uint8_t rxBuffer[DATA_LENGTH];
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){ if (huart->Instance == USART1) { // 完整的數(shù)據(jù)包接收完成,進(jìn)行處理 // rxBuffer 中保存了完整的數(shù)據(jù)包 // 可以進(jìn)行后續(xù)的數(shù)據(jù)解析和處理操作
HAL_UART_Receive_IT(&huart1, rxBuffer, DATA_LENGTH); }}

3. 基于超時(shí)機(jī)制:在串口接收時(shí),可以設(shè)置一個(gè)超時(shí)時(shí)間,如果在規(guī)定的時(shí)間內(nèi)沒(méi)有接收到數(shù)據(jù),即認(rèn)為當(dāng)前數(shù)據(jù)接收結(jié)束。通過(guò)不斷檢查接收狀態(tài)和計(jì)時(shí)器,可以實(shí)現(xiàn)超時(shí)機(jī)制。這種方式適用于數(shù)據(jù)包長(zhǎng)度不確定且無(wú)法使用幀頭幀尾方式的情況。

#define TIMEOUT_MS 100
uint8_t rxBuffer[100];uint8_t rxIndex = 0;uint32_t startTime = 0;
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){ if (huart->Instance == USART1) { if (rxIndex == 0) { startTime = HAL_GetTick(); }
rxBuffer[rxIndex++] = rxData;
if (rxIndex >= 2 && HAL_GetTick() - startTime >= TIMEOUT_MS) { // 接收超時(shí),數(shù)據(jù)接收結(jié)束 // 進(jìn)行數(shù)據(jù)處理操作 rxIndex = 0; }
HAL_UART_Receive_IT(&huart1, &rxData, 1); }}

4. 基于特定字符:可以通過(guò)在數(shù)據(jù)中插入特定的字符來(lái)表示數(shù)據(jù)的開(kāi)始和結(jié)束。接收端可以根據(jù)特定的字符來(lái)判斷數(shù)據(jù)的起始和結(jié)束。例如,可以使用換行符('\n')或回車(chē)符('\r')作為數(shù)據(jù)的起始和結(jié)束標(biāo)識(shí)。

#define START_CHAR '\n'#define END_CHAR '\r'
uint8_t rxBuffer[100];uint8_t rxIndex = 0;uint8_t frameStarted = 0;
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){ if (huart->Instance == USART1) { if (rxData == START_CHAR) { frameStarted = 1; rxIndex = 0; } else if (rxData == END_CHAR && frameStarted) { // 完整的數(shù)據(jù)接收完成,進(jìn)行處理 // rxBuffer 中保存了完整的數(shù)據(jù) // 可以進(jìn)行后續(xù)的數(shù)據(jù)解析和處理操作 frameStarted = 0; } else if (frameStarted) { rxBuffer[rxIndex++] = rxData; }
HAL_UART_Receive_IT(&huart1, &rxData, 1); }}

5. 基于計(jì)數(shù):可以在接收端設(shè)置一個(gè)計(jì)數(shù)器,根據(jù)接收到的數(shù)據(jù)逐步增加計(jì)數(shù)器的值。當(dāng)達(dá)到指定的計(jì)數(shù)值時(shí),即認(rèn)為接收到了完整的數(shù)據(jù)。這種方式適用于在接收到固定數(shù)量的數(shù)據(jù)后即認(rèn)為數(shù)據(jù)接收完成的情況。

#define FRAME_LENGTH 10
uint8_t rxBuffer[FRAME_LENGTH];uint8_t rxIndex = 0;uint8_t frameStarted = 0;
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){ if (huart->Instance == USART1) { if (frameStarted) { rxBuffer[rxIndex++] = rxData; if (rxIndex == FRAME_LENGTH) { // 完整的數(shù)據(jù)接收完成,進(jìn)行處理 // rxBuffer 中保存了完整的數(shù)據(jù) // 可以進(jìn)行后續(xù)的數(shù)據(jù)解析和處理操作 frameStarted = 0; } } else { // 如果接收到起始字符,則開(kāi)始計(jì)數(shù) if (rxData == START_CHAR) { frameStarted = 1; rxIndex = 0; } }
HAL_UART_Receive_IT(&huart1, &rxData, 1); }}

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

    關(guān)注

    8

    文章

    7328

    瀏覽量

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

    關(guān)注

    15

    文章

    1616

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    為什么串口接收數(shù)據(jù)就會(huì)觸發(fā)中斷呢?

    為什么串口接收數(shù)據(jù)就會(huì)觸發(fā)中斷呢? 串口接收喚醒機(jī)制有哪些注意事項(xiàng)?
    發(fā)表于 01-08 06:45

    請(qǐng)問(wèn)CW32L的UART是不是沒(méi)有空閑中斷?

    CW32L083的UART是不是沒(méi)有空閑中斷?大家一般怎么實(shí)現(xiàn)不定長(zhǎng)數(shù)據(jù)接收?是串口中斷+定時(shí)器嗎?
    發(fā)表于 12-15 07:28

    串口空閑中斷與串口超時(shí)中斷介紹

    。 特點(diǎn) 依賴總線物理狀態(tài),而非時(shí)間。 常用于檢測(cè)不定長(zhǎng)數(shù)據(jù)幀的結(jié)束,無(wú)需依賴特定結(jié)束符。 應(yīng)用場(chǎng)景 Modbus通信:不定長(zhǎng)數(shù)據(jù)包的接收
    發(fā)表于 11-21 08:31

    rt-thread 在使用串口DMA模式的時(shí)候,接收數(shù)據(jù)接收不到00,為什么?

    硬件為STM32F103ZET6: 在使用串口通訊時(shí),在DMA接收模式下,收不到00數(shù)據(jù),遇到00數(shù)據(jù),好像DMA模式就認(rèn)為是數(shù)據(jù)已經(jīng)結(jié)束了
    發(fā)表于 10-14 06:20

    串口通信有哪些方式

    串口通信(Serial Communication)是一種通過(guò)串行方式逐位傳輸數(shù)據(jù)的通信方式,廣泛應(yīng)用于嵌入式系統(tǒng)、工業(yè)控制、儀器儀表等領(lǐng)域。其通信
    的頭像 發(fā)表于 09-28 18:02 ?1012次閱讀

    串口接收的bufferSize由1024變更為3072后數(shù)據(jù)接收出錯(cuò),為什么?

    所有功能正常的程序,為了在加快OTA下載的速度,將原來(lái)的串口接收數(shù)組的長(zhǎng)度1024變?yōu)?072時(shí)反而接收不到數(shù)據(jù)了,后來(lái)查看了一下內(nèi)存具體如下: free total: 45708 u
    發(fā)表于 09-17 06:25

    求助,關(guān)于串口設(shè)備驅(qū)動(dòng)fifo問(wèn)題

    目前在做高頻數(shù)據(jù)采集分析,使用串口設(shè)備驅(qū)動(dòng)(使用rs485),開(kāi)啟DMA+空閑中斷,接收不定長(zhǎng)數(shù)據(jù),接收
    發(fā)表于 09-12 08:18

    【RA4M2-SENSOR】—— 12.串口接收不定長(zhǎng)度數(shù)據(jù)

    ;, U1_RxBuff);//打印收到的數(shù)據(jù) user_uart_clear();//清空接收緩沖區(qū) } HAL_Delay(10); } 編譯代碼,燒錄到板子 打開(kāi)串口助手
    發(fā)表于 09-01 11:22

    CYT2B7串口接收會(huì)漏接數(shù)據(jù)怎么解決?

    串口中斷方式接收會(huì)漏接數(shù)據(jù)串口工具發(fā)送 :1234567芯片接收到 :1357硬件是CYTVI
    發(fā)表于 08-14 07:29

    STM32407使用串口閑時(shí)中斷+DMA方式接收最大接收字節(jié)是多少?

    使用串口閑時(shí)中斷+DMA方式接收數(shù)據(jù),波特率為460800,DMA接收長(zhǎng)度為1024個(gè)字節(jié),并開(kāi)啟串口
    發(fā)表于 07-22 08:16

    智嵌物聯(lián)串口轉(zhuǎn)光纖轉(zhuǎn)換器-延長(zhǎng)串口通信距離,增強(qiáng)抗干擾性能

    智嵌物聯(lián)研發(fā)的串口光纖收發(fā)器是將RS-485/422/RS232接口信號(hào)轉(zhuǎn)換為光纖接口傳輸,通信距離可達(dá)20Km,大大延長(zhǎng)串口的通信距離以及抗干擾性能。設(shè)備可自適應(yīng)串口參數(shù),無(wú)需設(shè)置,即插即用
    的頭像 發(fā)表于 06-27 17:08 ?654次閱讀
    智嵌物聯(lián)<b class='flag-5'>串口</b>轉(zhuǎn)光纖轉(zhuǎn)換器-延<b class='flag-5'>長(zhǎng)串口</b>通信距離,增強(qiáng)抗干擾性能

    【RA-Eco-RA4M2開(kāi)發(fā)板評(píng)測(cè)】定時(shí)器輔助串口不定長(zhǎng)數(shù)據(jù)接收

    assert(status==FSP_SUCCESS); } ??2.定時(shí)器輔助串口接收,實(shí)現(xiàn)不定長(zhǎng)數(shù)據(jù)接收。定時(shí)器回調(diào)函數(shù)實(shí)現(xiàn)如下:
    發(fā)表于 04-30 14:44

    【RA-Eco-RA4M2開(kāi)發(fā)板評(píng)測(cè)】+UART測(cè)試實(shí)驗(yàn)

    本篇文章主要介紹如何使用e2studio對(duì)瑞薩單片機(jī)進(jìn)行USART通過(guò)定時(shí)器中斷方式接收不定長(zhǎng)數(shù)據(jù)實(shí)驗(yàn)。 硬件準(zhǔn)備:本次實(shí)驗(yàn)要實(shí)現(xiàn)使用瑞薩 R7FA4E2B93CFM 進(jìn)行UART實(shí)驗(yàn)
    發(fā)表于 04-19 09:37

    如何使用DMA進(jìn)行USART不定長(zhǎng)接收

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