winddevil 发表于 2022-1-26 10:22:35

[RL-UBS高速模式]求助贴-发送频率高则无法发送信息

本帖最后由 winddevil 于 2022-1-26 13:12 编辑

1.代码如下:这样就不能接收到数据,改为1000就可以接收数据
2.是因为我使用的串口调试助手有问题吗,请问应该使用什么上位机
3.如果是2.的问题,虚拟串口是需要专用上位机的吗
/*
*********************************************************************************************************
*
*      模块名称 : USB-Device-CDC-HighSpeed
*      文件名称 : USBD_User_CDC_HighSpeed.c
*      版    本 : V0.1
*      说    明 : RL-USB Device-CDC虚拟串口高速模式
*
*      修改记录 :
*                版本号日期      作者   说明
*                V0.1   2022-01-23 winddevil测试
*
*      Copyright (C), 2019-2030, EMB310
*
*********************************************************************************************************
*/
#include "bsp.h"
#include "rl_usb.h"


#define USB_BUFFER_SIZE 128
#define USB_SEND_BUFFER_SIZE 1024
uint8_t USBD_HIGHSPEED_CDC_Receive_Buf1;
uint8_t USBD_HIGHSPEED_CDC_Receive_Buf2;
uint8_t USBD_HIGHSPEED_CDC_Receive_Buf3;
uint8_t USBD_HIGHSPEED_CDC_Send_Buf1;
int usb_buffer_cnt=0;
int usb_send_cnt=0;
int recive_flag=1;

static void *cdc_acm_bridge_tid = 0U;
static CDC_LINE_CODING cdc_acm_line_coding = {0U, 0U, 0U, 0U};

