单片机型号: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口接入计算机,按照提示安装完驱动程序后,就可以看到相应的虚拟串口了。
至此,一切完成。
上一篇:STM32开发笔记22: 手动添加驱动文件
下一篇:STM32开发笔记20: STM32L053R8T6的keil配置
推荐阅读最新更新时间:2024-11-08 11:07
设计资源 培训 开发板 精华推荐
- EVAL-AD7938CB,用于 AD7938、12 位、8 通道并行 ADC 的评估板,带有定序器
- 使用 ROHM Semiconductor 的 BD49L24G-TL 的参考设计
- 嵌入式课程实验板(湖工新院)
- AP3211 1.4Mhz、1.5A异步DC-DC降压转换器的典型应用
- FEBFAN48610-M00LPOLA-GEVB:具有直通模式的同步升压稳压器
- 【CW32】PWM风扇调速器
- AD9251-80EBZ,用于 AD9251BCPZ-80、2 通道、14 位、80 MSPS 模数转换器的评估板
- L7815A负输出电压电路的典型应用
- 基于SR1CARU的单电压域输入/输出和SR1xxxU器件的典型应用电路
- MPC574xP功能安全电机控制评估系统