视觉开发板—K210
本期我们继续来遵循其他控制器的学习路线,在学习完GPIO的基本操作后,我们来学一个非常重要的UART串口通信。为什么说这个重要呢,通常来说我们在做一个稍微复杂的项目的时候K210作为主控的核心可能还有所欠缺,另外专业的事要给专业的人去干。也即是K210让它专心的去干它的视觉识别,系统的控制交给另外专业的控制器去完成。这两者之间可以通过串口通信来传递信息,作为一个主从的结构,K210可以作为从机不断把自己检测识别的结果传递给系统的主控即可。那么接下来我们来学习一下串口通信的操作。
-
硬件电路
根据之前官方提供的assembly drawing资料我们能知道了实际上K210的 UART 模块主要用于驱动开发板上的异步串口。k210 总共有3个 UART,每个 UART可以进行自由的引脚映射。接下来我们使用IO4和IO5来映射一组uart。
-
程序开发
在入门的简单的GPIO的编程之后,我们来按照官方提供的文档来开发这一节的内容。大家在学习的同时要注意整个的流程,需要什么资料去怎么查询怎么使用。
上一节我们提到了GPIO和IO的区别,注意要区分 GPIO 和 IO的区别, IO也可以叫Pin 也就是引脚,是芯片引出来的硬件引脚, 而GPIO是一种外设,可以控制这些Pin/IO 的外设。两者可以有一种方法映射,就像一道桥一样连接他们。因为有了这个强大的映射功能, 所以在使用引脚时,需要增加一步映射的步骤:
from fpioa_manager import fm # 导入库类似C语言的头文件
fm.register(28, fm.fpioa.GPIO0)
这里我们将引脚 28 映射为了 GPIO0 的功能, 执行了这句命令后,引脚28和GPIO0就映射(绑定)好了,要取消映射(解绑),则需要调用fm.unregister函数,如fm.unregister(28)可取消引脚28的绑定。
这是之前讲过的内容,接下来结合官方文档总结一下如何将某 IO 注册为 GPIO 功能。
先引入头文件
from Maix import GPIO
from fpioa_manager import fm
上述的程序中,我能怎么知道引入什么库才能使用呢,也就是说唯一未知的头文件是如何引入的呢?看下图:
通过上述的官方文档截图可以看出,文档提供的API手册中提供了所有的库的名称和使用说明供给开发者使用。
然后将IO注册为GPIO,
fm.register(io_number,fm.fpioa.GPIO0)
设置 GPIO 为输入或输出模式,GPIO调参的用法可以参考上述提到的官方文档,有详细的说明和示例。
gpio=GPIO(GPIO.GPIO0,GPIO.OUT)
接下来就是如何使用了:和C语言的结构体类似的操作,读取或设置 GPIO 电平
gpio.value() #直接在括号内赋值即可配置成输出
经过以上流程的总结,希望大家对整个的程序架构有一个基本的概念,学过STM32的同学可能会很好的接收以上的事实。新手的同学需要记住以上的步骤,基本上调用IO都是这个流程。
那么我们接下来完成今天的任务,完成串口uart的操作。
接下来引用以下官方的文档链接,大家保存以下:
machine.UART - Sipeed Wiki
其实官方文档做的是我认为最详细的一个了,所以大家按部就班读文档做起来,会更快一些的。
from fpioa_manager import fm
# maixduino board_info PIN10/PIN11/PIN12/PIN13 or other hardware IO 10/11/4/3
fm.register(board_info.PIN10, fm.fpioa.UART1_TX, force=True)
fm.register(board_info.PIN11, fm.fpioa.UART1_RX, force=True)
fm.register(board_info.PIN3, fm.fpioa.UART2_TX, force=True)
fm.register(board_info.PIN4, fm.fpioa.UART2_RX, force=True)
uart_A = UART(UART.UART1, 115200, 8, 0, 0, timeout=1000, read_buf_len=4096)
uart_B = UART(UART.UART2, 115200, 8, 0, 0, timeout=1000, read_buf_len=4096)
write_str = 'hello world'
for i in range(20):
uart_A.write(write_str)
read_data = uart_B.read()
if read_data:
read_str = read_data.decode('utf-8')
print("string = ", read_str)
if read_str == write_str:
print("baudrate:115200 bits:8 parity:0 stop:0 ---check Successfully")
uart_A.deinit()
uart_B.deinit()
del uart_A
del uart_B
总结
以上就是uart的通信程,涵盖了GPIO的除IO输入输出的基本操作。任何控制器、单片机和CPU首先要掌握的就是输入输出的GPIO,然后学会了串口通信,我个人觉得就够用了,基本接下来学习视觉相关的知识,就可以融合之前的操作,进行和其他主控系统联机调试了。当然这之前,你也可以用K210自己作为主控独立开发一套系统,如果K210的IO足够的,有一说一,K210的可编程IO还是真的具备一定的可玩性的。