原创 stm32 HAL usb cdc 发送和接收

2017-4-26 07:55 12989 20 20 分类: MCU/ 嵌入式

使用stm32cubemx 可以快速生成工程。对于connective 系列带USB接口的单片机,可以将其配置成USB device CDC设备。这样在WINDOWS系统中,连接USB,板子被识别成一个串口。可以进行串口通信。从单片机发送数据比较简单,只要使用 CDC_Transmit_FS函数即可。

如下,将需要输出的数据格式化成temp字符串,然后调用函数发送出去就行了。

sprintf((char)temp,"%4d,",i);
CDC_Transmit_FS(temp,strlen(temp));
从PC机接收数据,一直没有找到接收的函数。
不过找到一个折衷的办法。
那就是改写一下CDC_Receive_FS 函数。这个函数是CDC设备在接收到数据后,自动运行的。 Buf 指向收到的数据,Len则指向收到数据数量。
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 /
}

定义一个全局变量
#define BUFSIZE 64
uint8_t
pRx[BUFSIZE ]; //这个准备指向接收到的数据缓冲区
uint32_t RxLen; //这个是收到的数据数量

改写函数如下:
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);
RxLen =
Len;
memcpy(pRx,buf,RxLen);
return (USBD_OK);
/* USER CODE END 6 /
}

在接收程序中,判断RxLen 如果不为0,说明接收到数据。从
pRx取到数据。
不知道有没有其它方法?


作者: southcreek, 来源:面包板社区

链接: https://mbb.eet-china.com/blog/uid-me-408807.html

版权声明:本文为博主原创,未经本人允许,禁止转载!

给作者打赏,鼓励TA抓紧创作!

赞赏支持
点赞 20
赞赏0

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
20
1
2
3
4
5
6
7
8
9
0
关闭 站长推荐上一条 /3 下一条