Python串列埠資料打包傳送STM32接收資料解析

2021-10-05 01:36:38 字數 2172 閱讀 6005

嘗試使用python中的struct.pack函式打包資料通過串列埠傳送,由stm32接收解析。

1、 struct.pack:

struct.pack用於將python的值根據格式符,轉換為字串(因為python中沒有位元組(byte)型別,可以把這裡的字串理解為位元組流,或位元組陣列)。其函式原型為:struct.pack(fmt, v1, v2, …),引數fmt是格式字串,關於格式字串的相關資訊在下面有所介紹。v1, v2, …表示要轉換的python值。

2、 struct.unpack:

struct.unpack做的工作剛好與struct.pack相反,用於將位元組流轉換成python資料型別。它的函式原型為:struct.unpack(fmt, string),該函式返回乙個元組。

上述fmt中,支援的格式為:

注1.q和q只在機器支援64位操作時有意思;

注2.每個格式前可以有乙個數字,表示個數;

注3.s格式表示一定長度的字串,4s表示長度為4的字串,但是p表示的是pascal字串;

注4.p用來轉換乙個指標,其長度和機器字長相關;

注5.最後乙個可以用來表示指標型別的,佔4個位元組;

為了同c中的結構體交換資料,還要考慮有的c或c++編譯器使用了位元組對齊,通常是以4個位元組為單位的32位系統,故而struct根據本地機器位元組順序轉換.可以用格式中的第乙個字元來改變對齊方式.定義如下:

python端**如下:

import serial

import struct

import time

# 串口號 預設為 /dev/ttyusb0

#ser_dev = '/dev/ttyusb1'

ser_dev =

'com1'

# 建立乙個串列埠例項

ser = serial.serial(ser_dev,

115200

, timeout=

1, bytesize=8)

defpack_bin_data

(bottom_degree, top_degree)

:'''

h: unsigned short bit=2

b: unsigned char (byte): bit =1

'''bin_data = struct.pack(

">iibb"

,# 大端儲存

int(a)

,# 資料1

int(b)

,# 資料2

0x0d

,# 幀尾

0x0a

)# 結束符 '\n = 0x0a

return bin_data

ser.write(bin_data )

big-endian和little-endian區別:小端:較高的有效位元組存放在較高的的儲存器位址,較低的有效位元組存放在較低的儲存器位址。

大端:較高的有效位元組存放在較低的儲存器位址,較低的有效位元組存放在較高的儲存器位址。

例如0x12345678 ,在大端模式的排列:0x01(低位址),0x23,0x45,0x67,0x89(高位址)。

在小端模式的排列:0x89(低位址),0x67,0x45,0x23,0x01(高位址)。

32端解析函式如下:

//串列埠1中斷服務程式

void

usart1_irqhandler

(void

)else

//還沒收到0x0d}}

}#if system_support_os

//如果system_support_os為真,則需要支援os.

osintexit()

;#endif }

void

data_depack

(u8 *data_buf,u8 num)

串列埠傳送資料

s 串列埠程式設計 詳解4 串列埠傳送資料 串列埠傳送資料報括 十六進製制傳送資料 手動傳送資料 自動傳送資料 手動傳送資料的 如下 cpp view plain copy 手動傳送 long tx count 0 void cscommdlg onbuttonmanualsend else els...

Qt tcp打包傳送資料

qstring msg 本句話就是要傳送的資訊內容 qbytearray block 定義乙個位元組陣列 qdatastream out block,qiodevice writeonly block為儲存快取區,只寫模式 out.setversion qdatastream qt 4 6 保持qt...

Python學習筆記 串列埠配置以及傳送資料

import serial import binascii ser serial.serial def port open ser.port 7 設定埠號 ser.baudrate 9600 設定波特率 ser.bytesize 8 設定資料位 ser.stopbits 1 設定停止位 ser.pa...