现在使用的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口接入计算机,按照提示安装完驱动程序后,就可以看到相应的虚拟串口了。
至此,一切完成。
上一篇:基于stm32f10x单片机USB流程理解
下一篇:STM32开发笔记34:USB CDC驱动程序的详细移植过程
推荐阅读最新更新时间:2024-11-11 05:36
设计资源 培训 开发板 精华推荐
- 83键特殊配列机械键盘
- 实用制作02-基于FE1.1S的USB集线器
- 使用 Si2404 低压调制解调器设备的调制解调器设计
- 使用 AD5292 数字电位器、OP184 运算放大器和 MOSFET 在减小的输出范围内提高精度的可编程电压源
- LT8641EUDC 12V、3.5A 降压转换器的典型应用电路
- EVAL-AD7939CBZ,用于 AD7939、10 位、8 通道并行 ADC 的评估板,带有定序器
- 典型应用图:用于 TDF8599C I2C 总线控制的立体声 D 类放大器的 I2C 总线模式下的双 BTL 136W/8ohm 具有全面诊断功能
- 用于开/关控制应用的 AM2G-1212DH30Z ±12V 2 瓦 DC-DC 转换器的典型应用
- STM32双路步进电机驱动信号板
- 使用 Analog Devices 的 ADF7023BCPZ 的参考设计