使用python測試stm32串列埠

2021-09-17 21:59:15 字數 3383 閱讀 6979

本文首發於在下的個人部落格blog.keysking.com

前段時間有個專案,要用stm32跟乙個比較大,比較重的裝置進行頻繁的串列埠通訊,因為裝置移動起來不方便,遂想寫個指令碼,代替裝置,對stm32的通訊邏輯進行測試.

於是有了以下**:

# coding=utf-8

import serial

import threading

import csv

import random

identitys_csv = csv.reader(

open

('./identitys.csv'

,'r'))

# identitys_csv = csv.reader(open('./identitys_less.csv','r'))

identitys =

list()

ser = serial.serial(

"com13"

,9600

)askdata =

bytes([

0xa0

,0x0d

,0x01

,0x8a

,0x00

,0x01

,0x01

,0x01

,0x02

,0x01

,0x03

,0x01

,0x00

,0x0a

,0xb4])

defreceivefunc()

:print

("---------------測試開始--------------"

) serdata =

bytes()

while

len(identitys)!=0

:if ser.inwaiting(

)>0:

out = ser.read(1)

serdata += out

iflen(serdata)

==15

:if serdata == askdata:

print

("-------------裝置請求資料------------"

) num = random.randint(5,

15)if num >

len(identitys)

: num =

len(identitys)

print

("--------------傳送"

+str

(num)

+"個資料------------"

)for identity in identitys[

0:num]

:print

(identity)

identityformatdata = transtoformat(identity)

ser.write(identityformatdata)

for i in identityformatdata:

print

('0x%02x'

%i,end=

' ')

print(""

)del identitys[

0:num]

else

:print

("------------不知是啥的資料-----------"

)for i in out:

print

('0x%02x'

%i,end=

' ')

print(""

) serdata =

bytes()

print

("---------------測試結束--------------"

)def

transtoformat

(identity)

:if identity[-1

]=="x":

identity = identity.replace(

"x",

":")

formatdata =

bytes([

0xa0

,0x13

,0x01

,0x8a

,0x00

,0x00

,0x00])

for i in

range

(len

(identity)//2

):temp =

((identity[

2*i]

.encode(

'utf-8')[

0]-0x30

)<<4)

+(identity[

2*i+1]

.encode(

'utf-8')[

0]-0x30

) formatdata +=

bytes

([temp]

) formatdata +=

bytes([

0x00

,0x00

,0x00

,0x00])

checksum =

0for i in formatdata:

checksum += i

checksum = checksum &

0x00ff

checksum =

0x100

- checksum

if checksum ==

256:

checksum =

0 formatdata +=

bytes

([checksum]

)return formatdata

if __name__==

'__main__'

:print

("---------正在讀取測試資料列表--------"

)for i in identitys_csv:0]

)print

("---------共"

+str

(len

(identitys))+

"條測試資料--------"

) receivethread = threading.thread(target=receivefunc,name=

"receive"

) receivethread.start(

)

主要作用是將存在csv檔案中的很多身份證資訊取出來,然後等stm32那邊通過串列埠發來請求資訊(ackdata)的時候,就隨機取5到15個身份證資訊,按照一定資料格式傳送給stm32.

STM32使用小結

1 韌體庫函式組織規則 stm32韌體庫使用手冊的中文翻譯版 系統 源程式檔案和標頭檔案命名都以 stm32f10x 作為開頭,例如 stm32f10x conf.h。常量僅被應用於乙個檔案的,定義於該檔案中 被應用於多個檔案的,在對應標頭檔案中定義。所有常量都由英文本母大寫書寫。暫存器作為常量處理...

STM32外部中斷測試

stm32外部中斷測試 環境 主機 win7 開發環境 mdk4.23 mcu stm32f103cbt6 說明 stm32有20個外部中斷線,其中exti0 exti15給i o埠使用 exti線16連線到pvd輸出 exti線17連線到rtc鬧鐘事件 exti線18連線到usb喚醒事件 exti...

STM32外部中斷測試

stm32外部中斷測試 環境 主機 win7 開發環境 mdk4.23 mcu stm32f103cbt6 說明 stm32有20個外部中斷線,其中exti0 exti15給i o埠使用 exti線16連線到pvd輸出 exti線17連線到rtc鬧鐘事件 exti線18連線到usb喚醒事件 exti...