#include "usb.h" #include #include #include "sysport.h" #include "usart.h" #include "io.h" /******************************************************************************** * @file usb.c * @author 晏诚科技 Mr.Wang * @version V1.0.0 * @date 11-Dec-2018 * @brief 提供主板串口转USB接口外设驱动 ****************************************************************************** * @使用方法: * 先调用Camera_Init()对USB_COM初始化,应用层通过USBSendData()函数调用USB发送 * 数据,通过读取sUsbQueue帧缓冲区的数据来处理USB接收到的数据 *******************************************************************************/ /***************************************** *驱动内部使用常变量 ****************************************/ /***************************************** *驱动可供外部使用的常变量 ****************************************/ FrameQueue_s sUsbQueue ; //USB 接收数据帧数据环形缓冲区,上层只需要在初始化USB后,处理该缓冲区数据即可 /************************************************************************************************** * 名 称: void UsbInit(uint32_t baudrate) * 功能说明: 1、初始化Usb接收帧缓冲区sUsbQueue * 5、注册Usb串口接收帧回调函数 ***************************************************************************************************/ void UsbInit(uint32_t baudrate) { InitQueueMem(&sUsbQueue) ; //初始化RS485接收帧缓冲区sUsbQueue UARTx_Init(COM5, baudrate, USART_Mode_Rx | USART_Mode_Tx, INT_RANK_1) ;//初始化RS485映射的串口USB_COM,设置为收发模式,中断优先级为INT_RANK_1 Uart_RegHookCallback(COM5, UsbRecFrameCallback) ; //注册RS485接收帧中断回调函数 } /************************************************************************************************** * 名 称: void Rs232RecFrameCallback(char *recvBuf, uint16_t recvLen) * 功能说明: 当USB串口接收到数据帧时会回调此函数,此函数将数据帧插入到“帧环形缓冲区”sUsbQueue中 * 应用层无需关注如何接收,只需要在初始化Usb后,处理sUsbQueue帧数据即可。 **************************************************************************************************/ void UsbRecFrameCallback(char *recvBuf, uint16_t recvLen) { if( RW_OK != InsertQueueMemData(&sUsbQueue, recvBuf, recvLen) ) { ErrorLogPrintf("sUsbQueue溢出!") ; } } /**************************************************************************** * 名 称:void UsbSendData(char* sendData, uint16_t dataLen) * 功 能:通过USB_COM端口输出dataLen长度的数据 sendData * 入口参数: * @param *sendData 输出的数据指针 * @param dataLen 输出数据的长度 ****************************************************************************/ void UsbSendData(char* sendData, uint16_t dataLen) { UARTx_SendData(USB_COM, sendData, dataLen) ; }