OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4166|回复: 4

请问STM32F1_USB_CDC_HAL库中,usbd_conf.c文件的USBD_LL_Init(USBD_HandleTypeDef *pdev)底层USB初始化为什么不能修改其地址?

[复制链接]

6

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
185
金钱
185
注册时间
2015-4-24
在线时间
27 小时
发表于 2016-11-14 15:52:40 | 显示全部楼层 |阅读模式
8金钱
请问STM32F1_USB_CDC_HAL库中,usbd_conf.c文件的USBD_LL_Init(USBD_HandleTypeDef *pdev)底层USB初始化为什么不能修改其地址,一修改就无法通讯?
#define CDC_IN_EP0                                  0x80  /* EP0 for data IN */
#define CDC_OUT_EP0                                 0x00  /* EP0 for data OUT*/                   
#define CDC_IN_EP                                   0x81  /* EP1 for data IN */
#define CDC_OUT_EP                                  0x01  /* EP1 for data OUT 0x01 */
#define CDC_CMD_EP                                  0x82  /* EP2 for CDC commands */

  HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData , CDC_OUT_EP0 , PCD_SNG_BUF, 0x18);
  HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData , CDC_IN_EP0 , PCD_SNG_BUF, 0x58);
  HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData , CDC_IN_EP , PCD_SNG_BUF, 0xC0);  
  HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData , CDC_OUT_EP , PCD_SNG_BUF, 0x110);
  HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData , CDC_CMD_EP , PCD_SNG_BUF, 0x100);
其中把0x110改成0x111就无法通讯,这是为什么呢?CDC_OUT_EP也只能定义为0x01,改为0x03也是无法发送数据的?

最佳答案

查看完整内容[请看2#楼]

HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData , CDC_OUT_EP0 , PCD_SNG_BUF, 0x18); HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData , CDC_IN_EP0 , PCD_SNG_BUF, 0x58); 例如需要用到端点3,则需要把0x18改为0x20,0x58改为0x60,就可以正常通讯了! //0x18 24个字符 0x58 88个字符 占用端点0,1,2 //0x20 32个字符 0x60 96个字符 占用端点0,1,2,3 //0x28 40个字符 0x68 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
185
金钱
185
注册时间
2015-4-24
在线时间
27 小时
 楼主| 发表于 2016-11-14 15:52:41 | 显示全部楼层
HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData , CDC_OUT_EP0 , PCD_SNG_BUF, 0x18);
HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData , CDC_IN_EP0 , PCD_SNG_BUF, 0x58);
例如需要用到端点3,则需要把0x18改为0x20,0x58改为0x60,就可以正常通讯了!
//0x18  24个字符        0x58  88个字符    占用端点0,1,2
//0x20  32个字符        0x60  96个字符    占用端点0,1,2,3
//0x28  40个字符        0x68  104个字符   占用端点0,1,2,3,4
//0x30  48个字符        0x70  112个字符   占用端点0,1,2,3,4,5
//0x38  56个字符        0x78  120个字符   占用端点0,1,2,3,4,5,6
回复

使用道具 举报

6

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
185
金钱
185
注册时间
2015-4-24
在线时间
27 小时
 楼主| 发表于 2016-11-14 16:10:02 | 显示全部楼层
应该是这样的
#define BTABLE_ADDRESS      (0x00)  //说明端点描述符表从0x00开始
每个端点描述符会占用4个uint32_t型,即16个字节
如果使用到端点4,需要将
#define ENDP0_RXADDR        (0x18)
#define ENDP0_TXADDR        (0x58)
改为
#define ENDP0_RXADDR        (0x50)  端点0-4  占用16*5=80个字节
#define ENDP0_TXADDR        (0x90)  端点0缓冲区占用字节Device_Property.MaxPacketSize=0x40;
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2016-11-14 19:17:38 | 显示全部楼层
帮顶
回复

使用道具 举报

0

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2018-3-8
在线时间
11 小时
发表于 2018-3-8 18:46:11 | 显示全部楼层
顶一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-11 02:12

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表