久芯网

STM32F103 USB示例代码

avatar huahuahnu 提问时间: 2023-07-24 16:53:50 / 未解决
在文件stm32f1xx_hal_pcd.h中,红色部分没有实现的代码,未定义,版本是v1.8.4官方是不是漏写了?

#define PCD_GET_EP_TX_ADDRESS(USBx, bEpNum) ((uint16_t)*PCD_EP_TX_ADDRESS((USBx), (bEpNum)))
#define PCD_GET_EP_RX_ADDRESS(USBx, bEpNum) ((uint16_t)*PCD_EP_RX_ADDRESS((USBx), (bEpNum)))
另外以下代码标红色的地方为什么要这么写?
#define PCD_SET_EP_TX_ADDRESS(USBx, bEpNum, wAddr) \
  do { \
    __IO uint16_t *_wRegVal; \
    uint32_t _wRegBase = (uint32_t)USBx; \
    \
    _wRegBase += (uint32_t)(USBx)->BTABLE; \
    _wRegVal = (__IO uint16_t *)(_wRegBase + 0x400U + (((uint32_t)(bEpNum) * 8U) * PMA_ACCESS)); \
    *_wRegVal = ((wAddr) >> 1) << 1; \
  } while(0) /* PCD_SET_EP_TX_ADDRESS */





如需获得 STM32F103 等器件的更多信息,请点击链接或 点击此处 联系在线客服!

1个回答
  • avatar 奇迹
    回答时间: 2023-07-24 17:21:29

    第一个问题不知道,可以看看官方的例程里面定义到了哪里 第二个这个代码相当于wAddr最后一位变成0,因为这段代码是由宏去实现的,wAddr是没有类型的,它可以是uint8也可以是uint32,这种写法可以忽略掉wAddr的类型,避免出现使用位运算,但两边数据长度不等的问题。

会员中心 微信客服
客服
回到顶部