AT32 MCU QR USB HID Keyboard例程

QR USB HID Keyboard例程

前言
本应用笔记的目的是提供在AT32微控制器上实现QR Decode应用程序,并通过USB HID模拟keyboard将解码数据上传到PC。

注:本例程对应的代码是基于雅特力提供的V2.x.x 板级支持包(BSP)而开发,对于其他版本BSP,需要注意使用上的区别。

支持型号列表:
AT32F4 系列

在这里插入图片描述
概述
二维码、条形码相信大家都非常熟悉了,条码技术已经广泛应用于我们生活当中。微信扫二维码、支付宝二维码付款、商品条形码、超市储物柜条形码等。但是由于二维码复杂度,目前识别二维码的设备还不够丰富。对此本文档利用带浮点运算的、大容量 SRAM、高主频芯片 AT32F403A,调用雅特力提供的 Artery_QR 二维码解码库在 AT-START-F403A 开发板上来实现二维码、CODE128\CODE39\I25\EAN13 条码扫描识别。

QR 二维码解码流程
了解了QR二维码的构造,下面我们来了解解码流程,QR二维码的解码流程如下图2所示。
在这里插入图片描述

  1. 定位并获取符号图像。深色与浅色模块识别为“ 0”与“1”的阵列。
  2. 识读格式信息(如果需要,去除掩模图形并完成对格式信息模块的纠错,识别纠错等级与掩模图形参考)。
  3. 识读版本信息,确定符号的版本。
  4. 用掩模图形参考,从格式信息中得出对编码区的位图进行异或处理消除掩模。
  5. 根据模块排列规则,识读符号字符,恢复信息的数据与纠错码字。
  6. 用与纠错级别信息相对应的纠错码字检测错误,如果发现错误,立即纠错。
  7. 根据模式指示符和字符计数指示符将数据码字划分成多个部分。
  8. 最后,按照使用的模式译码得出数据字符并输出结果。二维码的解码流程具体实现的步骤和方法是比较复杂,涉及到了QR二维码的标准规则及相对应的算法,知识点很多,大家感兴趣的话可以自己多去网上查阅资料了解。

硬件资源

  1. LCD 9341
  2. 外接Buzzer(PE15)
  3. Arduio
  4. AT-START-F403A V1.0 实验板
  5. USB
  6. Sensor BF3901
  7. USER key
    在这里插入图片描述
    注:
    1.该demo是基于AT32F403A的硬件条件,若使用者需要在AT32其他型号上使用,请修改相应配置即可。
    2.供电部分:使用电源供电,或USB线供电(勿使用Link单独供电)。

demo使用

  1. 打开QR decode project源程序,编译后下载到实验板。
  2. 由于该demo运行占用了169K的SRAM,所以在使用demo前需开启芯片的扩展SRAM功能(扩展为224KB),为了方便用户使用,demo已经在启动文件中开启了此项功能。
    在这里插入图片描述
  3. 连接USB线到PC,通过上位机可以识别到该设备:HID Keyboard Device(标准键盘输入模式,无须驱动)
  4. 根据LCD显示信息,查看BF3901初始化是否成功,并按下USER key按键,开启QR 解码侦测。
  5. 将摄像头BF3901对准二维码,LCD显示当前抓取的摄像头图像,此时芯片一直在运算QR解码。
  6. 若芯片一直没有解析到二维码,一维码数据,则会一直运行下去,直到解析到数据,如图4所示。蜂鸣器会响一下,并且将解析到数据通过USB传输到PC,如图5所示。Ps. QR decode 默认只侦测二维码,若要侦测全部图码等,需开启宏定义:Detect_all。
    在这里插入图片描述
    在这里插入图片描述
STM32F103C8 Serial(UART) to USB HID Keyboard Mouse Joystick 串口 转 USB键盘;鼠标;手柄 (1) 使用Composite Device 组合(复合)设备 (1.1) 1个Device -> 1个 Configuation -> 3个Interfance (Keyboard & Mouse & Joystick) (1.2) 支持BIOS模式中的操作(使用HID boot模式) 以便兼容在计算器中设定BIOS : (1.2.1) Keyboard Interfance -> HID (boot mode) -> 2个Endpoint(IN_0x81 & OUT_0x01) -> KeyboardReportDescriptor(不使用Report ID) (1.2.2) Mouse Interfance -> HID (boot mode) -> 1个Endpoint(IN_0x82) -> MouseReportDescriptor(不使用Report ID) (1.3) 支持Windows模式中的操作(使用Report ID) : (1.3.1) Multimedia Keyboard Interfance -> HID -> 1个Endpoint(IN_0x85) -> KeyboardReportDescriptor(使用Report ID) (1.3.1.1) Report ID (1) : HID Usage Page 0x0C, MediaKey (1.3.1.2) Report ID (2) : HID Usage Page 0x01, PowerControl (1.3.2) Mouse Interfance -> HID (boot mode) -> 1个Endpoint(IN_0x84) -> MouseReportDescriptor(使用Report ID) (1.3.2.1) Report ID (1) : 相对坐标 (-32768 ~ 32767) (1.3.2.2) Report ID (2) : 绝对坐标 (0 ~ 2048) (1.4) 支持反馈Keyboard_LED灯号: All Off; Num Lock; Caps Lock; Scroll Lock; Compose; Kana (1.5) Joystick Interfance -> HID -> 1个Endpoint(IN_0x83) -> JoyStickReportDescriptor (1.7) 支持GPIO命令, 可控制 12个GPIO 0/1 (hi/low)输出 (1.8) 支持Hardware或Software 插拔(Connect/Disconnect)命令 (1.9) 支持Software Reset命令 (2) 串口接收 命令 (2.1) UART协议: 115200, n, 8, 1 (2.2) 1帧发送字符串格式, 以 '{'开始, '}'结束 ','分隔 共10个10进制数字 例如: {1,2,3,4,5,6,7,8,9,10} (2.3) 第1位 区分 Keyboard(128) 或是 Mouse(64) 或是 Joystick(32) 或是 Control(32) 命令 Control_cmd = 0x10, Joystick_cmd = 0x20, Mouse_cmd = 0x40, MouseHold_cmd = 0x41, AbsMouse_cmd = 0x42, AbsMouseHold_cmd= 0x43, Keyboard_cmd = 0x80, KeyboardHold_cmd= 0x81, MediaKey_cmd = 0x82, MediaKeyHold_cmd= 0x83, Switch_cmd = 0xC0, SwitchHold_cmd = 0xC1 例如: {16, 0,0,0,0,0,0,0,0} --- 发送Control命令 {32, 0,0,0,0,0,0,0,0} --- 发送Joystick命令 {64, 0,0,0,0,0,0,0,0} --- 发送Mouse命令(相对坐标) {65, 0,0,0,0,0,0,0,0} --- 发送Mouse命令(相对坐标)(按住不放) {66, 0,0,0,0,0,0,0,0} --- 发送WinMouse命令(相对坐标/绝对坐标) {67, 0,0,0,0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值