EP1 2 3 分别用了三个interface0 1 2 枚举成功了,电脑识别到设备
EP1 EP2通讯OK EP3不行? 现像就是EP3送到电脑的数据非我发送的数据,(电脑能收到数据)
感觉就像数据溢出一样, 缓冲区 可以到1K 没超啊
uint16_t pmaadress; /*!< PMA Address
This parameter can be any value between Min_addr = 0 and Max_addr = 1K */
uint16_t pmaaddr0; /*!< PMA Address0
This parameter can be any value between Min_addr = 0 and Max_addr = 1K */
uint16_t pmaaddr1; /*!< PMA Address1
This parameter can be any value between Min_addr = 0 and Max_addr = 1K */
USBD_StatusTypeDef USBD_LL_Init(USBD_HandleTypeDef *pdev)
{
/* Init USB Ip. */
/* Link the driver to the stack. */
hpcd_USB_FS.pData = pdev;
pdev->pData = &hpcd_USB_FS;
hpcd_USB_FS.Instance = USB;
hpcd_USB_FS.Init.dev_endpoints = 8;
hpcd_USB_FS.Init.speed = PCD_SPEED_FULL;
hpcd_USB_FS.Init.ep0_mps = DEP0CTL_MPS_8;
hpcd_USB_FS.Init.low_power_enable = DISABLE;
hpcd_USB_FS.Init.lpm_enable = DISABLE;
hpcd_USB_FS.Init.battery_charging_enable = DISABLE;
if (HAL_PCD_Init(&hpcd_USB_FS) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}
HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData , 0x00 , PCD_SNG_BUF, 0x18); //???这里不太明白为什么要从0x18 开始 手册上看了无结果
HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData , 0x80 , PCD_SNG_BUF, 0x58);
HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData , 0x01, PCD_SNG_BUF, 0x98);
HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData , 0x81, PCD_SNG_BUF, 0xD8);
HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData , 0x02, PCD_SNG_BUF, 0x118);
HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData , 0x82, PCD_SNG_BUF, 0x158);
HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData , 0x03, PCD_SNG_BUF, 0x198); //EP3
HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData , 0x83, PCD_SNG_BUF, 0x1D8);
return USBD_OK;
}
uint8_t USBD_EP3_HID_SendReport (USBD_HandleTypeDef *pdev,
uint8_t *report,
uint16_t len)
{
USBD_CUSTOM_HID_HandleTypeDef *hhid = (USBD_CUSTOM_HID_HandleTypeDef*)pdev->pClassData;
if (pdev->dev_state == USBD_STATE_CONFIGURED )
{
static u32 iOut;
iOut = 0xffff;
while(hhid->state3 != CUSTOM_HID_IDLE && iOut); //等待发送完成
{
iOut--;
}
if(hhid->state3 == CUSTOM_HID_IDLE)
{
hhid->state3 = CUSTOM_HID_BUSY;
USBD_LL_Transmit (pdev,
0X83,
report,
len);
}
}
return USBD_OK;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
用的是野火103ve512k flash.网上找啦好多例程,没有一个能枚举成功,不知道怎么回事!
1.USB D+ 要上拉电阻, 如果没有电脑根本不识别 , 这里成功了 电脑会显示找到设备.
2.时钟是48MHZ 你如果将主时钟配置错了,也是不识别的, 这时电脑会显示无法识别的设备
3.当然你的描述符 不对 电脑也会显示无法识别的设备 , 这时你就需要USB调试工具了,一包一包 看握手信息 工具: Device Monitoring Studio/ USBlyzer/ Bus Hound
补充一下:
对于低速设备,DM接了上拉1.5K欧电阻。
对于全速设备,DP接了上拉1.5K欧电阻。
对于高速设备,一接在主机的时候DP接了上拉1.5K欧电阻,后面经过握手协议之后,DP上断开1.5K欧电阻。
我看的是103的 参考手册
103是只有512B RAM
但是USB库是通用的,其他系列也能使用同一个库
F0是1024 RAM,F3有些是512,有些是1024
一周热门 更多>