历史上的今天
今天是:2025年07月16日(星期三)
2019年07月16日 | STM32开发笔记21: USB驱动的移植
2019-07-16 来源:eefocus
单片机型号:STM32L053R8T6
现在使用的STM32L053R8T6单片机带有USB接口,原先一直使用UART转USB芯片来完成USB功能的支持,现在这款单片机带了就希望使用以下。由于已经建立了自己的工程目录,再重新使用STM32CubeMX生成的工程文件,重新建立是不显示的,所以本文探索将USB驱动文件移植到自己项目中的方法,我使用的是USB的CDCD类,步骤如下:
1、使用STM32CubeMX使能USB,如下图所示:


2、设置时钟,USB需要48M时钟,使用内部和外部均可,我这里使用外部时钟。

3、生成工程文件。
4、在自己的工程目录中加入如下图所示的2个文件,如果此2个文件不存在,则从新生成的工程目录中复制即可(包含头文件)。

5、在自己的工程目录中加入以下4个文件,这4个文件需从新生成的工程目录中复制(包含头文件)。

6、在自己的工程目录中加入或更新以下文件,USB开头的文件需要从新生成的工程目录中复制(包含头文件),其余文件需要更新。

7、如果使用C++进行程序设计,按照STM32L0开发笔记4: 解决使用--CPP11编译USB驱动报错问题对代码进行调整。
8、如果希望分层次编译,可按照STM32L0开发笔记3: 使用静态库加快Keil编译速度方法,生成静态库。
9、更新时钟设置程序,一定要更新。
10、在main.cpp中,包含usb_device.h文件,并调用MX_USB_DEVICE_Init函数初始化USB,样例程序如下:
#include "include.h"
#include "usb_device.h"
CTarget Target;
boolean bMilliSecond_1000 = FALSE;
boolean bMilliSecond_100 = FALSE;
int main(void)
{
uint8_t temp[3] = {0xC1, 0xC1, 0xC1};
MX_USB_DEVICE_Init();
while (1)
{
if (bMilliSecond_1000 == TRUE)
{
bMilliSecond_1000 = FALSE;
Target.HAL.LED.Turn();
Target.HAL.TestUart1.SendData(temp, 3);
}
if (bMilliSecond_100 == TRUE)
{
bMilliSecond_100 = FALSE;
Target.HAL.E0.Turn();
Target.HAL.E1.Turn();
Target.HAL.E2.Turn();
Target.HAL.E3.Turn();
}
if (Target.HAL.TestUart1.IsReceivedData() == TRUE)
{
Target.HAL.TestUart2.SendData(Target.HAL.TestUart1.u8_Buffer, Target.HAL.TestUart1.u16_Number);
}
}
}
11、对文件进行编译,下载程序。
12、硬件USB的USB_DP引脚需要1.5K上拉,务必注意,我就没有上拉,后来在PCB上飞的线。
13、进入ST的官网,搜索32102,下载CDC驱动。

14、解压缩后,根据自己的操作系统,选择相应的驱动库进行安装。
15、如果一切正常,可以将设备通过USB口接入计算机,按照提示安装完驱动程序后,就可以看到相应的虚拟串口了。

至此,一切完成。
史海拾趣
|
近期做了一个小电路,用的是STC12C单片机,6K程序空间,可是用的2.5K,多余的如何处理?我想把它填满goto loop;防止程序跑的非程序区,可是1000行的goto loop;Keil C51编译完后还是2.5K,不知如何处理?不知道大家都是如何做的??… 查看全部问答> |
|
菜鸟提问:KEILC中编译错误理由left side of asn-op not a lvalue 我使用keilC编译,用来做与E2通讯的命令,都是copy过来稍有改动的,目前只有一个错误无法解答了,搜索了半天都没找到答案。 I2c操作,程序是这样的: #include \"EEprom.h\" void startI2C(void) { resetSCL;&nbs ...… 查看全部问答> |
|
轉到這邊來, 我用C写了一个smbus读super IO的DOS程序, 可以对slave address为5A, 5E的SIO和Hw monitor data进行读写, 现在想对内存A0~A6进行读写, 但读出来都是00, 请有经验的指教一下. 谢谢. … 查看全部问答> |
|
大家好,本人正在做的一个显示终端,准备使用7寸液晶(带触摸),原来一直用单色小屏,头一次使用彩屏感觉很头大,所以特来求助。 产品情况是这样的:该显示终端与另外的设备通过串口通讯接受一些数据进行显示(主要 ...… 查看全部问答> |
|
最近在用STR712与CC2420做Zibee的开发,利用BSPI通讯,出现一点问题,想请教一下各位。 我之前用的飞利浦的SPI都有传输结束判断的标志位可读,传输结束后标志位置位,但我用STR712的BSP ...… 查看全部问答> |




