官方教程:串口通讯上;串口通讯下;OpenMV的Uart类函数介绍

目录

材料准备

官方示例代码解析

UART()函数介绍

usart.write()函数介绍

time.sleep_ms(x)函数介绍

自己写的代码加深理解

usart.any()介绍

uart.read()介绍

总结


材料准备

需要准备材料,四根杜邦线,一个USB转TTL模块(冤大头可以买官方串口调试模块),一根安卓数据线(注意:是数据线,不是充电线,有些充电线不能进行数据传输)。

上面是我买的Usb转TLL模块,VCC接VIN,GND接GND,TXD接P5,RXD接P4。

官方示例代码解析

之后就是代码介绍。

import time
from pyb import UART# Always pass UART 3 for the UART number for your OpenMV Cam.
# The second argument is the UART baud rate. For a more advanced UART control
# example see the BLE-Shield driver.
uart = UART (3, 19200)while(True):uart.write("Hello World!\r")time.sleep_ms(1000)

UART()函数介绍

上面是OpenMV IDE中的官方示例,用于OpenMV发送数据。因为OpenMV只引出来串口3,所以必须是UART(3,x)。x 是波特率,可更改。

usart.write()函数介绍

usart.write():发送一个字节出去。可以理解为stm32串口重映射的时候,用printf发送数据。

time.sleep_ms(x)函数介绍

time.sleep_ms(x):x为延时的时间,单位为毫秒。此处延时1000毫秒,也就是1秒。

自己写的代码加深理解

我在此写了一个函数,意思是只有上位机发送字符‘0’的时候,OpenMV才可以向上位机发送一次数据。

import time
from pyb import UARTuart = UART(3, 9600)  #初始化串口3,波特率为9600(注意:上位机记得也配置成9600)while(True):if uart.any():                          #判断是否接收到数据a = uart.read(1).decode()           #uart.read()为一个字节串,加.decode() 变成字符串print(a)                            #在OpenMV的串行终端中打印if a == '0':                        #如果接收达字符0b = 1print('OK')                     #在串行终端中显示OKelif b==1:     uart.write("Hello World!\r")    #向上位机发送数据uart.write(a)b=0

usart.any()介绍

首先,我们分析函数usart.any()。作用就是,判断OpenMV是否接收到了数据。如果接收到了数据,返回1,没有接收到数据返回0。与stm32的USART_GetITStatus()函数类似。不过这里不需要传入参数。

这个时候有人会有疑惑了。感觉这个usart.any()作用也不大呀。但是,起始这样可以加快其他程序的运行效率。比如说,如果我们除了串口收发程序,还需要进行人脸识别。如果没有usart.any(),那么每次程序都需要浪费时间多进行一下操作。这些没有意义的操作,会影响程序运行。

        a = uart.read(1).decode()  #uart.read()为一个字节串,加.decode() 变成字符串print(a)if a == '0':b = 1print('OK')elif b==1:uart.write("Hello World!\r")uart.write(a)b=0

uart.read()介绍

uart.read([nbytes])可以接收字符,如果我们直接使用uart.read,那么他就会将所有接收到的字符全部读取。如果设置了nbytes,他就可以设置接收到的字节数量。

但是,我们直接写 a = uart.read(1),是不可行的。如果这么写会出现你上位机明明发送了一个字符‘0’,之后你再发送除‘0’以外的其他字符,会发现上位机并没有Hello World!。这是为什么呢?因为uart.read(1)返回的是一根字节串。那么程序 if a == '0':也就一直不成立,b永远无法等于1,导致上位机不可能接收到数据。所以我们需要写成a = uart.read(1).decode()即可

import time
from pyb import UARTuart = UART(3, 9600)
b=0
while(True):if uart.any():a = uart.read(1) #uart.read()为一个字节串,加.decode() 变成字符串print(a)if a == '0':b = 1print('OK')elif b==1:uart.write("Hello World!\r")uart.write(a)b=0

总结

这个时候,你会说我还几个函数没有啊。其实那几个都差不多,我们只需要掌握uart = UART(3, 9600)进行初始化;uart.any()判断是否有数据接收;uart.read()接收数据;uart.write()发送数据,这四个函数即可。

只要掌握了这四个函数,我们就能利用OpenMV很好的与单片机进行交互。

最后,说明一下,我使用的是野火的串口助手。遇到了一个问题,uart.readline()是读取一行数据。我尝试下面代码,用野火的串口助手发送”123“,发现串行终端的数据是

1

2

3

说明野火的串行助手发送的123,OpenMV并没有识别成一行数据。所以我建议少用uart.readline()  。建议使用a = uart.read(1).decode(),这样防止出现异议。反正我们与OpenMV进行交互,一个字符控制就行。比如像我上面写的,0表示单片机开始发送有用数据。

