STM32 USB虚拟串口通信

目录

一、使用STM32 HAL库配置

选择USB从机模式

添加USB库并选择虚拟串口模式

二、HAL库USB驱动函数介绍

三、驱动函数编写


一、使用STM32 HAL库配置

选择USB从机模式

添加USB库并选择虚拟串口模式

 

二、HAL库USB驱动函数介绍

static int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *Len)
//作用:USB虚拟串口接收函数(相当于中断回调)
//参数:   uint8_t* Buf:接收数据缓存区
         uint32_t *Len:接收数据长度

uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len)
//作用:USB虚拟串口发送函数
//参数:   uint8_t* Buf:发送数据缓存区
          uint16_t Len:发送数据长度

三、驱动函数编写

#ifndef _USBD_INIT_H_
#define _USBD_INIT_H_

#include <stdio.h>
#include <stdlib.h>
#include "stm32h7xx.h"
#include "stm32h7xx_hal.h"
#include "usbd_def.h"
#include "usbd_core.h"
#include "usbd_cdc.h"
#include "usb_device.h"
#include "types.h"
#include "stdarg.h"
#include "usbd_cdc_if.h"

typedef struct USB_ISR
{
	void (*USBTXOver)(void);    //USB发送回调函数                
	void (*USBRXOperation)(uint8_t *RxData,uint32_t *Len);  //USB接收回调函数

}USB_ISR;

extern USB_ISR Usb_ISR;

/*******************************************************************************
* 函数  : STM32_USBD_Init
* 描述  : USB初始化函数
* 输入  : Tx_Over: 发送回调函数
		  RxFunction: 接收回调函数
* 输出  : None
* 返回  : None
* 注意  : None
*******************************************************************************/

void STM32_USBD_Init(void Tx_Over(void), void (*RxFunction)(uint8_t *RX_Data,uint32_t *Len)); 
   
/*******************************************************************************
* 函数  : USBD_SendBuff
* 描述  : USB发送函数
* 输入  :Buf: 发送数据缓存区
		 Len: 发送数据长度
* 输出  : None
* 返回  : None
* 注意  : None
*******************************************************************************/   
void USBD_SendBuff(uint8_t* Buf, uint16_t Len);  

/*******************************************************************************
* 函数  : usb_printf
* 描述  : printf重定义函数
* 输入  : None

* 输出  : None
* 返回  : None
* 注意  : None
*******************************************************************************/  
void usb_printf(const char *format, ...);

/*******************************************************************************
* 函数  : RecvMemcpy
* 描述  : 接收数据回调函数
* 输入  : None

* 输出  : None
* 返回  : None
* 注意  : None
*******************************************************************************/   
void RecvMemcpy(uint8_t *str,uint32_t *Len);

/*******************************************************************************
* 函数  : RecvProcess
* 描述  : 接收数据处理函数
* 输入  : None

* 输出  : None
* 返回  : None
* 注意  : None
*******************************************************************************/ 
void RecvProcess(uint8_t *str,uint32_t *Len);

#endif
#include "usbd_init.h"

extern USBD_HandleTypeDef hUsbDeviceFS;
extern PCD_HandleTypeDef hpcd_USB_OTG_FS;
extern uint8_t UserTxBufferFS[APP_TX_DATA_SIZE];

USB_ISR Usb_ISR;
 
/*******************************************************************************
* 函数  : STM32_USBD_Init
* 描述  : USB初始化函数
* 输入  : Tx_Over: 发送回调函数
		  RxFunction: 接收回调函数
* 输出  : None
* 返回  : None
* 注意  : None
*******************************************************************************/ 

void STM32_USBD_Init(void Tx_Over(void), void (*RxFunction)(uint8_t *RX_Data,uint32_t *Len))
{

    MX_USB_DEVICE_Init();	
	Usb_ISR.USBTXOver = Tx_Over;
	Usb_ISR.USBRXOperation = RxFunction;
}

/*******************************************************************************
* 函数  : USBD_SendBuff
* 描述  : USB发送函数
* 输入  :Buf: 发送数据缓存区
		 Len: 发送数据长度
* 输出  : None
* 返回  : None
* 注意  : None
*******************************************************************************/   

void USBD_SendBuff(uint8_t* Buf, uint16_t Len)
{
   CDC_Transmit_FS(Buf,Len);
}


/*******************************************************************************
* 函数  : usb_printf
* 描述  : printf重定义函数
* 输入  : None

* 输出  : None
* 返回  : None
* 注意  : None
*******************************************************************************/   
void usb_printf(const char *format, ...)
{
    va_list args;
    uint32_t length;
 
    va_start(args, format);
    length = vsnprintf((char *)UserTxBufferFS, APP_TX_DATA_SIZE, (char *)format, args);
    va_end(args);
    CDC_Transmit_FS(UserTxBufferFS, length);
}
 


void OTG_FS_IRQHandler(void)
{
  HAL_PCD_IRQHandler(&hpcd_USB_OTG_FS);
}

/*******************************************************************************
* 函数  : RecvMemcpy
* 描述  : 接收数据回调函数
* 输入  : None

* 输出  : None
* 返回  : None
* 注意  : None
*******************************************************************************/   

void RecvMemcpy(uint8_t *str,uint32_t *Len)
{
   uint8_t *mainstr = (uint8_t *)malloc(sizeof(uint8_t)*(*Len));
   memcpy(mainstr,str,*Len);

   RecvProcess(str,Len);   
}

/*******************************************************************************
* 函数  : RecvProcess
* 描述  : 接收数据处理函数
* 输入  : None

* 输出  : None
* 返回  : None
* 注意  : None
*******************************************************************************/ 
void RecvProcess(uint8_t *str,uint32_t *Len)
{
    
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值