OpenMV串口通信

串口基本概念

串口原理

TODO

码元

​ 在数字通信中常常用时间间隔相同的符号来表示一位二进制数字。这样的时间间隔内的信号称为二进制码元,而这个间隔被称为码元长度。[1]

码元(symbol)是对二进制制数字中每一位数字的通称,也称为码位。例如键盘上的每个字母在二进制数字中都是由7个码元组成,如字母"A"的ASCII码(0x41)二进制数字0b'1000001,每一位二进制数字都是一位码元。[1]

波特率

波特率可以理解为单片机或者PC进行串口通信时, 数据发送或者接受的速率。 具体表现为, 能够允许的每秒钟对应的高低电平的变化的最大次数。

波特率是码元的传输速率单位,他说明单位时间传输了多少个码元。码元的传输速率又叫调制速率,是从数字信号的角度(只有0,1两种状态)来定义的。B=1/T,T是调制信号的周期。波特率B的单位是(baud/s)。

发送端 TX 与 接收端 RX

两个单片机进行串口通信的话, 最少需要三根线相连。

  • 发送端 TX
  • 接收端 RX
  • 地线 GND

例如说A,B两个单片机 A的RX 需要接B的TX B的RX需要接A的TX 二者的地线(GND)相连作为参考电平

串口连接图

VCC可接可不接,USB的串口是5V的,如果要接OpenMV板子上的话, 需要接在OpenMV的VIN上, 如果接在3v3, 也就是3.3v的接口处, 会使所有的元器件暴露在5v的电压下, 导致电子元器件全部烧毁

上述一句话,价值500块, 你懂得。

OpenMV上的串口资源

img

我们来阅读一下OpenMV3的引脚图

UART 3

Pin Name Uart Index Role
P4 串口3 TX 发送端
P5 串口3 RX 接收端

OpenMV3 预留了两个串口资源。

UART对象


/*
* 初始化一个串口对象
* uart_idx  , 串口ID, 我们这里只能写1或者3
* baud_rate , 波特率 
*/
UART(uart_idx, baud_rate)

初始化UART对象

uart = UART(3, 115200)

UART 函数操作

更多丰富的操作请查看 UART 官方文档

http://docs.micropython.org/en/latest/pyboard/library/pyb.UART.html?highlight=uart

读写操作

uart.read(10)        # read 10 characters, returns a bytes object
                    # 读入10个字符, 返回一个比特对象
uart.read()            # read all available characters
                    # 读取所有的有效字符
uart.readline()        # read a line
                    # 读入一行
uart.readinto(buf)  # read and store into the given buffer
                    # 读入并且保存在缓存中
uart.write('abc')    # write the 3 characters
                    # 向串口写入3个字符abc

单个字符的读取与写入

uart.readchar()     # read 1 character and returns it as an integer
                    # 读入一个字符
uart.writechar(42)  # write 1 character
                    # 写入ASCALL码为42的字符

判断串口是否有数据

uart.any()          # returns the number of characters waiting

TODO 做一个演示实例

向串口发送数据的代码

# UART Control 串口通信

import time
from pyb import UART

uart = UART(3, 115200)
uart.init(115200, bits=8, parity=None, stop=1) # init with given parameters
while(True):
    uart.write("Hello World!\r")
    print("Hello World")
    # 休眠1s
    time.sleep(1000)

实验效果

TTL 转接到PC上的串口的显示效果

UART_TTL_PC

你也可以将两个单片机相连, 做通信实验, 原理是一样的。

向串口接收数据

# UART Control 串口通信

import time
from pyb import UART

uart = UART(3, 115200)
uart.init(115200, bits=8, parity=None, stop=1) # init with given parameters

while(True):

    if uart.any():
        # 判断是否有数据, 有的话就读入
        tmp_data = uart.readline()
        print(tmp_data)

    # 休眠1s
    time.sleep(1000)

串口发送_OpenMV接收信号

数据双向发送与接收

# UART Control 串口通信

import time
from pyb import UART

uart = UART(3, 115200)
uart.init(115200, bits=8, parity=None, stop=1) # init with given parameters


def sending_data():
    global uart

    uart.write("haha\n")

def recive_data():
    global uart

    if uart.any():
        tmp_data = uart.readline()
        uart.write("RECIVED : %s\n"%tmp_data)
        print(tmp_data)

while(True):
    sending_data()
    recive_data()
    time.sleep(1000)

演示效果

拓展阅读

OpenMV与飞控(Light飞控)的串口通信的C语言解析代码 例程解析-光流

参考文章

1 波特率与比特率的区别

http://blog.sciencenet.cn/blog-331690-362375.html

2 Micropython 官方文档

http://docs.micropython.org/en/latest/pyboard/library/pyb.UART.html?highlight=uart

Copyright 杭州云江科技有限公司 2017 all right reserved,powered by Gitbook该文件修订时间: 2019-04-06 01:23:39

results matching ""

    No results matching ""