前言
STM32的代码可以直接拿江科大9-5的代码(点这里)来用,为了使本文尽量浅显易懂,我的K210串口代码直接与之匹配。等你们弄懂了这个案例中的具体原理后就可以自定义自己的收发协议了。
1.K210串口映射
K210有很多引脚,且这些引脚的功能都可以自定义,所以在进行串口通信之前,我们需要先进行引脚的映射,设定一个RX引脚,一个TX引脚。引脚映射方法具体可以看这个文档(点这里)
这里贴出我的引脚映射代码:
from board import board_info
from fpioa_manager import fm
from machine import Timer,UART
import utime as t
import maix
fm.register(10, fm.fpioa.UART1_TX, force=True)
fm.register(11, fm.fpioa.UART1_RX, force=True)
fm.register(8, fm.fpioa.UART2_TX, force=True)
fm.register(9, fm.fpioa.UART2_RX, force=True)
把10引脚定义成串口1的TX,11定义成RX,把8,9定义成串口2的TX和RX,这里定义两个串口是为了方便讲解,串口1专门用来进行写入操作,串口2专门用来读操作
接下来设置串口配置,9600是波特率,一般来说只需把波特率改成STM32中对应的波特率即可,其他的不用动。
uart_A = UART(UART.UART1, 9600,read_buf_len=4096)
uart_B = UART(UART.UART2, 9600,read_buf_len=4096)
2.K210写,STM32读
将K210的引脚与STM32接上,具体解法可以看江科大9-5,就是把USB转串口的三条线换成K210的线就行,切记K210的GND要与STM32共地。
接下来开始进行写入操作:
while(True):
write_str = b'\xff\x02\x03\x04\x05\xfe'
uart_A.write(write_str)
uart_A.deinit()
uart_B.deinit()
del uart_A
del uart_B
不出意外的话,这个时候应该可以在32的OLED屏上看见写入的数据02030405了,为什么这里的write_str要这样写呢?因为在python中,b‘xxxxxx’这种形式是一种特殊的形式,叫字节码,\x03意思是十六进制下的03,因为串口收发的是十六进制,只有这样,stm32才能接收对应的数据。
至于如何更改字节码中的数据,我们可以进行强制类型转换,详细做法可以上网去查,这里贴一个我的代码
x_pos = b[5]
y_pos = b[6]
X = '%04d' % x_pos
Y = '%04d' % y_pos
X1=int(X)//100;
X2=int(X)%100;
Y1=int(Y)//100;
Y2=int(Y)%100;
x1='%02d'%X1
x2='%02d'%X2
y1='%02d'%Y1
y2='%02d'%Y2
byte1 = int(x1, 16)
byte2 = int(x2, 16)
byte3 = int(y1, 16)
byte4 = int(y2, 16)
DATA = bytes([0xff, byte1, byte2, byte3, byte4, 0xfe])
uart.write(DATA)
3.STM32写,K210读
read_data = uart_B.read()
if read_data:
read_str = read_data
print("string = ", read_str)
至于K210读的问题我们只需在while循环中使用uart_B.read即可。