[MM32硬件]【灵动微电子MM32F5330测评】1.USB HID 键盘功能实现

一、前言

非常荣幸能够获得这次宝贵的测评机会,我衷心感谢灵动微电子以及21IC给予我的这份信任与支持。昨天收到Mini-F5333评估开发板:

这是一款资源丰富的开发板,归纳一下其资源:

1、核心处理器:
Mini-F5333搭载了MM32F5333D7PV微控制器,这款微控制器采用了由安谋科技授权的Armv8-M架构“星辰”STAR-MC1处理器。
最高工作频率可达180MHz,为各种应用提供了强大的处理能力。
2、存储资源:
内置了128KB Flash和32KB SRAM,这些存储空间对于大多数嵌入式应用开发来说都是足够的。
所有Flash和SRAM都配置了ECC(错误检查和纠正),确保了数据的完整性和可靠性。
3、外设接口与模块:
集成了丰富的I/O端口和外设模块,包括ADC(模数转换器)、DAC(数模转换器)、模拟比较器、定时器、UART(通用异步收发传输器)等。
这些外设接口为开发者提供了广泛的连接和扩展能力,适用于各种复杂的嵌入式系统。
4、通信接口:
配备了I2C、I3C、CAN、SPI、UART等通信接口,支持多种通信协议和数据传输方式。
这些通信接口使得Mini-F5333能够轻松与其他设备或系统进行通信和数据交换。
5、其他特性:
提供了低功耗定时器,适合对功耗要求敏感的应用场景。
集成了USB 2.0全速Device/Host控制器,为USB设备提供了方便的连接选项。


二、基于Mini-F5333+TinyUSB现实USB HID 键盘功能

TinyUSB是一个轻量级的开源USB库,专为嵌入式系统设计,提供了跨平台的USB Host/Device协议栈。

USB Device和USB Host是USB(Universal Serial Bus,通用串行总线)技术中的两个重要概念,它们分别代表了USB设备中的从设备和主设备。
USB HID键盘是一种基于USB Human Interface Device(HID)类协议的键盘设备。HID定义了与人体交互的设备如何与计算机通信的规范。HID设备通过USB的控制管道和中断管道与主机通信。控制管道用于传输USB描述符、类请求代码以及供查询的消息数据等;中断管道则用于传输从设备到主机的输入数据。HID设备的报告描述符用于描述设备如何向主机报告数据。可以处理各种类型的数据。
USB协议复杂度较高,自己实现不太现实,利用TinyUSB可以大大降低开发难度。但是自己移植TinyUSB也是需要花费一些力气的,幸好灵动微电子官方已经做好了移植,那就不需要重新造轮子了。
1、访问mindsdk online platform网站,
地址是:https://mindsdk.mindmotion.com.cn

2、选择开发平台:Windows,交叉编译工具:mdk,评估板:mini-f5330,build project

3、选择“Download Standalone Example Project”,建立一个单独的例程工程:

4、选择tinyusb->tud_hid_keyboard,Download Project

5、下载后得到mini-f5330_tud_hid_keyboard_mdk.zip
Keil打开工程如下:

在tusb_config.h 文件
复制
//------------- CLASS -------------//

#define CFG_TUD_HID 1

#define CFG_TUD_CDC 0

#define CFG_TUD_MSC 0

#define CFG_TUD_MIDI 0

#define CFG_TUD_VENDOR 0

Main.c
复制
int main(void)

{



BOARD_Init();

tusb_init();



while (1)

{

hid_task();

tud_task();

}



}

这是一个标准的TinyUSB程序,主要需要调用下面2个函数:
复制
tusb_init(); // initialize tinyusb stack



tud_task();// tinyusb device task

hid_task();是需要实现的HID设备任务,对下载的例程略微修改了一下,去掉了按键输入的判断,不断地重复发送”a”;
复制
void hid_task(void)

{

if ( tud_suspended() )

{

// Wake up host if we are in suspend mode

// and REMOTE_WAKEUP feature is enabled by host

tud_remote_wakeup();

}else

{

// Send the 1st of report chain, the rest will be sent by tud_hid_report_complete_cb()

send_hid_report(REPORT_ID_KEYBOARD, btn);

}

}

send_hid_report函数:
复制
static void send_hid_report(uint8_t report_id, uint32_t btn)

{

// skip if hid is not ready yet

if ( !tud_hid_ready() ) return;



switch(report_id)

{

case REPORT_ID_KEYBOARD:

{

// use to avoid send multiple consecutive zero report for keyboard

static bool has_keyboard_key = false;



if ( btn )

{

uint8_t keycode[6] = { 0 };

keycode[0] = HID_KEY_A;



tud_hid_keyboard_report(REPORT_ID_KEYBOARD, 0, keycode);

has_keyboard_key = true;

}else

{

// send empty key report if previously has key pressed

if (has_keyboard_key) tud_hid_keyboard_report(REPORT_ID_KEYBOARD, 0, NULL);

has_keyboard_key = false;

}

}

break;



// case REPORT_ID_MOUSE:

// {

// int8_t const delta = 5;



// // no button, right + down, no scroll, no pan

// tud_hid_mouse_report(REPORT_ID_MOUSE, 0x00, delta, delta, 0, 0);

// }

// break;



default: break;

}

}

tud_hid_keyboard_report(uint8_t report_id, uint8_t modifier, uint8_t keycode[6])

参数report_id为REPORT_ID_KEYBOARD时HID为键盘。
modifier是控制按键:1个字节表示8个控制按键Left Control、Left Shift、Left Alt、Left Window、Right Control、Right Shift、Right Alt、Right Window

Keycode[6]:一次可以同时输入6个字符;
例子中只对keycode[0] = HID_KEY_A;赋值,只输出一个”a”.
三、烧写

四、运行效果


---------------------
作者:sujingliang
链接:https://bbs.21ic.com/icview-3384948-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值