历史上的今天
返回首页

历史上的今天

今天是: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口接入计算机,按照提示安装完驱动程序后,就可以看到相应的虚拟串口了。



    至此,一切完成。


推荐阅读

史海拾趣

ARCOLECTRICSWITCHES公司的发展小趣事

随着电子行业的不断发展,ARCOLECTRIC SWITCHES公司意识到单打独斗已经无法满足市场需求。因此,公司积极寻求与上下游企业的合作,共同打造完善的产业链。通过与供应商建立长期稳定的合作关系,确保原材料的稳定供应;与下游企业开展深度合作,共同研发新产品、开拓新市场。这种合作共赢的模式使得ARCOLECTRIC SWITCHES公司在行业中更具竞争力。

Chyao Shiunn Electronic Industrial Ltd公司的发展小趣事

为了进一步扩大业务范围,Chyao Shiunn开始实施全球化战略。公司积极寻求与国际知名企业的合作机会,通过技术合作、合资经营等方式拓展海外市场。同时,公司还加强了对海外市场的调研和分析,根据市场需求调整产品策略和生产计划。这些举措使得公司的业务遍布全球多个国家和地区,实现了合作共赢的局面。

联智(Celfras)公司的发展小趣事

联智的半导体集成电路芯片研发及产业化项目是其发展历程中的又一重要里程碑。该项目总投资高达20亿元,分两期建设。一期项目将建设半导体集成电路模拟芯片封测生产线,预计年产量可达1.5亿颗。二期项目将研发更高功率有线无线融合一体化电源管理芯片和新一代A4WP远距离无线充电芯,同时布局物联网IoT芯片市场。这一项目的实施将进一步提升联智的技术实力和市场竞争力。

Avel Lindberg公司的发展小趣事

联智的半导体集成电路芯片研发及产业化项目是其发展历程中的又一重要里程碑。该项目总投资高达20亿元,分两期建设。一期项目将建设半导体集成电路模拟芯片封测生产线,预计年产量可达1.5亿颗。二期项目将研发更高功率有线无线融合一体化电源管理芯片和新一代A4WP远距离无线充电芯,同时布局物联网IoT芯片市场。这一项目的实施将进一步提升联智的技术实力和市场竞争力。

EQCOLOGIC公司的发展小趣事

在电子产品行业,品质是企业生存和发展的关键。EQCOLOGIC公司从成立之初就高度重视品质控制,建立了严格的质量管理体系。公司投入大量资金购买先进的检测设备,确保每一批产品都符合质量要求。同时,EQCOLOGIC还注重员工培训和技能提升,提高员工对品质控制的意识和能力。正是对品质的坚守,让EQCOLOGIC在竞争激烈的市场中赢得了良好的口碑。

ACL staticide公司的发展小趣事

为了进一步提升公司的竞争力和市场份额,EQCOLOGIC公司决定实施国际化战略。公司积极参与国际电子展会和交流活动,与国际同行建立广泛的合作关系;同时,还加大在海外市场的投入力度,拓展销售渠道和市场份额。通过不断的努力和创新,EQCOLOGIC的产品逐渐打入国际市场,公司的国际化战略也取得了显著成效。

问答坊 | AI 解惑

新型DC/DC电源简化电源设计

新型DC/DC电源简化电源设计…

查看全部问答>

没有用完的程序空间如何处理?

近期做了一个小电路,用的是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 ...…

查看全部问答>

请教大家SMBUS读内存SPD问题

轉到這邊來, 我用C写了一个smbus读super IO的DOS程序, 可以对slave address为5A, 5E的SIO和Hw monitor data进行读写, 现在想对内存A0~A6进行读写, 但读出来都是00, 请有经验的指教一下. 谢谢. …

查看全部问答>

求助:TFT LCD的驱动电路

    大家好,本人正在做的一个显示终端,准备使用7寸液晶(带触摸),原来一直用单色小屏,头一次使用彩屏感觉很头大,所以特来求助。     产品情况是这样的:该显示终端与另外的设备通过串口通讯接受一些数据进行显示(主要 ...…

查看全部问答>

STR71x的BSPI传输结束判断问题

    最近在用STR712与CC2420做Zibee的开发,利用BSPI通讯,出现一点问题,想请教一下各位。     我之前用的飞利浦的SPI都有传输结束判断的标志位可读,传输结束后标志位置位,但我用STR712的BSP ...…

查看全部问答>

开发板购买

这个板子不错,资源够丰富,希望能够拿来开发一些无线相关的产品.…

查看全部问答>

MSP430F5529器件库

TI的BXL格式: 我转换的PADS9.3格式: 又把库稍作修改: [ 本帖最后由 dontium 于 2013-3-2 23:23 编辑 ]…

查看全部问答>