TinyUSB是一个轻量级的开源USB库,专为嵌入式系统设计,提供了跨平台的USB Host/Device协议栈。TinyUSB可以参见:https://gitee.com/toumingyu/t...
MM32系列MCU一直都支持TinyUSB,并且在SDK软件包中一般提供TinyUSB例程。但是LibSamples_MM32F5370_V0.10.3软件包中没有提供TinyUSB例程,第三方库文件下也没有TinyUSB,甚至连USB的hal库文件也没有。OMG,但是还是提供了寄存器定义文件reg_usbfs.h。
根据MM32F5370数据手册来看MM32F5370肯定是支持USB的,所以只是没有提供库文件和例程。如果想使用USB功能,可以自己去实现。
但通过仅有的寄存器定义文件reg_usbfs.h实现一个USB驱动难度何其大。
于是在灵动微的官网上搜了一下,发现5270系列软件包提供了TinyUSB例程和USB HAL库,所以问题就变成了如何将5270的TinyUSB例程移植到5370。
一、移植hal_usbfs.c
从MM32F5270的HAL_Lib\src中拷贝一份hal_usbfs.c到MM32F5370的HAL_Lib\src
从MM32F5270的HAL_Lib\inc中拷贝hal_usbfs.h和hal_usbfs_bdt.h到MM32F5370的HAL_Lib\inc
将hal_usbfs.c加入工程,2个头文件加入include path
因为底层寄存器定义reg_usbfs.h不同需要对hal_usbfs.c进行一些修改,如:
USB_FS_TypeDef -> USBFS_TypeDef
#define USB_FS ((USB_FS_TypeDef )USB_FS_BASE) -> #define USBFS ((USBFS_TypeDef )USB_FS_BASE)
USB_FSIRQHandler -> USBFSIRQHandler
类似的情况还有很多,还有一些地方名称完全不同,需要按情况修改。
二、TinyUSB
从LibSamples_MM32F5270_V1.5.6\3rdPartySoftwarePorting下拷贝一份TinyUSB到LibSamples_MM32F5370_V0.10.3\3rdPartySoftwarePorting下
将TinyUSB目录中的以下文件加入工程
将TinyUSB的头文件路径加入include path
三、应用移植
从LibSamples_MM32F5270_V1.5.6\3rdPartySoftwarePorting\TinyUSB\Demos\TinyUSB_Device_HID_Comp下拷贝一些应用文件到工程根目录下
main文件
#include "tinyusb_device_hid_comp.h"
int main(void)
{
PLATFORM_Init();
TinyUSB_Device_HID_Comp_Sample();
while (1)
{
}
}
以上完成了整个移植过程。
tinyusb_device_hid_comp.c中提供了完成HID USB键盘例程,
其中
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;
实现hid发送键盘report功能。
运行时,通过USB_MCM接入电脑,开发板会被识别为HID键盘,按下KEY1,会输出'a'字符给电脑。
四、源码
通过网盘分享的文件:MM32F5370_USB_HID_KEYBORD
链接: https://pan.baidu.com/s/17RM_... 提取码: nc4n
1、USB-HID_KEYBORD.rar解压到LibSamples_MM32F5370_V0.10.3\Samples\LibSamples
2、TinyUSB.rar解压到LibSamples_MM32F5370_V0.10.3\3rdPartySoftwarePorting
本文主要是完成了一个移植过程,可能还改了一些编译时报错的地方,但太琐碎,也不记得了,不能一一列出。
TinyUSB/Demos下还有其他4个USB demo,也可以考虑移植以下。