[TOC]

K210串口收发实验

一、硬件平台

MAIX Bit开发板

IMG_20210211_161250

二、软件平台

MAIXPY IDE

20210211161417

三、程序编写

K210的uart 模块主要用于驱动开发板上的异步串口,可以自由对 uart 进行配置。k210 一共有3个 uart,每个 uart 可以进行自由的引脚映射

3.1 引脚映射 fm.register()

在使用 uart 前,我们需要使用 fm 来对芯片引脚进行映射和管理。如下所示,将 PIN10 设置为 uart2 的发送引脚,PIN11 设置为 uart2 的接收引脚

1
2
fm.register(board_info.PIN10,fm.fpioa.UART2_TX)
fm.register(board_info.PIN11,fm.fpioa.UART2_RX)

3.2 初始化函数 machine.UART()

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

通过指定的参数新建一个 UART 对象

参数

  • 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: 停止位, 支持 11.5, 2, 默认 1
  • timeout: 串口接收超时时间
  • read_buf_len: 串口接收缓冲,串口通过中断来接收数据,如果缓冲满了,将自动停止数据接收

返回值

  • UART对象

3.3 调用API函数

3.3.1 init

用于初始化 uart,一般在构造对象时已经初始化,这里用在重新初始化 uart

1
uart.init(baudrate,bits,parity,stop,timeout, read_buf_len)

参数

同构造函数,但不需要第一个UART号

3.3.2 read

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

1
uart.read(num)

参数

  • num: 读取字节的数量,一般填入缓冲大小,如果缓冲中数据的数量没有 num 大,那么将只返回缓冲中剩余的数据

返回值

  • bytes: 类型的数据

3.3.3 readline

用于读取串口缓冲数据的一行

1
uart.readline(num)
  • num: 读取行的数量

返回值

*bytes类型的数据

3.3.4 write

用于使用串口发送数据

1
uart.write(buf)

参数

  • buf: 需要发送到数据

返回值

  • 写入的数据量

3.3.5 deinit

注销 UART 硬件,释放占用的资源

1
uart.deinit()

3.3.6 repl_uart()

获取用于 REPL 的串口对象

返回值:

用于 REPL 的串口对象, 默认初始化位 115200 8 N 1

3.4 程序编写

打开IDE编译环境新建文件,开发板与电脑连接

20210212114301

点击IDE右下角连接标志,选择COM口连接MAIX BIT

20210212114420

连接后我们开始编写程序,程序基于MicroPython来编写,需要一定的Python基础,语法简单

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#调用需要使用到的库文件
from machine import UART
from Maix import GPIO
from fpioa_manager import fm
import utime
#映射UART2的两个引脚
fm.register(GPIO.GPIOHS9,fm.fpioa.UART2_TX)
fm.register(GPIO.GPIOHS10,fm.fpioa.UART2_RX)
#初始化串口,返回调用句柄
uart_A = UART(UART.UART2, 115200, 8, None, 1, timeout=1000, read_buf_len=4096)
#定义一个要发送的字符串
write_str = 'get dat\r\n'
#主循环
while(True):
read_str = uart_A.read(10)
print("%s",read_str)
utime.sleep_ms(100)
#判断接受到后返回信息
if read_str != None:
uart_A.write(write_str)
utime.sleep_ms(100)


四、程序下载

点击左下角测试运行代码,观察现象

20210523151218

现象没问题点击工具-选择保存脚本-等待下载完成,从新上电进行测试

20210523151256

五、实验现象

连接USB转TTL与K210的P9和P10 IO口

_-1122602750_IMG_20210523_153512_1621755312000_xg

串口发送数据给K210后,打印在串行终端,K210返回接受到信息

GIF

wechat