【GD32E503评测】基于uCOSIII项目实现U盘功能1
[复制链接]
前言:
在驱动LCD屏幕的时候,需要用到字库、图片等数据,。比方我们要显示汉字那么流程如下制作字库生成.bin文件,例如通过字库制作文件生成gb2312.bin文件,并将gb2312.bin文件写入flash。Mcu解析中文字符,得到gb2312索引值,根据字库的大小计算得到flash的位置。读取相应数据。Mcu将读取到的数据发送给lcd屏幕进行显示。
在实现上述过程时,遇到了个问题,那就是gb2312.bin 这个文件该如何传输到flash中呢?我有如下几个方法:
- 通过串口采用Ymodem协议写入到flash。
- 通过flash 烧写工具(不过需要将flash拿下来,烧写完再焊上去)
- 通过usb-hid采用Ymodem协议写入到flash。
- 通过虚拟U盘的形式将文件写到flash。
嗯……大家如果有什么好想法,可以指点一下,我就想到上述几种方式。
所以,综上,我认为通过gd32e503v模拟个u盘,在pc端通过将bin文件写入到U盘中这种方式最为方便。
于是查看了原理图,USB口时有解出来的:
同时查看了USB的示例代码:
官方只提供了两个例程,一个是键盘、一个是CDC类。U盘呢,属于MSC这类,可惜官方没有提供。
不过我们仔细找找官方资料可以发现,官方还是提供了一些必要的库文件,如下图,usbd表示usb device,usbh表示usbhost。这些必要的驱动代码是都有的,进一步的查看usbd_library这个文件可以发现官方其实有提供msc的示例demo的。
好了,以上万事俱备只欠冻手了。
基于目前的现状,我们已经创建了uCOSIII的框架了。于是打算在这个基础上添加。
- 首先将官方23_USBD_Keyboard移植到uCosIII的框架中,并测试是否正常。
- 根据官方提供的usb msc文件,修改23_USBD_Keyboard这个工程,实现U盘功能。
打开23_USBD_Keyboard 工程,可以看到,工程结构如下,Application为用户修改的地方,USBD_Drivers、USBD_Devices、USBD_Class 这三个文件,都是官方提供的,一般无特殊需求,不需要修改,只需要添加进来即可。
我们依葫芦画瓢,在自己工程上建立相应的文件、并导入
然后编译、期间会有很多头文件找不到,我们到demo工程里看看,找到相应头文件路径,一并导入即可。之后,会发现还有些函数接口找不到,因此我还添加了USBD_User的文件夹,便于修改。
其中需要注意的是:gd32e_50x_it.c这个文件 是中断函数入口。因此需要将Demo里面的部分内容,拷贝到我们的工程中,如下几个接口函数都要拷贝:
期间会有些编译错误、找不到头文件、找不到函数啥的,这个基本功我就不细说了。
进一步的,写main函数代码了
先前创建了两个线程,所以,我们在task2 中添加如下代码:(其实也就是把官方例程的main函数拷贝进来)
然后编译、通过后即可Debug查看效果。
不过出现了问题:
而且开发板不能再Debug、或者烧录了。。这可吓坏了我,不知道什么原因。不过呢,好在gd32e503v开发板将boot0、boot1 引出来,可以方便的修改mcu的启动方式。(从flash、从ram 。。。具体大家自定百度,stm32的Boot0 Boot1 )为啥是stm32???因为,gd几乎完美兼容stm32呀~!国产IC之最。我觉得太牛逼了。
将boot0、boot1拉高,flash烧写选择擦除全部,然后重新上电,即可进行flash烧写
因为是我们的代码引起的芯片不能烧写问题,所以,修改下代码:
这样,再次将boot0、boot1 置低,即可进行debug了。芯片终于正常了。
以上,实现U盘功能才刚开始。
就花了我好半天的功夫、未完、待续。。。
|