广告

原创 stm32 HAL usb cdc 发送和接收

2017-4-26 07:55 1938 2 2 分类: 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 /

}

定义一个全局变量

uint8_t
pRx; //这个准备指向接收到的数据缓冲区

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;

pRx = Buf;

return (USBD_OK);

/* USER CODE END 6 /

}

在接收程序中,判断RxLen 如果不为0,说明接收到数据。从
pRx取到数据。

不知道有没有其它方法?


广告

文章评论 0条评论)

登录后参与讨论
相关推荐阅读
southcreek 2018-07-06 16:54
输液泵注射泵喇叭图的理解和生成
以下是9706.27上的定义:流速 r 由操作者选择的输液速度流量 flow 单位时间内测得的输出容量丸剂 bolus 作为一次注人但不属于灌注程序的一部分,在短时间内传输的液体的离散量。取样间隔 5...
southcreek 2017-06-15 11:29
STM32 输出多路不同频率的脉冲
一个定时器产生多个频率输出 使用一个tim产生20KHz的定时中断。将需要输出的速度设定好,每次将设定的速度与上一次的结果取模累加,结果大于等于10000则取反输出。 每个通道使用一个结构体,里面包含...
southcreek 2016-03-07 08:17
使用STM32中的FLASH存储数据
    1、在ST 的网站上下载 AN2594 及例程。   2、在例程中src目录中找到eeprom.c 及inc目录中找到eeprom.h拷贝到自己的工程目录中。3.、在工程中...
southcreek 2015-08-21 12:40
ucgui 字体放大显示
字体文件非常占空间,尤其是要用特别大的字体时,占用空间以平方倍增加。有没有可能用小的字体文件,完成放大显示呢? 答案是可以。   以 F24_ASCII.c为例子。这是一个24*24点...
southcreek 2014-10-09 11:31
stm8 连不上
No answer from the SWIM: check chip错误_ while setting configuration with MCU name STM8S003: gdi-e...
我要评论
0
2
广告
关闭 热点推荐上一条 /2 下一条