Maix Bit(K210) 与上位机串口通信 - 新闻资讯 - 云南小程序开发|云南软件开发|云南网站建设-昆明葵宇信息科技有限公司

159-8711-8523

云南网建设/小程序开发/软件开发

知识

不管是网站,软件还是小程序,都要直接或间接能为您产生价值,我们在追求其视觉表现的同时,更侧重于功能的便捷,营销的便利,运营的高效,让网站成为营销工具,让软件能切实提升企业内部管理水平和效率。优秀的程序为后期升级提供便捷的支持!

您当前位置>首页 » 新闻资讯 » 技术分享 >

Maix Bit(K210) 与上位机串口通信

发表时间:2020-10-19

发布人:葵宇科技

浏览次数:219

串口通信

  • 1、K210 UART
    • 1.1 、串口通信函数
    • 1.2 、常用函数
  • 3、代码
  • 4、效果展示

准备工具 K210开发板
USB转TTL串口 (俗称ISP烧录器)
串口助手

??其实Maix Bit 是自带CH552 芯片的,烧录程序使用,如果把代码烧录在flash或者保存在SD卡里面,不使用MaixPy IDE连接开发板,那么这个TX 、RX端口就会空出来(下面图示原理图标注了自带TX、TX),可以不使用USB转TTL就可以实现串口通信,如果既要连接用MaixPy IDE,又想要在串口助手收到数据,那么就需要一个USB转TTL。
附图USB转TTL(类似这种就可以):
在这里插入图片描述

??实现Maix Bit 与上位机串口通信,在串口助手发送消息,Maix Bit 开发板在接收到消息之后转发到上位机,实现串口通信。
在这里插入图片描述

1、K210 UART

??通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART,UART 模块主要用于驱动开发板上的异步串口。k210 一共有3个 UART,每个 UART可以进行自由的引脚映射。

1.1 、串口通信函数

??K210可以自己随意的配置I/O口,类似FPGA,不像其它类型的单片机串口是固定好的。在使用 uart 前,我们需要使用 fm 来对芯片引脚进行映射和管理。我使用引脚9和引脚10分别做为UART1_TX和UART1_RX。如果想不使用USB转TTL,那么把引脚修改为原理图所示引脚即可45(这个一定要和开发板对应,不能错),然后把代码烧录到flash或者保存到SD卡,也可以实现与上位机串口通信。

fm.register(9, fm.fpioa.UART1_TX, force=True)
fm.register(10, fm.fpioa.UART1_RX, force=True)

构造函数,其实就是配置端口:

uart = machine.UART(uart,baudrate,bits,parity,stop,timeout, read_buf_len)

参数:
uart UART 号,使用指定的 UART,可以通过 machine.UART. 按tab键来补全
baudrate: UART 波特率
bits: UART 数据宽度,支持 5/6/7/8 (默认的 REPL 使用的串口(UARTHS)只支持 8 位模式), 默认 8
parity: 奇偶校验位,支持 None, machine.UART.PARITY_ODD, machine.UART.PARITY_EVEN (默认的 REPL 使用的串口(UARTHS)只支持 None), 默认 None
stop: 停止位, 支持 1, 1.5, 2, 默认 1
timeout: 串口接收超时时间
read_buf_len: 串口接收缓冲,串口通过中断来接收数据,如果缓冲满了,将自动停止数据接收

如下是我自己构造的函数:


uart_A = UART(UART.UART1, 115200, 8, 1, 0, timeout=1000, read_buf_len=4096)

1.2 、常用函数

用于读取串口缓冲中的数据

uart.read(num)

用于使用串口发送数据:

uart.write(buf)

在python3中. 默认的编码是unicode,我们的字符串就是unicode。unicode弊端:在存储和传输的时候是很浪费的
在存储和传输的时候不能直接使用unicode。 必须要对字符串进行编码. 编码成bytes类型(字节形式的字符串),在K210中默认是bytes类型的。解码和编码在物联网通信处理服务器数据是很重要的。
解码:
read_data是保存的已经收到的数据

read_data.decode('utf-8')

编码:

read_data.encode("utf-8")

更多串口通信函数的使用:https://maixpy.sipeed.com/zh/api_reference/machine/uart.html

3、代码

from fpioa_manager import fm

# need your connect hardware IO 9/10 to loopback
fm.register(9, fm.fpioa.UART1_TX, force=True)
fm.register(10, fm.fpioa.UART1_RX, force=True)

from machine import UART

uart_A = UART(UART.UART1, 115200, 8, 1, 0, timeout=1000, read_buf_len=4096)

import time

time.sleep_ms(100) # wait uart ready
uart_A.write(b'hello world')

while True:
  if uart_A.any():
    while uart_A.any():
      read_data = uart_A.read()
      print("recv = ", read_data) # 输出收到的数据
      uart_A.write(read_data+"\r")
    #break
  time.sleep_ms(10) # ohter event

uart_A.deinit()
del uart_A

4、效果展示

在这里插入图片描述

相关案例查看更多