赞
踩
参数全默认即可
参数依然全默认
输入频率后让CubeMX自动配置即可
USB虚拟串口的收发我们只需要关注Application/User/USB_Device/App目录下的usbd_cdc_if.c/h文件即可
可以看到.h文件中给出的函数只有一个
uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len);
参数分别是发送内容指针和长度
在main.c中声明发送字符串和长度,在循环中发送:
- /* USER CODE BEGIN 2 */
- char USB_TxBuf[32];
- uint16_t len;
- /* USER CODE END 2 */
-
- /* Infinite loop */
- /* USER CODE BEGIN WHILE */
- while (1)
- {
- len=sprintf(USB_TxBuf,"Hello HFUT_ETA!\r\n");
- CDC_Transmit_FS(USB_TxBuf,len);
- HAL_Delay(1000);
- /* USER CODE END WHILE */
-
- /* USER CODE BEGIN 3 */
- }
这时使用串口助手就可以在电脑上观察到发送结果了:
接收函数在usbd_cdc_if.h中并没有给出,而是在usbd_cdc_if.c中以static关键字给出的
- static int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *Len)
- {
- /* USER CODE BEGIN 6 */
- USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &Buf[0]);
- USBD_CDC_ReceivePacket(&hUsbDeviceFS);
- return (USBD_OK);
- /* USER CODE END 6 */
- }
这个函数其实是在USB接收时自动进入中断并调用的,可以直接在其中将接收缓冲区的内容做处理或转存。
那么接收回传就可以直接在其中将缓冲区内容直接转发:
- static int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *Len)
- {
- /* USER CODE BEGIN 6 */
- CDC_Transmit_FS(Buf,*Len);
-
- USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &Buf[0]);
- USBD_CDC_ReceivePacket(&hUsbDeviceFS);
- return (USBD_OK);
- /* USER CODE END 6 */
- }
可以直接在串口助手中观察到回传结果
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。