基于GD32固件库移植cherryusb到STM32F4平台

[GD32F4]基于GD32固件库移植cherryusb[STM32F4]

基础环境

使用开发板是淘宝买的不知名开发板,没什么好说的,具体的型号是GD32F450VET6。
使用的cherryusb版本是0.9.0版本。
使用的GD32官方固件库版本是:GD32F4xx_Firmware_Library_V3.0.4

大神速通

cherryusb最牛的地方在于抛弃掉所有的依赖,只需要知道芯片的usb中断函数名称 usb外设的基地址 使用的io口就行。
本文实现了gd32f4模拟usb fs hid设备作为鼠标。

具体步骤

首先准备参考cherryusb的如下教程

先放松一点 ,别管usb,老老实实准备一个可以使用串口printf打印的基础工程。这个工程里面不需要包含任何GD32提供的usb库。
(1)准备串口基础工程的要点-使用微库:

(2)准备串口基础工程的要点-重定向函数:重定向函数放在main.c或者什么地方即可

int fputc(int ch, FILE *f)
{
    usart_data_transmit(USART0, (uint8_t)ch);
    while(RESET == usart_flag_get(USART0, USART_FLAG_TBE));
    return ch;
}

请先完成上面步骤后烧录试试,确保printf正常。

之后开始移植cherryusb:
值得一提的概念在于:cherryusb库厉害的地方在于他是基于ip的。市场上芯片型号千千万,但是使用的ip型号并不多,cherry对于主流的ip型号都做了适配。GD32F4与STM32F4一样,使用的是DWC2
gd32所有的usb都可以无视。
首先拉一份cherryusb的代码:

简单粗暴的裁剪一下,熟练以后可以不裁剪保留第三方库的完整。现在裁剪是为了明白哪些是有必要的。
必要的移植之后



![在这里插入图片描述](https://i3.wp.com/img-blog.csdnimg.cn/3f67b6abdd7c42f4866aaafdfe154e90.png


最后一个图里面的四个文件夹里面就是前四个截图的内容。
usb_config.h就是cherryusb源码下的cherryusb_config_template.h文件 这一点在cherryusb的官方移植教程中也提到了。hid_mouse_template.c文件在源码的demo文件夹下

文件夹中添加好文件后在keil中也要加入对应的头文件地址和c文件


实现代码:
在main.c中实现void usb_dc_low_level_init (void)函数 开启了usb中断使能 这是外设使能的一部分。

usb外设使用的gpio也要配置好,从代码层面而言,这些与usb外设初始化设置的函数都可以放在usb_dc_low_level_init 中,不过笔者在移植cherryusb之前首先使用gd32的usb库做硬件的验证,所以这里写在main函数开头,其实效果是一样的。
这些初始化函数包括:

之后修改usb_config.h:

这个配置文件是为STM32编写的 GD32使用的中断函数与之不同,所以这里要进行修改。

之后在主函数中调用hid_mouse_init即可,插上usb后可以枚举成功

这里我还写了一个函数可以左右横跳鼠标

在死循环中1s调用一次很有趣。
如果需要代码可以留下邮箱,看到会发的。
参考:
https://cherryusb.readthedocs.io/zh_CN/latest/index.html

物联沃分享整理
物联沃-IOTWORD物联网 » 基于GD32固件库移植cherryusb到STM32F4平台

发表评论