历史上的今天
今天是:2024年09月12日(星期四)
2018年09月12日 | STM32L0开发笔记8: USB驱动的移植
2018-09-12 来源:eefocus
现在使用的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,TI,NXP的ARM Cortex-m3学习板申请体会 这三家的都申请过,有一些想法 ST最大方,板子,光盘,连接线一应俱全。 并且ST搞过好几次免费申请活动,每次免费送的套件数量还比较大。 拿到套件后就能直接上手练习了。 TI其次,申请的TI套件,使用手册里明明说的是有两块板子,可是我只收到 ...… 查看全部问答> |
|
代码如下: SOCKET Sock = INVALID_SOCKET; // Datagram window socket SOCKADDR_IN source_sin; &n ...… 查看全部问答> |
|
在CRC8中出现了误码但没发现的概率是1/256,CRC16的概率是1/65536,而CRC32的概率则是1/2^32,那已经是非常小了,所以一般在数据不多的情况下用CRC16校验就可以了,而在整个文件的校验中一般用CRC32校验。 如何理解,是否要用概率论的模型去解释? ...… 查看全部问答> |
|
之前关于EVC下图形编程画二维曲线问题已经有了进展,现在刚画出简单的二维曲线,就是随机折线那样的,主要通过两个随机数nRandomX = rand() % 10;nRandomY = rand() % 10; 主要代码如下: BOOL CDraw2DGraphDlg::OnInitDialog() {   ...… 查看全部问答> |
|
我的解决方法是用1117-3.3,相信这个芯片大家都有。它的引脚和BL相同,但板上封装是sot89,我手头只有sot223,我把1脚和3脚向里折了一下,注意不要折断,然后再焊上就可以了。这时板子上D2不要焊,L1用焊锡直接连上就可以了。 现在板子的电压是3.3V ...… 查看全部问答> |
|
Ver 0.1 - Jeffrey1.MSP430 入门2.如何为我的应用选择最合适的MSP430 芯片?3.与MSP430 的引导加载程序通信的开发工具4.MSP430 需配合何种晶振工作?5.使用哪款MSP430 编程器可以用来烧断JTAG 熔丝?6.要实现MSP430 编程,应如何连接JTAG?7 ...… 查看全部问答> |
|
1设计要求 2设计方案 3选便宜的看看,效率和下边那个是什么 4原理图 在选择方案时会出现相关LED厂家产品的选择很方便,可以参考修改设计,找到更加合适方案 … 查看全部问答> |




