使用CDC_Transmit_FS函数发送数据: char str[] = "Hello World!\r\n"; while (1) { CDC_Transmit_FS((uint8_t*)str, strlen(str)); HAL_Delay(2000); } 3.4 接收数据 在usbd_cdc_if.c中,可以实现一个回调函数来处理接收到的数据: static int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *...
while (CDC_Transmit_FS(i2cdata, reg_length) != USBD_OK);我这边有个I2C读的程序。读64位,存在64位的数组里,然后用CDC发出去。长度可调;为什么63为以下或以上,都可以正常发送。遇到64就出问题呢?遇到64就会卡住,多读一位,或者再次运行改程序,但是只读一位就会全发出来。 蓝梦妖蝶 默默无闻 1 如上...
16 static int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *Len) 17 { 18 /* USER CODE BEGIN 6 */ 19 CDC_Transmit_FS(Buf, *Len); 20 21 USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &Buf[0]); 22 USBD_CDC_ReceivePacket(&hUsbDeviceFS); 23 return (USBD_OK); 24 /* USER CODE END...
copy接收的数据 CDC_Transmit_FS:直接调用,传入对应数据和大小即可 USART_RXIN_IDLE_Recever:该函数位自定义中断函数,但USART接收到一个字符时,传输完成时,进入该函数 HAL_UART_Transmit:直接调用,传入对应数据和大小即可 这些函数具体代码逻辑和执行过程会再写一篇文章...
1uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len) 2{ 3uint8_t result = USBD_OK; 4/* USER CODE BEGIN 7 */ 5USBD_CDC_SetTxBuffer(hUsbDevice_0, Buf, Len); 6result = USBD_CDC_TransmitPacket(hUsbDevice_0); 7/* USER CODE END 7 */ ...
CDC_Receive_FS:该函数由库中断USBD_CDC_DataIn回调,次函数一次传输64B数据,如果USBCDC 本次传输>=64,如129,则该函数会调用三次,分别位64+64+1;从次函数copy接收的数据 CDC_Transmit_FS:直接调用,传入对应数据和大小即可 USART_RXIN_IDLE_Recever:该函数位自定义中断函数,但USART接收到一个字符时,传输完成...
CDC_Transmit_FS(UserTxBufferFS, UserTxBufPtrIn); UserTxBufPtrIn = 0; } 1. 2. 3. 4. 5. 6. 7. 通过以上设置,即可实现类似CH340等USB转串口芯片的功能。但STM32的USB接口功能更强大,可以实现USB复合设备,比如同时虚拟多个串口。以后有时间再做研究和大家分享。
同样,CDC_Transmit_FS函数也相应修改,用于向特定的CDC设备发送数据。通过上述步骤,我们成功地实现了STM32 USB配置5个CDC设备的目标。在后续的使用中,通过合理的接口设计与配置,可以有效提升设备的通信性能和数据处理能力,为用户提供稳定、高效的串行通信解决方案。
1、使用CDC_Receive_FS()能够正常接收数据,单独采用CDC_Transmit_FS()定时发送任意长度数据也正常,...
打开usbd_cdc_if.c文件,找到如下函数:uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len){ uint8_t result = USBD_OK;/* USER CODE BEGIN 7 */ USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef*)hUsbDeviceFS.pClassData; if (hcdc->TxState != 0) { return USB...