STM32 USB开发

作者

QQ群:852283276
微信:arm80x86
微信公众号:青儿创客基地
B站:主页 https://space.bilibili.com/208826118

参考

STM32 使用Cubemx 建一个USB(HID)设备下位机,实现数据收发
STM32 USB相关知识扫盲
STM32CubeIDE生成、调试USB虚拟串口工程
USB上拉下拉问题

硬件

STM32系列MCU在使用USB功能的时候建议使用外部时钟,外部无源晶体或有源晶振这些,因为USB对时钟精度要求比较高。

Type-C

单片机USB接口使用下面的方式连接Type-C,
113
Type-C连接器定义,
type c 16P
STM32F103 USB需要接上拉电阻,高速设备接1.5K电阻在DP上,低速设备接1.5K在DM上,STM32F4和STM32L1集成了DP/DM的上下拉电阻,所以外部不再需要额外的上下拉电阻。

CubeMX配置

USB配置,使用默认设置,在Project Manager中把堆栈改大点,防止程序跑飞,
455

USB描述符

usbd_desc.c中修改厂商信息,

/** @defgroup USBD_DESC_Private_Defines USBD_DESC_Private_Defines
  * @brief Private defines.
  * @{
  */

#define USBD_VID     1155
#define USBD_LANGID_STRING     1033
#define USBD_MANUFACTURER_STRING     "STMicroelectronics"
#define USBD_PID_FS     22336
#define USBD_PRODUCT_STRING_FS     "STM32 Virtual ComPort"
#define USBD_CONFIGURATION_STRING_FS     "CDC Config"
#define USBD_INTERFACE_STRING_FS     "CDC Interface"

CDC

STSW-STM32102 STM32 Virtual COM Port Driver
STM32 USB使用记录:使用CDC类虚拟串口(VCP)进行通讯

CDC HAL库

USBD_CDC_DataOut函数回调了(USBD_CDC_ItfTypeDef *)pdev->pUserData)->Receive,这个函数正是CDC_Receive_FS

/**
  * @brief  USBD_CDC_DataOut
  *         Data received on non-control Out endpoint
  * @param  pdev: device instance
  * @param  epnum: endpoint number
  * @retval status
  */
static uint8_t  USBD_CDC_DataOut(USBD_HandleTypeDef *pdev, uint8_t epnum)
{
  USBD_CDC_HandleTypeDef   *hcdc = (USBD_CDC_HandleTypeDef *) pdev->pClassData;

  /* Get the received data length */
  hcdc->RxLength = USBD_LL_GetRxDataSize(pdev, epnum);

  /* USB data will be immediately processed, this allow next USB traffic being
  NAKed till the end of the application Xfer */
  if (pdev->pClassData != NULL)
  {
    ((USBD_CDC_ItfTypeDef *)pdev->pUserData)->Receive(hcdc->RxBuffer, &hcdc->RxLength);

    return USBD_OK;
  }
  else
  {
    return USBD_FAIL;
  }
}

CDC共初始化了4个回调函数,其中CDC_Receive_FS是接收到PC发送的数据,

USBD_CDC_ItfTypeDef USBD_Interface_fops_FS =
{
  CDC_Init_FS,
  CDC_DeInit_FS,
  CDC_Control_FS,
  CDC_Receive_FS
};

CDC的发送函数是CDC_Transmit_FS,理论上只需关注这两个函数即可完成开发。

PD

STM32G0技术详解 _ Type-C-UCPD

组合设备

STM32CubeMX | 基于STM32使用HAL库实现USB组合设备CDC+MSC

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值