stm32_ota/HARDWARE/USB/usb.c

71 lines
2.8 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#include "usb.h"
#include <string.h>
#include <stdbool.h>
#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) ;
}