乙個簡單的串列埠接收(帶協議)

2021-09-25 00:12:57 字數 1139 閱讀 4381

乙個簡單的串列埠接收(帶協議)

資料頭資訊(5個)

資料長度資訊(1個)

資料(<1024個)

資料校驗(1個)

資料尾一.串列埠資料接收buf

typedef struct _uartcommadtype

uartcommadtype;

二. 串列埠接收的狀態,如果在時間限制內未完成接收,則認為接收錯誤

uint16_t g_uart2checktick;//時間限制

uint8_t g_buart2detected;//檢測標誌

void uart2_1ms_isr(void)

}}

三. 接收檢測,一直把資料放進buf裡,如果檢測到資料長度位,則再接收資料長度位里資料個長度結束

#define uart_rx_header            ( 0x00 )

#define uart_rx_id ( 0x01 )

#define uart_rx_category ( 0x02 )

#define uart_rx_page ( 0x03 )

#define uart_rx_func ( 0x04 )

#define uart_rx_data_length ( 0x05 )

#define uart_rx_control ( 0x06 )

void uart2_recvhandler(int c)

g_uart2command.buffer[g_uart2command.index] = c;

g_uart2command.index++;

g_uart2command.index &= 0x3ff;//max is 1024

if(g_uart2command.index > uart_rx_data_length) }

}

四. 校驗資料頭

uint8_t uart2_verify(void)

return 0;

}

校驗位可以自己定義

C 乙個串列埠接收思路

void uart rx isr void 接收中斷函式 else recv state 0 回到初始狀態 break case1 if c 0xff 是陣列第二位元組 攏共 3位資料 中間這位 為資料位 就不進行校驗判斷了 else break case2 if c 0x03 是陣列第三位元組 e...

乙個串列埠接收資料的狀態機

關於串列埠接收轉義字元狀態機 s1 s2 s3 s4 s5 s1空閒狀態,收到第乙個開始前導符,跳轉到s2 s2收到第乙個開始前導符狀態,收到開始第二個前導符,跳到s3 收到其他資料,跳轉到s1 s3收到第二個開始前導符狀態,收到其他資料進行接收,跳轉到s3 收到第乙個結束前導符,跳轉到s4 s4收...

乙個簡單的串列埠過濾驅動

學習驅動開發一段時間了,在嘗試著從最簡單的驅動開發著手學習,我再嘗試著編寫乙個最簡單的串列埠過濾驅動,可是多次嘗試都沒有成功,總是一載入就藍屏。看了網上的例子他們都是採用的ioattachdevicetodevicestack,而我採用的是ioattachdevice,現在把網上的 整理成最簡單的形...