cheng100841

基于STM32的USB固件编程

0
阅读(4224)

USB接口设计中,USB固件编程是整个设计任务的核心。USB固件程序用于完成USB设备的识别、重列举、设备请求、USB协议处理、外部硬件的功能、负责与USB主机之间的数据通信等。

在使用STM32F103RBT6进行USB固件编程时,由于ST提供了USB的固件库,所以可以使用USB固件库中的函数来简化编程代码。在使用USB的固件库时需要添加的一些.c文件如下:

usb_regs.c文件,主要负责USB控制寄存器的底层操作,里面有个USB寄存器的底层操作函数。

usb_init.c文件,里面只有一个函数:USB_Init,用于USB控制器的初始化。

usb_int.c文件,里面只有两个函数CTR_LPCTR_HPCTR_LP负责USB低优先级中断的处理,而CTR_HP负责USB高优先级中断的处理。

usb_mem.c文件,用于处理PMA数据。PMA全称为Packet memory area,是STM32内部用于USB/CAN的专用数据缓冲区。该文件内也只有2个函数,即PMAToUserBufferCopyUserToPMABufferCopy,分别用于将USB端点的数据传送给主机和主机的数据传送到USB端点。

usb­­­_core.c文件,用于处理USB协议。

以上的文件不需要修改,直接调用内部函数即可。

还有一些其他的.c文件需要根据具体情况进行一定的修改。

usb_pwr.c文件,用于USB控制器的电源管理。

usb_istr.c文件,用于处理USB中断。

usb_endp.c文件,用于非控制端点处理。

usb_prop.c文件,用于相关属性配置。

usb_desc.c文件,用于USB描述符的处理。

usb_config.c文件,用于硬件的配置,比如初始化USB时钟、USB中断、低功耗模式处理等。

Set_System();Set_USBClock();USB_Interrupts_Config();USB_Init();这四条语句完成了对系统时钟、USB时钟、USB中断及USB设备的枚举等相关功能的初始化。其余要做的就是调用相关函数发送和接收数据。