原创 stm32 HAL usb cdc 发送和接收

2017-4-26 07:55 11610 14 14 分类: 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抓紧创作!

赞赏支持
点赞 14
赞赏0

文章评论0条评论)

登录后参与讨论
相关推荐阅读
southcreek 2023-04-11 08:38
光隔离 SPI的设计和调试
制作一个SPI光隔离电路,用于读取24位ΣΔADC,隔离的目的是防止数字部分的噪声影响ADC采集。SPI设计速度希望达到2M以上。图中MASTER端产生 CS SCLK MOSI信号驱动SLAVE(...
southcreek 2023-04-10 11:49
QT 串口数据折线图显示
串口将接收到的数据,进行解析后,使用QT绘图,动态刷新显示。先将项目文件中增加charts支持 QT += charts 在主窗口定义中增加 QT_CHARTS_USE_NAMESP...
southcreek 2023-04-04 15:16
EMC 辐射抗扰故障的整改和分析
机器进行辐射抗扰实验。实验条件是: 80M~2.5G 1Khz正弦信号AM调制 80%调制深度,频率步长小于1%,驻停1S。对数方式递进。 实验天线以垂直或水平极化,到达被测机器位置的强度...
southcreek 2023-03-29 12:01
使用QT做串口通信上位机
以前使用VB做串口上位机,现在试用QT来做,顺便学习一下,入个门。看看有多大区别。 QT上编程用的是C++,所以Class(类)的概念(公有、私有、继承、多态、构造、析构、重载这些名词)一定要搞...
southcreek 2023-03-23 16:39
用AD读取编码开关设置的考虑
这个想法来源于一个组合使用的机器,机器可以插到组合箱,得到供电,同时要读取组合箱上的EEPROM内的数据,确认处于组合箱的位置。实际工作时组合箱上的EEPROM需要供电。拔插接口需要有保护电路。否则烧...
我要评论
0
14
1
2
3
4
5
6
7
8
9
0
关闭 热点推荐上一条 /4 下一条