打印
[STM32H7]

【STM32H7S78-DK测评】USB CDC测试

[复制链接]
39|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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




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

  /* USER CODE END USB_DEVICE_Init_PreTreatment */

  /* Init Device Library, add supported class and start the library. */
  if (USBD_Init(&hUsbDeviceHS, &CDC_Desc, DEVICE_HS) != USBD_OK)
  {
    Error_Handler();
  }
  if (USBD_RegisterClass(&hUsbDeviceHS, &USBD_CDC) != USBD_OK)
  {
    Error_Handler();
  }
  if (USBD_CDC_RegisterInterface(&hUsbDeviceHS, &USBD_Interface_fops_HS) != USBD_OK)
  {
    Error_Handler();
  }
  if (USBD_Start(&hUsbDeviceHS) != USBD_OK)
  {
    Error_Handler();
  }

  /* USER CODE BEGIN USB_DEVICE_Init_PostTreatment */

  /* USER CODE END USB_DEVICE_Init_PostTreatment */
}

主函数:
int main(void)
{

  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* Enable the CPU Cache */

  /* Enable I-Cache---------------------------------------------------------*/
  SCB_EnableICache();

  /* Enable D-Cache---------------------------------------------------------*/
  SCB_EnableDCache();

  /* MCU Configuration--------------------------------------------------------*/

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

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

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_UART4_Init();
  MX_USB_DEVICE_Init();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
          CDC_Transmit_HS("from usb device - cdc", sizeof("from usb device - cdc"));
          HAL_Delay(5000);
  }
  /* USER CODE END 3 */
}


展示:
在没有插入TYPE-C接口的CN1 (USB1)的时候:


插入TYPE-C接口的CN1 (USB1)的时候:


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

17

帖子

0

粉丝