[STM32H7] 【STM32H7S78-DK测评】USB CDC测试

[复制链接]
1641|2
 楼主| SJZhu 发表于 2024-10-5 17:45 | 显示全部楼层 |阅读模式
CD, dc, USB, ST, STM
CDC-ACM,是USB ORG组织在1999年基于通信类设备推出的一个USB通用设备类别,事实上,绝大多数使用CDC串口的USB应用,并不处理串口操作,仅借助于CDC串口驱动实现USB设备和USB主机之间的数据透传。


CDC串口的主要特点:


(1)无需为产品开发专用的USB驱动程序,但无法达到HID类设备的在所有系统上面的免驱效果。目前已有不少系统已集成CDC-ACM驱动,且驱动也在不断完善,如在WIN8.1前需要驱动安装包还需要做驱动包的数字签名,因为系统只集成了SYS;如WIN10系统集成了微软重新编写的CDC-ACM驱动。


(2)固件开发容易,CDC-ACM类规范内容简单,数据上下传内容为透传方式。(3)可以实现部分串口功能,如串口参数设置和DTR/DSR的控制,但串口软件中较常用的CTS/RTS不支持,且不同操作系统下实现的CDC类驱动,还存在CTS状态不变且不可更改的差异。


下面是图形化配置:USB DEVICE, CDC
8163367010a3c2c7aa.png

cdd-1.jpg

点击保存,自动生成USB外设驱动代码。其中初始化位于函数:void MX_USB_DEVICE_Init(void)
  1. void MX_USB_DEVICE_Init(void)
  2. {
  3.   /* USER CODE BEGIN USB_DEVICE_Init_PreTreatment */

  4.   /* USER CODE END USB_DEVICE_Init_PreTreatment */

  5.   /* Init Device Library, add supported class and start the library. */
  6.   if (USBD_Init(&hUsbDeviceHS, &CDC_Desc, DEVICE_HS) != USBD_OK)
  7.   {
  8.     Error_Handler();
  9.   }
  10.   if (USBD_RegisterClass(&hUsbDeviceHS, &USBD_CDC) != USBD_OK)
  11.   {
  12.     Error_Handler();
  13.   }
  14.   if (USBD_CDC_RegisterInterface(&hUsbDeviceHS, &USBD_Interface_fops_HS) != USBD_OK)
  15.   {
  16.     Error_Handler();
  17.   }
  18.   if (USBD_Start(&hUsbDeviceHS) != USBD_OK)
  19.   {
  20.     Error_Handler();
  21.   }

  22.   /* USER CODE BEGIN USB_DEVICE_Init_PostTreatment */

  23.   /* USER CODE END USB_DEVICE_Init_PostTreatment */
  24. }

主函数:
  1. int main(void)
  2. {

  3.   /* USER CODE BEGIN 1 */

  4.   /* USER CODE END 1 */

  5.   /* Enable the CPU Cache */

  6.   /* Enable I-Cache---------------------------------------------------------*/
  7.   SCB_EnableICache();

  8.   /* Enable D-Cache---------------------------------------------------------*/
  9.   SCB_EnableDCache();

  10.   /* MCU Configuration--------------------------------------------------------*/

  11.   /* Update SystemCoreClock variable according to RCC registers values. */
  12.   SystemCoreClockUpdate();

  13.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  14.   HAL_Init();

  15.   /* USER CODE BEGIN Init */

  16.   /* USER CODE END Init */

  17.   /* USER CODE BEGIN SysInit */

  18.   /* USER CODE END SysInit */

  19.   /* Initialize all configured peripherals */
  20.   MX_GPIO_Init();
  21.   MX_UART4_Init();
  22.   MX_USB_DEVICE_Init();
  23.   /* USER CODE BEGIN 2 */

  24.   /* USER CODE END 2 */

  25.   /* Infinite loop */
  26.   /* USER CODE BEGIN WHILE */
  27.   while (1)
  28.   {
  29.     /* USER CODE END WHILE */

  30.     /* USER CODE BEGIN 3 */
  31.           CDC_Transmit_HS("from usb device - cdc", sizeof("from usb device - cdc"));
  32.           HAL_Delay(5000);
  33.   }
  34.   /* USER CODE END 3 */
  35. }


展示:
在没有插入TYPE-C接口的CN1 (USB1)的时候:
Snipaste_2024-10-05_17-34-16.png

插入TYPE-C接口的CN1 (USB1)的时候:
Snipaste_2024-10-05_17-33-51.png

Amazingxixixi 发表于 2024-10-31 16:16 | 显示全部楼层
这个windows驱动是通用的么?
地瓜patch 发表于 2024-10-31 18:42 来自手机 | 显示全部楼层
usb还是一个盲区,没细看过协议
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

21

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部