开发板是用的stm32f103c8t6的核心板淘宝上最便宜最常见的那种(还是上图吧)
stm32f1系列的hal驱动库中把usb驱动放在了“Middlewares(中间件)”文件夹下,且有“STM32_USB_Device_Library”和“STM32_USB_Host_Library”两个驱动库。若是想直接利用驱动库新建工程可在这两个库的目录下复制Core文件夹和Class文件夹下所需文件。
使用stm32cube直接生成工程:
先勾选Peripherals的USB->Device才能在MiddleWares下的USB_Devics下选择IP核,下拉后有六个选项,分别对应USB设备的六大分类:
分类 | 功能 |
---|---|
AUDIO | USB音频设备 |
CDC(communication device class) | 虚拟串口 |
Download Firmware Update | 固件更新 |
Human Interface Device | 人机接口 |
Custom Human Interface Device | 传统人机接口(键盘鼠标类) |
Mass Storage Class | 大容量存储设备 |
此处选择CDC设备。需要注意的是,在RCC分类下的HSE必须被使能成外部晶振->Crystal/ceramic Resonator。要开启USB核主时钟必须达到48M,因为USB区域的时钟为48M。这点可在时钟树的配置中很清楚看到。不过,若主时钟没有配置成48M或以上,在STM32Cube的Clock Configuartion界面会直接报错,点进去看会提示是否自动设置时钟,直接确认就OK。
PLL倍频数位6的话,USB分频设为1即可,若要开到72M的最高频率,分频数则要设为1.5。其余配置均保持默认即可。
此处还开启了SWD引脚用于代码的下载。最终的引脚配置如图: