使用USB CDCSTM32发送数据

问题描述


我正在使用NucleoF413ZH和STM32CubeIDE。我有16个麦克风,每个麦克风都连接到一个ADC通道,并且由于使用了DMA,它可以将数据定向到内存。但是,我想对信号进行互相关,因此得出的结论是,我会将数据发送到PC或RPi 4b,然后在那里进行计算。但是对我来说,问题是从内存发送了太多数据。我尝试使用CDC_TRANSMIT_FS,但无法发送所有16个通道的测量值,传输速度也很慢。 有没有办法发送16个元素甚至更好的16xM元素的整个数组,所以也许会更快?我需要16mic x10bit x44.1khz〜= 7Mbit / s = 882KBytes / s,我也可以将某些麦克风减少到12个。这是我的代码链接https://pastebin.pl/view/6059edc8中的完整内容):


此外,对不起,如果语法上有些不好,英语是我的第二语言,并且我还在学习


/* USER CODE BEGIN PV */
uint16_t Pomiar[16]; // measurments 16x1
char msg[10];

uint8_t DataToSend[40]; // 
uint8_t MessageCounter = 0; //
uint8_t MessageLength = 0; // Msg lngth
/* USER CODE END PV */

 /* USER CODE BEGIN 2 */
  HAL_ADC_Start_DMA(&hadc1,(uint16_t*)Pomiar,16);
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */

  while (1)
  {

    // CDC_Transmit_FS((uint8_t*)Pomiar,(512));

        //++MessageCounter;
        //MessageLength = sprintf(DataToSend,"Wiadomosc nr %d\n\r",MessageCounter);
    //  MessageLength = sprintf(DataToSend,"%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d\n\r",Pomiar[0],Pomiar[1],Pomiar[2],Pomiar[3],Pomiar[4],Pomiar[5],Pomiar[6],Pomiar[7],Pomiar[8],Pomiar[9],Pomiar[10],Pomiar[11],Pomiar[12],Pomiar[13],Pomiar[14],Pomiar[15]);
        MessageLength = sprintf(DataToSend,"%d:%d:%d:%d\n\r",Pomiar[3]);
        CDC_Transmit_FS(DataToSend,MessageLength);

      //HAL_Delay(1);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }

我们的设置

static void MX_USART3_UART_Init(void)
    {
    
      /* USER CODE BEGIN USART3_Init 0 */

  /* USER CODE END USART3_Init 0 */

  /* USER CODE BEGIN USART3_Init 1 */
    // huart3.Init.Baudrate = 115200;
  /* USER CODE END USART3_Init 1 */
  huart3.Instance = USART3;
 // huart3.Init.Baudrate = 115200;
  huart3.Init.Baudrate = 921600;
  huart3.Init.WordLength = UART_WORDLENGTH_8B;
  huart3.Init.StopBits = UART_STOPBITS_1;
  huart3.Init.Parity = UART_PARITY_NONE;
  huart3.Init.Mode = UART_MODE_TX_RX;
  huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  huart3.Init.OverSampling = UART_OVERSAMPLING_16;
  if (HAL_UART_Init(&huart3) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN USART3_Init 2 */

  /* USER CODE END USART3_Init 2 */

}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)