基于STM32的USB固件编程
0赞在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_LP和CTR_HP,CTR_LP负责USB低优先级中断的处理,而CTR_HP负责USB高优先级中断的处理。
usb_mem.c文件,用于处理PMA数据。PMA全称为Packet memory area,是STM32内部用于USB/CAN的专用数据缓冲区。该文件内也只有2个函数,即PMAToUserBufferCopy和UserToPMABufferCopy,分别用于将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设备的枚举等相关功能的初始化。其余要做的就是调用相关函数发送和接收数据。