硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1020|回复: 3
收起左侧

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

[复制链接]

5

主题

24

回帖

39

积分

新手上路

积分
39
发表于 2022-1-26 10:22:35 | 显示全部楼层 |阅读模式
本帖最后由 winddevil 于 2022-1-26 13:12 编辑

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


  19. #define USB_BUFFER_SIZE 128
  20. #define USB_SEND_BUFFER_SIZE 1024
  21. uint8_t USBD_HIGHSPEED_CDC_Receive_Buf1[USB_BUFFER_SIZE];
  22. uint8_t USBD_HIGHSPEED_CDC_Receive_Buf2[USB_BUFFER_SIZE];
  23. uint8_t USBD_HIGHSPEED_CDC_Receive_Buf3[USB_BUFFER_SIZE];
  24. uint8_t USBD_HIGHSPEED_CDC_Send_Buf1[USB_SEND_BUFFER_SIZE];
  25. int usb_buffer_cnt=0;
  26. int usb_send_cnt=0;
  27. int recive_flag=1;

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

  30. /*
  31. *********************************************************************************************************
  32. *        函 数 名: CDC1_ACM_UART_to_USB_Thread
  33. *        功能说明: USB发送任务
  34. *        形    参: 无
  35. *        返 回 值: 无
  36. * 优 先 级: osPriorityNormal
  37. *********************************************************************************************************
  38. */
  39. #ifdef USB_CMSIS_RTOS2
  40. __NO_RETURN static void CDC1_ACM_UART_to_USB_Thread(void *arg)
  41. {
  42. #else
  43. __NO_RETURN void CDC1_ACM_UART_to_USB_Thread(void const *arg)
  44. {
  45. #endif
  46.         (void)(arg);
  47.         
  48.         for (;;)
  49.         {        
  50.                 USBD_CDC_ACM_WriteData(1U, USBD_HIGHSPEED_CDC_Send_Buf1, USB_SEND_BUFFER_SIZE);
  51.                 osDelay(100U);
  52.         }
  53. }

  54. #ifdef USB_CMSIS_RTOS2
  55. #ifdef USB_CMSIS_RTOS2_RTX5
  56. /*控制块内存*/
  57. static osRtxThread_t cdc1_acm_uart_to_usb_thread_cb_mem __SECTION(.bss.os.thread.cb);
  58. /*栈内存*/
  59. static uint64_t cdc1_acm_uart_to_usb_thread_stack_mem[512U / 8U] __SECTION(.bss.os.thread.stack);
  60. #endif
  61. /*线程参数设置*/
  62. static const osThreadAttr_t cdc1_acm_uart_to_usb_thread_attr = {
  63.         "CDC1_ACM_USB_Thread",
  64.         0U,
  65. #ifdef USB_CMSIS_RTOS2_RTX5
  66.         &cdc1_acm_uart_to_usb_thread_cb_mem,
  67.         sizeof(osRtxThread_t),
  68.         &cdc1_acm_uart_to_usb_thread_stack_mem[0],
  69. #else
  70.         NULL,
  71.         0U,
  72.         NULL,
  73. #endif
  74.         512U,
  75.         osPriorityNormal,
  76.         0U,
  77.         0U};
  78. #else
  79. extern const osThreadDef_t os_thread_def_CDC0_ACM_UART_to_USB_Thread;
  80. osThreadDef(CDC0_ACM_UART_to_USB_Thread, osPriorityNormal, 1U, 0U);
  81. #endif
  82. /***********************************CDC-ACM的回调函数们*************************************************/

  83. /*
  84. *********************************************************************************************************
  85. *        函 数 名: USBD_CDC1_ACM_DataReceived
  86. *        功能说明: USB接收回调
  87. *        形    参: len 可接收的数据长度
  88. *        返 回 值: 无
  89. *********************************************************************************************************
  90. */
  91. void USBD_CDC1_ACM_DataReceived(uint32_t len)
  92. {
  93.         int32_t cnt;
  94.         
  95.         /*CDC接收的数据储存*/
  96.         if(len>=USB_BUFFER_SIZE)
  97.         {
  98.                 if(s_DmaFlag==2)
  99.                 {
  100.                         cnt = USBD_CDC_ACM_ReadData(1U, USBD_HIGHSPEED_CDC_Receive_Buf1, USB_BUFFER_SIZE);
  101.                 }
  102.                 else if(s_DmaFlag==1)
  103.                 {
  104.                         cnt = USBD_CDC_ACM_ReadData(1U, USBD_HIGHSPEED_CDC_Receive_Buf2, USB_BUFFER_SIZE);
  105.                 }
  106.                 else
  107.                 {
  108.                         cnt = USBD_CDC_ACM_ReadData(1U, USBD_HIGHSPEED_CDC_Receive_Buf3, USB_BUFFER_SIZE);
  109.                 }
  110.         }
  111. }

  112. /*
  113. *********************************************************************************************************
  114. *        函 数 名: USBD_CDC1_ACM_Initialize
  115. *        功能说明: USB初始化回调,USBD_Initialize会调用到它
  116. *        形    参: 无
  117. *        返 回 值: 无
  118. *********************************************************************************************************
  119. */
  120. void USBD_CDC1_ACM_Initialize(void)
  121. {
  122. #ifdef USB_CMSIS_RTOS2
  123.         cdc_acm_bridge_tid = osThreadNew(CDC1_ACM_UART_to_USB_Thread, NULL, &cdc1_acm_uart_to_usb_thread_attr);
  124. #else
  125.         cdc_acm_bridge_tid = osThreadCreate(osThread(CDC0_ACM_UART_to_USB_Thread), NULL);
  126. #endif
  127. }

  128. /*
  129. *********************************************************************************************************
  130. *        函 数 名: USBD_CDC1_ACM_Uninitialize
  131. *        功能说明: USB失能回调
  132. *        形    参: 无
  133. *        返 回 值: 无
  134. *********************************************************************************************************
  135. */
  136. void USBD_CDC1_ACM_Uninitialize(void)
  137. {

  138.         if (osThreadTerminate(cdc_acm_bridge_tid) == osOK)
  139.         {
  140.                 cdc_acm_bridge_tid = NULL;
  141.         }
  142. }

  143. /*
  144. *********************************************************************************************************
  145. *        函 数 名: USBD_CDC1_ACM_Reset
  146. *        功能说明: USB复位回调
  147. *        形    参: 无
  148. *        返 回 值: 无
  149. *********************************************************************************************************
  150. */
  151. void USBD_CDC1_ACM_Reset(void)
  152. {
  153. }

  154. /*
  155. *********************************************************************************************************
  156. *        函 数 名: USBD_CDC1_ACM_SetLineCoding
  157. *        功能说明: USB改变会话回调
  158. *        形    参: line_coding
  159. *        返 回 值: 无
  160. *********************************************************************************************************
  161. */
  162. bool USBD_CDC1_ACM_SetLineCoding(const CDC_LINE_CODING *line_coding)
  163. {

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

  166.         return true;
  167. }

  168. /*
  169. *********************************************************************************************************
  170. *        函 数 名: USBD_CDC1_ACM_GetLineCoding
  171. *        功能说明: USB会话状态查询回调
  172. *        形    参: line_coding
  173. *        返 回 值: 无
  174. *********************************************************************************************************
  175. */
  176. bool USBD_CDC1_ACM_GetLineCoding(CDC_LINE_CODING *line_coding)
  177. {

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

  180.         return true;
  181. }

  182. /*
  183. *********************************************************************************************************
  184. *        函 数 名: USBD_CDC1_ACM_SetControlLineState
  185. *        功能说明: USB设置控制线状态
  186. *        形    参: state
  187. *        返 回 值: 无
  188. *********************************************************************************************************
  189. */
  190. bool USBD_CDC1_ACM_SetControlLineState(uint16_t state)
  191. {

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

  193.         (void)(state);

  194.         return true;
  195. }

  196. /***************************** EMB310 (END OF FILE) *********************************/
复制代码
代码附在这里




回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106882
QQ
发表于 2022-1-26 10:42:35 | 显示全部楼层
用默认的接口文件里面的CMSIS Driver UART驱动更方便些。
回复

使用道具 举报

5

主题

24

回帖

39

积分

新手上路

积分
39
 楼主| 发表于 2022-1-26 11:00:19 | 显示全部楼层
eric2013 发表于 2022-1-26 10:42
用默认的接口文件里面的CMSIS Driver UART驱动更方便些。

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

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106882
QQ
发表于 2022-1-27 11:47:27 | 显示全部楼层
winddevil 发表于 2022-1-26 11:00
额?是USB不是串口,这个文件是什么

你这个不是虚拟串口么,串口部分有专门的文件接口,直接就可以使用。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-9 03:17 , Processed in 0.281131 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表