使用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
版权声明:本文为博主原创,未经本人允许,禁止转载!
文章评论(0条评论)
登录后参与讨论