qq_25830979 2024-08-30 14:24 采纳率: 0%
浏览 2

STM32 USB CDC HS

STM32 使用USB3300虚拟串口,发送ADC数据,数据量60K字节以上,上位机下发指令,给一个指令发送一次数据,但是刚上电或者复位初始化后,前几次传输的数据会丢很多,不稳定,只有多传输几次才会正常传输不丢失

  • 写回答

1条回答 默认 最新

  • 吃不了席 2024-08-30 17:15
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    这个问题可能是由于USB CDC HS的初始化和配置不正确导致的。请按照以下步骤检查和修改代码:

    1. 确保在初始化USB CDC HS之前,已经正确配置了时钟、GPIO和中断。
    2. 检查USB CDC HS的配置,包括波特率、数据位、停止位等参数是否正确。
    3. 在USB CDC HS的中断服务程序中,确保正确处理了接收到的数据和发送完成的事件。
    4. 检查上位机下发指令的处理逻辑,确保在接收到指令后立即发送ADC数据。
    5. 如果问题仍然存在,可以尝试在发送数据前添加一定的延时,以确保USB CDC HS已经正确初始化。

    以下是一个简化的STM32 USB CDC HS初始化和发送数据的示例代码:

    #include "stm32f1xx_hal.h"
    #include "usb_device.h"
    #include "usbd_cdc_if.h"
    
    /* 私有变量定义 */
    CDC_HandleTypeDef hUsbDeviceFS;
    uint8_t buffer[60 * 1024]; // 60K字节缓冲区
    
    /* 函数声明 */
    void SystemClock_Config(void);
    static void MX_GPIO_Init(void);
    static void MX_USB_OTG_FS_PCD_MT8201_Init(void);
    
    int main(void)
    {
      /* MCU Configuration--------------------------------------------------------*/
      HAL_Init();
      SystemClock_Config();
      MX_GPIO_Init();
      MX_USB_OTG_FS_PCD_MT8201_Init();
    
      /* Infinite loop */
      while (1)
      {
        // 等待上位机下发指令
        if (receivedCommand())
        {
          // 读取ADC数据并存储到缓冲区
          readADCData(buffer, sizeof(buffer));
    
          // 发送数据
          CDC_Transmit_FS(&hUsbDeviceFS, buffer, sizeof(buffer));
        }
      }
    }
    
    /* 函数实现 */
    void SystemClock_Config(void)
    {
      // ... 系统时钟配置代码 ...
    }
    
    static void MX_GPIO_Init(void)
    {
      // ... GPIO初始化代码 ...
    }
    
    static void MX_USB_OTG_FS_PCD_MT8201_Init(void)
    {
      // ... USB初始化代码 ...
    }
    
    bool receivedCommand(void)
    {
      // ... 检查是否收到上位机下发指令的代码 ...
    }
    
    void readADCData(uint8_t *buffer, uint32_t size)
    {
      // ... 读取ADC数据的代码 ...
    }
    

    请根据实际项目情况修改代码,并进行测试。

    评论

报告相同问题?

问题事件

  • 创建了问题 8月30日

悬赏问题

  • ¥15 pychram安装jupyter插件
  • ¥60 悬赏破解越狱iphone4s中360保险箱密码遗忘
  • ¥20 ARKts悬浮窗和快捷方式问题
  • ¥15 linux中nginx服务器提示not found on accelerator,如何解决?(语言-php|操作系统-linux)
  • ¥15 comparecluster没有办法kegg
  • ¥15 远程访问linux主机超时
  • ¥15 odoo17存货管理优势于中国国内该行业传统ERP或MES的详细解读和举例
  • ¥15 CPU卡指令整合指令数据都在图片上
  • ¥15 odoo17处理受托加工产品
  • ¥15 如何用MATLAB编码图三的积分