a=uart.readline()
print(a)

OpenMV串口通讯详解相关推荐

  1. delphi 串口通信发送_STM32第五章串口通讯详解

    点击上方"果果小师弟",选择"置顶/星标公众号"干货福利,第一时间送达! 串口通信是串行通信里面的异步方式.串行通信是相对于并行通信来说的.串口是一个事实存在的 ...

  2. STM32—串口通讯详解

    串口通讯目录 物理层 协议层 USART简介 开发板与上位机的连接 代码讲解: 一.初始化结构体 二.NVIC配置中断优先级 三.USART配置函数讲解 四.传输数据的函数: 1.发送一个字节 2.发 ...

  3. STM32_USART 串口通讯详解

    对51单片机有了解的都知道51单片机的串口通讯工作原理,我们单片机使用的电平TTL电平,为了使我们的的单片机与PC进行通信,就需要一个电平转换芯片,把TTL电平转换为USB电平(使用的USB接口,如果 ...

  4. c#串口通讯详解(附源码)

    串口通讯 串口通讯是计算机传输数据的一种通讯方式,只不过是以比特位来传输数据的 串口通讯的相关参数 波特率: 波特率的大小代表每秒钟可以传输多少个二进制位,如波特率是9600,能每秒传输9600二进制 ...

  5. 51单片机串口通讯详解

    串口,作为单片机程序开发中最常用.最方便,也是应用最广泛的程序调试方法:无论是作为调试工具,打印出调试信息,还是对功能模块进行通信,串口是每个单片机开发人员最常用的单片机外设. 由于大部分51单片机不 ...

  6. Java串口通信详解(转)

    Java串口通信详解(转) 作者:denimcc 日期:2007-05-11 序言     说到开源,恐怕很少有人不挑大指称赞.学生通过开源代码学到了知识,程序员通过开源类库获得了别人的成功经验及能够 ...

  7. 友善之臂comtest.c串口编译程序详解 希望对大家有帮助

    友善comtest.c串口编译程序详解 希望对大家有帮助 说明:armcomtest 是友善之臂为了方便测试而开发的linux 下的简易实用串口终端程  序,它使用标准的系统调用,和硬件无关.一般Li ...

  8. STM32串口通信详解以及通信异常或者卡死常见问题分析

    STM32串口通信详解以及通信异常或者卡死常见问题分析 目录 STM32串口通信详解以及通信异常或者卡死常见问题分析 一.常见的异常问题 二.STM32的串口简介 1.串口的通讯方式 ①按数据传输方向 ...

  9. 串口参数详解:波特率,数据位,停止位,奇偶校验位

    转载自:https://blog.csdn.net/sinat_35705952/article/details/89034455 串口参数详解:波特率,数据位,停止位,奇偶校验位 Winter_Q ...

最新文章

  1. XGBoost类库使用小结
  2. leetcode-139-单词拆分
  3. MySQL千万级数据JDBC插入
  4. SAP Spartacus routing parameter mapping介绍
  5. Hadoop入门(十)Mapreduce高级shuffle之Sort和Group
  6. 系统服务管理与控制程序(Init System/初始化系统)-- Systemd 的 Unit 配置文件详解
  7. 陇东学院c语言程序设计,C语言程序设计
  8. cns/clns搭建给clnc(udp转发)
  9. 2018电影票房分析-谁才是票房之王
  10. html插入图片在古诗右侧,古诗词配插图
  11. 实验五|Python 企业获利能力分析
  12. 高薪职位不少,这个行业为什么如此缺人才?
  13. sfu计算机硕士,别告诉我你了解菲莎国际学院
  14. Java多线程篇--基本概念
  15. android 状态栏显示 耳机图标显示,Android4.0-4.4 加入支持状态栏显示耳机图标方法(支持带不带MIC的两种耳机自己主动识别)...
  16. Java小程序:个人所得税计算(与标准个税有差距)
  17. 图纸打印什么时候用蓝图_cad图如何打印成施工蓝图
  18. Android监听电池电量
  19. 心跳异常检测--使用Keras,K折交叉训练CNN一维卷积
  20. Ubuntu下使用ROS moveit 连接ABB机器人

热门文章

  1. css网格_使用CSS网格构建的澳大利亚初创企业的周期表
  2. KindEditor使用技巧
  3. 微信小程序 java php校园快递物流取件及上门服务
  4. 解决IE低版本浏览器兼容性差问题
  5. 6. 交易开拓者-测试与评估
  6. hadoopHA安装部署测试
  7. Altium Designer PCB导出step 3D文件时遇到的问题
  8. 构建企业私有云的最佳实践
  9. 基于SSM技术的汽车销售系统
  10. vue 选取某月、当月第一天和最后一天处理