use*_*160 8 usb stm32 stm32f4discovery
我已经找到了大量的例子,但没有提到如何从STM32MXCube"正确"地做到这一点.
如何从STM32CubeMX创建用于USB CDC虚拟COM端口通信的骨架代码(如果可能的话,STM32F4发现)?
小智 13
用于发现F4的STM32CubeMX项目以及CDC作为USB设备应该可以立即使用.假设您使用最新的STM32CubeMX和库:
在时钟选项卡中,检查时钟源是HSE HCLK.它应在48 MHz(USB)中提供168 MHz HLCK和48 MHz.检查任何地方都没有红色.
保存项目
生成代码(我使用SW4STM32工具链)
构建(您可能需要切换到内部CDT构建器与GNU make).
现在添加一些代码通过COM端口发送数据,并且它应该工作.
实际上,棘手的部分是在主机USB连接之前不尝试进行任何"CDC"访问(尚未设置CDC)
以下是我为快速排放测试所做的工作:
uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len)
{
uint8_t result = USBD_OK;
/* USER CODE BEGIN 7 */
if (hUsbDevice_0 == NULL)
return -1;
USBD_CDC_SetTxBuffer(hUsbDevice_0, Buf, Len);
result = USBD_CDC_TransmitPacket(hUsbDevice_0);
/* USER CODE END 7 */
return result;
}
static int8_t CDC_DeInit_FS(void)
{
/* USER CODE BEGIN 4 */
hUsbDevice_0 = NULL;
return (USBD_OK);
/* USER CODE END 4 */
}
Run Code Online (Sandbox Code Playgroud)
/* USER CODE BEGIN Includes */
#include "usbd_cdc_if.h"
/* USER CODE END Includes */
....
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
uint8_t HiMsg[] = "hello\r\n";
CDC_Transmit_FS(HiMsg, strlen(HiMsg));
HAL_Delay(200);
}
Run Code Online (Sandbox Code Playgroud)
插入micro USB(CN5)后,CDC数据将立即开始显示在主机终端上.
这样可行.我可以在终端上看到"你好"(你可能需要安装一个驱动程序,http://www.st.com/web/en/catalog/tools/PF257938).
对于接收,它需要首先布防,比如,在一个好地方第一次调用USBD_CDC_ReceivePacket()开始.为此,它可以是CDC_Init_FS.
然后,您可以在CDC_Receive_FS到达时处理数据,并从此处再次重新启动接收.
这对我行得通.
static int8_t CDC_Receive_FS (uint8_t* Buf, uint32_t *Len)
{
/* USER CODE BEGIN 6 */
USBD_CDC_ReceivePacket(hUsbDevice_0);
return (USBD_OK);
/* USER CODE END 6 */
}
static int8_t CDC_Init_FS(void)
{
hUsbDevice_0 = &hUsbDeviceFS;
/* USER CODE BEGIN 3 */
/* Set Application Buffers */
USBD_CDC_SetTxBuffer(hUsbDevice_0, UserTxBufferFS, 0);
USBD_CDC_SetRxBuffer(hUsbDevice_0, UserRxBufferFS);
USBD_CDC_ReceivePacket(hUsbDevice_0);
return (USBD_OK);
/* USER CODE END 3 */
}
Run Code Online (Sandbox Code Playgroud)
小智 6
STM32Cube软件支持多种STM32F4 Discovery板,您还没有说明您使用的是哪种板块,但我对使用F401VCT MCU的Discovery板存在完全相同的问题.
安装STM虚拟COM端口驱动程序后,Windows设备管理器显示STMicroelectronics虚拟COM端口,但带有黄色警告标记.终端应用程序(PuTTY)无法访问COM端口.
我最终发现STMCube程序的源代码输出存在问题.但有一个简单的解决方法:
#define USB_HS_MAX_PACKET_SIZE从512更改为256.#define CDC_DATA_HS_MAX_PACKET_SIZE从512到256.执行此操作后,黄色警告从设备管理器中消失,我可以在使用PuTTY时在CDC_Receive_FS函数(在usbd_cdc_if.c文件中)接收数据.请注意,每次STM32Cube生成代码时,这些定义都会返回到不正确的值,而我还没有找到解决方法.
我希望这有帮助.
| 归档时间: |
|
| 查看次数: |
35137 次 |
| 最近记录: |