openmv和stm32串口通信完成二维码识别
openmv和stm32串口通信完成二维码识别
文章目录
- 前言
- 一、所用的硬件:
- 二、openmv端
- 2.stm32端
- 总结
前言
注:我只是个大一的小白,本文只完成基本功能,希望能帮助有困惑的人(我也是刚刚走出谜团,大佬勿喷。)
工训赛期间,突击学习了二维码识别(基于openmv4)。openmv4通过串口通信加json与stm32f103完成通信,结果由stm32所连的lcd屏显示
一、所用的硬件:
openmv4、正点原子的mini板(stm32f103rct6)、正点原子配套的lcd屏。
二、openmv端
直接上代码:
代码如下(示例):
mport sensor, image, time
from pyb import UARTuart = UART(3, 115200)
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QQVGA) # can be QVGA on M7...
sensor.skip_frames(30)
sensor.set_auto_gain(False) # must turn this off to prevent image washout...
while(True):img = sensor.snapshot()img.lens_corr(1.8) # strength of 1.8 is good for the 2.8mm lens.for code in img.find_qrcodes():print(code)FH= bytearray([0xb3,0xb3])uart.write(FH)uart.write(code.payload())FH = bytearray([0x0d,0x0a])uart.write(FH)time.sleep_ms(1000)
注:
1、openmv4的 p4为TX p5为RX。(不要接错线哦)
2、FH为帧头用于检验数据发送是否正确。(不懂的可以结合32端代码理解)
3、 code.payload()函数记录的二维码内的字符。
4、波特率设置为115200(要和32端保持一致)。
5、关于二维码识别的详细代码可以去openmv官网查找。
2.stm32端
main.c:
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "lcd.h"int main(void){ u8 len;u8 t,n;u8 UsartDisPlay[200];uart_init(115200);delay_init();LCD_Init();POINT_COLOR=RED;
while(1)
{if(USART_RX_STA&0x8000){len=USART_RX_STA&0x3fff;for(t=0;t<len;t++){ if(USART_RX_BUF[t]==0xb3)if(USART_RX_BUF[t]==0xb3) n=t+1;}for(t=0;n<len;t++,n++){UsartDisPlay[t]=USART_RX_BUF[n];delay_ms(3000);}USART_RX_STA=0;}LCD_ShowString(15,50,260,16,16,UsartDisPlay);}
usart1配置:
void uart_init(u32 bound){//GPIO端口设置GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE); //使能USART1,GPIOA时钟//USART1_TX GPIOA.9GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.9//USART1_RX GPIOA.10初始化GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//PA10GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.10 //Usart1 NVIC 配置NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//抢占优先级3NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //子优先级3NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器//USART 初始化设置USART_InitStructure.USART_BaudRate = bound;//串口波特率USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收发模式USART_Init(USART1, &USART_InitStructure); //初始化串口1USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启串口接受中断USART_Cmd(USART1, ENABLE); //使能串口1 }
中断函数:
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是0x0d 0x0a结尾){Res =USART_ReceiveData(USART1); //读取接收到的数据if((USART_RX_STA&0x8000)==0)//接收未完成{if(USART_RX_STA&0x4000)//接收到了0x0d{if(Res!=0x0a)USART_RX_STA=0;//接收错误,重新开始else USART_RX_STA|=0x8000; //接收完成了 }else //还没收到0X0D{ if(Res==0x0d)USART_RX_STA|=0x4000;else{USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;USART_RX_STA++;if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收数据错误,重新开始接收 } }} }
注:
1、PA9为TX,PA10为RX。
2、openmv和stm32一定要共接GND。
总结
要源码的可以评论区留邮箱,本人刚入门,有错欢迎指正。
hi,这是我用百度网盘分享的内容~复制这段内容打开「百度网盘」APP即可获取
链接:https://pan.baidu.com/s/1V7UudQBo1524rFaDENnd2A?pwd=p16x
提取码:p16x
源码来了,不一一回复了
openmv和stm32串口通信完成二维码识别相关推荐
- 二维码识别 基于stm32 ov7725
二维码识别 基于stm32 ov7725 二维码识别技术在我们的生活中应用的很方便了,但基本都是基于手机的,目前在公交车上也存在了扫描二维码的机器,上次坏了之后,发现一只小企鹅,原来是基于linux的 ...
- K210学习笔记(十)——二维码识别
前言 MAIX BIT(K210)和openmv在传统视觉处理这个方面代码是通用的,掌握K210的色块识别和二维码识别其实也掌握了openmv对应的用法. 一.二维码是什么? 二维码 (2-dimen ...
- 【二维码识别】基于matlab GUI灰度+二值化+校正二维码生成与识别【含Matlab源码 635期】
⛄一.二维码生成与识别简介 如今,移动互联网技术日新月异,随着5G时代的来临,广泛应用于数据处理过程中的二维码信息安全日益成为人们越来越关注的问题.以QR码为代表的二维码,以其在信息存储.传输和识别技 ...
- 第47章 QR-Decoder-OV5640二维码识别—零死角玩转STM32-F429系列
第47章 QR-Decoder-OV5640二维码识别 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.y ...
- 第47章 QR-Decoder-OV5640二维码识别—零死角玩转STM32-F429系列
第47章 QR-Decoder-OV5640二维码识别 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.y ...
- 基于主要成分分析的人脸二维码识别系统-含Matlab代码
目录 一.引言 二.人脸图像信息处理 2.1 主成分分析PCA 2.2 PCA人脸压缩与重构算法分析 三.二维码转换以及识别 3.1 QR码 3.2 将人脸图像生成二维码 3.3 二维码的识别与图像还 ...
- 【OpenCV】二维码识别
文章目录 前言 一.OpenCV自带二维码识别功能 二.使用pyzbar识别 三.串口发送数据 四.播放音乐 总结 前言 最终实现视频动态识别二维码. 一.OpenCV自带二维码识别功能 import ...
- 基于STC89C52RC芯片设计的一款酒店服务机器人(包含货物检测、二维码识别功能)
目录 一:硬件设备 1:主控 2:扫码模块 3:货物检测 4:循迹模块 5:电机驱动模块 6:电源 二:软件代码 三:循迹环PID 四:成品视频 一:硬件设备 1:主控 所选取主控芯片为STC89C5 ...
- OpenCV(项目)二维码识别(二维码、条形码)
目录 过程 1.获取图片中的二维码信息 2.获取视频中的二维码信息 3.检测出二维码框 4.显示数据 5.添加数据,判断二维码是否授权 5-1:.添加数据 5-2.读取文件信息,放入数组 5-3.判断 ...
最新文章
- SAP WM LT42创建TO,报错-No entry in Table 329S (NM1 B)-
- 微控制器和微处理器的区别
- Linux命令行之逗趣无极限
- centos安装jdk7
- Java 为什么不支持创建泛型化数组
- centos 6.5 安装mysql 5.6.35–libc.so.6(GLIBC_2.14)(64bit),libstdc++.so.6(GLIBCXX_3.4.15)(64bit)
- ubuntu install scite and 中文乱码解决
- python 为什么动态语言图片_聊聊动态语言那些事(Python)
- Java中的13个原子操作类
- matlab的单项悟空整流,一种新型单相脉冲整流器的MATLAB仿真研究
- 三十六.MHA集群概述 、 部署MHA集群 测试配置
- Javascript 笔记与总结(1-3)arguments
- React中的三种类型组件介绍
- 根据数据生成excel、二维码并压缩zip并下载
- 计算机教案 认识键盘,《认识电脑键盘》教案
- 动手学深度学习笔记3.1+3.2+3.3
- SpringMVC的工作原理图
- 如何破解Word锁定文件的方法
- form表单提交既有文字也有图片的情况下,增加enctype属性
- 码分多址matlab代码,基于matlab的码分多址系统仿真