/*
*********************************************************************************************************
*      函 数 名: CDC1_ACM_UART_to_USB_Thread
*      功能说明: USB发送任务
*      形    参: 无
*      返 回 值: 无
* 优 先 级: osPriorityNormal
*********************************************************************************************************
*/
#ifdef USB_CMSIS_RTOS2
__NO_RETURN static void CDC1_ACM_UART_to_USB_Thread(void *arg)
{
#else
__NO_RETURN void CDC1_ACM_UART_to_USB_Thread(void const *arg)
{
#endif
      (void)(arg);
      
      for (;;)
      {      
                USBD_CDC_ACM_WriteData(1U, USBD_HIGHSPEED_CDC_Send_Buf1, USB_SEND_BUFFER_SIZE);
                osDelay(100U);
      }
}

#ifdef USB_CMSIS_RTOS2
#ifdef USB_CMSIS_RTOS2_RTX5
/*控制块内存*/
static osRtxThread_t cdc1_acm_uart_to_usb_thread_cb_mem __SECTION(.bss.os.thread.cb);
/*栈内存*/
static uint64_t cdc1_acm_uart_to_usb_thread_stack_mem __SECTION(.bss.os.thread.stack);
#endif
/*线程参数设置*/
static const osThreadAttr_t cdc1_acm_uart_to_usb_thread_attr = {
      "CDC1_ACM_USB_Thread",
      0U,
#ifdef USB_CMSIS_RTOS2_RTX5
      &cdc1_acm_uart_to_usb_thread_cb_mem,
      sizeof(osRtxThread_t),
      &cdc1_acm_uart_to_usb_thread_stack_mem,
#else
      NULL,
      0U,
      NULL,
#endif
      512U,
      osPriorityNormal,
      0U,
      0U};
#else
extern const osThreadDef_t os_thread_def_CDC0_ACM_UART_to_USB_Thread;
osThreadDef(CDC0_ACM_UART_to_USB_Thread, osPriorityNormal, 1U, 0U);
#endif
/***********************************CDC-ACM的回调函数们*************************************************/

/*
*********************************************************************************************************
*      函 数 名: USBD_CDC1_ACM_DataReceived
*      功能说明: USB接收回调
*      形    参: len 可接收的数据长度
*      返 回 值: 无
*********************************************************************************************************
*/
void USBD_CDC1_ACM_DataReceived(uint32_t len)
{
      int32_t cnt;
      
      /*CDC接收的数据储存*/
      if(len>=USB_BUFFER_SIZE)
      {
                if(s_DmaFlag==2)
                {
                        cnt = USBD_CDC_ACM_ReadData(1U, USBD_HIGHSPEED_CDC_Receive_Buf1, USB_BUFFER_SIZE);
                }
                else if(s_DmaFlag==1)
                {
                        cnt = USBD_CDC_ACM_ReadData(1U, USBD_HIGHSPEED_CDC_Receive_Buf2, USB_BUFFER_SIZE);
                }
                else
                {
                        cnt = USBD_CDC_ACM_ReadData(1U, USBD_HIGHSPEED_CDC_Receive_Buf3, USB_BUFFER_SIZE);
                }
      }
}

/*
*********************************************************************************************************
*      函 数 名: USBD_CDC1_ACM_Initialize
*      功能说明: USB初始化回调,USBD_Initialize会调用到它
*      形    参: 无
*      返 回 值: 无
*********************************************************************************************************
*/
void USBD_CDC1_ACM_Initialize(void)
{
#ifdef USB_CMSIS_RTOS2
      cdc_acm_bridge_tid = osThreadNew(CDC1_ACM_UART_to_USB_Thread, NULL, &cdc1_acm_uart_to_usb_thread_attr);
#else
      cdc_acm_bridge_tid = osThreadCreate(osThread(CDC0_ACM_UART_to_USB_Thread), NULL);
#endif
}

/*
*********************************************************************************************************
*      函 数 名: USBD_CDC1_ACM_Uninitialize
*      功能说明: USB失能回调
*      形    参: 无
*      返 回 值: 无
*********************************************************************************************************
*/
void USBD_CDC1_ACM_Uninitialize(void)
{

      if (osThreadTerminate(cdc_acm_bridge_tid) == osOK)
      {
                cdc_acm_bridge_tid = NULL;
      }
}

/*
*********************************************************************************************************
*      函 数 名: USBD_CDC1_ACM_Reset
*      功能说明: USB复位回调
*      形    参: 无
*      返 回 值: 无
*********************************************************************************************************
*/
void USBD_CDC1_ACM_Reset(void)
{
}

/*
*********************************************************************************************************
*      函 数 名: USBD_CDC1_ACM_SetLineCoding
*      功能说明: USB改变会话回调
*      形    参: line_coding
*      返 回 值: 无
*********************************************************************************************************
*/
bool USBD_CDC1_ACM_SetLineCoding(const CDC_LINE_CODING *line_coding)
{

      /*储存发过来的设定*/
      cdc_acm_line_coding = *line_coding;

      return true;
}

/*
*********************************************************************************************************
*      函 数 名: USBD_CDC1_ACM_GetLineCoding
*      功能说明: USB会话状态查询回调
*      形    参: line_coding
*      返 回 值: 无
*********************************************************************************************************
*/
bool USBD_CDC1_ACM_GetLineCoding(CDC_LINE_CODING *line_coding)
{

      /*发送储存的设定*/
      *line_coding = cdc_acm_line_coding;

      return true;
}

/*
*********************************************************************************************************
*      函 数 名: USBD_CDC1_ACM_SetControlLineState
*      功能说明: USB设置控制线状态
*      形    参: state
*      返 回 值: 无
*********************************************************************************************************
*/
bool USBD_CDC1_ACM_SetControlLineState(uint16_t state)
{

      /*这里可以添加自己的代码*/

      (void)(state);

      return true;
}

/***************************** EMB310 (END OF FILE) *********************************/代码附在这里




eric2013 发表于 2022-1-26 10:42:35

用默认的接口文件里面的CMSIS Driver UART驱动更方便些。

winddevil 发表于 2022-1-26 11:00:19

eric2013 发表于 2022-1-26 10:42
用默认的接口文件里面的CMSIS Driver UART驱动更方便些。

额?是USB不是串口,这个文件是什么

eric2013 发表于 2022-1-27 11:47:27

winddevil 发表于 2022-1-26 11:00
额?是USB不是串口,这个文件是什么

你这个不是虚拟串口么,串口部分有专门的文件接口,直接就可以使用。
页: [1]
查看完整版本: [RL-UBS高速模式]求助贴-发送频率高则无法发送信息