硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4181|回复: 14
收起左侧

[有问必答] 请教stm32f407的usb DP/DM引脚如何动态修改引脚功能?

[复制链接]

1

主题

22

回帖

25

积分

新手上路

积分
25
发表于 2018-11-2 07:32:37 | 显示全部楼层 |阅读模式
按如下配置,DP/DM可以做GPIO:
static void MX_GPIO_Init(void)
{

  GPIO_InitTypeDef GPIO_InitStruct;

  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOA_CLK_ENABLE();

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_RESET);

  /*Configure GPIO pin : PA11 */
  GPIO_InitStruct.Pin = GPIO_PIN_11;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  /*Configure GPIO pin : PA12 */
  GPIO_InitStruct.Pin = GPIO_PIN_12;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

}


按如下配置,可以做dp/dm:
static void MX_GPIO_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStruct;
  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOA_CLK_ENABLE();
  /*Configure GPIO pins : PA10 PA11 PA12 */
  GPIO_InitStruct.Pin = GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12;
  GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  GPIO_InitStruct.Alternate = GPIO_AF10_OTG_FS;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}


但是当配置成dp/dm后,在次调用初始化成gpio口使用,配置不生效,gpio输不出低电平,
无论ODR配置成0或者1, PA11/PA1时钟量到3.299v,请问是否还有其他地方需要设置?

谢谢
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2018-11-2 11:41:24 | 显示全部楼层
先调用HAL_GPIO_DeInit试试
回复

使用道具 举报

1

主题

22

回帖

25

积分

新手上路

积分
25
 楼主| 发表于 2018-11-2 17:03:35 | 显示全部楼层
感谢回复。实测加HAL_GPIO_DeInit后还是不行,看手册有说到大意如下:
       外设(例如usb)一旦占用gpio,gpio的输出被禁用,如果该外设没有被正确使能,gpio的输出未定义。
现在的问题是,如何正确的不让外设占用gpio?

谢谢。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2018-11-2 17:20:24 | 显示全部楼层
蒋武锋_uh464 发表于 2018-11-2 17:03
感谢回复。实测加HAL_GPIO_DeInit后还是不行,看手册有说到大意如下:
       外设(例如usb)一旦占用gpi ...

之前这个帖子里面讨论过这个问题,F1就是直接配置就行,F4正常应该也是这样的、
http://www.armbbs.cn/forum.php?mod=viewthread&tid=88876

然后你这里再禁止下USB的时钟试试
/* Disable USB FS Clocks */
    __HAL_RCC_USB2_OTG_FS_CLK_DISABLE();

   /* Disable USB HS Clocks */
    __HAL_RCC_USB1_OTG_HS_CLK_DISABLE();
    __HAL_RCC_USB1_OTG_HS_ULPI_CLK_DISABLE();


回复

使用道具 举报

1

主题

22

回帖

25

积分

新手上路

积分
25
 楼主| 发表于 2018-11-12 19:53:18 | 显示全部楼层
关usb时钟依然不好使:
    __HAL_RCC_USB2_OTG_FS_CLK_DISABLE();
    __HAL_RCC_USB1_OTG_HS_CLK_DISABLE();
    __HAL_RCC_USB1_OTG_HS_ULPI_CLK_DISABLE();
似乎usb协议一运行(只配IO不运行usb hid协议问题不复现),IO就无法动态改成普通GPIO作输出了,
此时输入依然是好用的,搞了很久搞不定现在决定修改硬件不动态配置了,感谢!
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2018-11-13 03:37:49 | 显示全部楼层
蒋武锋_uh464 发表于 2018-11-12 19:53
关usb时钟依然不好使:
    __HAL_RCC_USB2_OTG_FS_CLK_DISABLE();
    __HAL_RCC_USB1_OTG_HS_CLK_DISAB ...

回复

使用道具 举报

9

主题

78

回帖

105

积分

初级会员

积分
105
发表于 2018-11-13 09:51:37 | 显示全部楼层
关闭usb电源即可
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2018-11-14 02:26:19 | 显示全部楼层

那个函数,找了一圈没有发现这个函数。

回复

使用道具 举报

9

主题

78

回帖

105

积分

初级会员

积分
105
发表于 2018-11-14 13:54:14 | 显示全部楼层
eric2013 发表于 2018-11-14 02:26
那个函数,找了一圈没有发现这个函数。

这个也是之前在其他的地方看到的,然后手册上也有这个,关闭usb模块的电源,测试没问题
_SetCNTR(_GetCNTR()|(1<<1));  // 断电模式
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2018-11-14 14:55:27 | 显示全部楼层
悠悠三千载 发表于 2018-11-14 13:54
这个也是之前在其他的地方看到的,然后手册上也有这个,关闭usb模块的电源,测试没问题
_SetCNTR(_GetCN ...

H7的USB HAL库找了下,没有这个功能。
回复

使用道具 举报

9

主题

78

回帖

105

积分

初级会员

积分
105
发表于 2018-11-14 21:19:43 | 显示全部楼层
eric2013 发表于 2018-11-14 14:55
H7的USB HAL库找了下,没有这个功能。

额,H7的没搞过,
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2018-11-15 01:52:38 | 显示全部楼层

你看的是F4的HAL库?
回复

使用道具 举报

9

主题

78

回帖

105

积分

初级会员

积分
105
发表于 2018-11-16 21:18:43 | 显示全部楼层
eric2013 发表于 2018-11-15 01:52
你看的是F4的HAL库?

额,不是的,之前给的操作是用在f1的芯片上的,寄存器操作的
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2018-11-17 01:52:57 | 显示全部楼层
悠悠三千载 发表于 2018-11-16 21:18
额,不是的,之前给的操作是用在f1的芯片上的,寄存器操作的

F1里面没有这个东东,你在那个文件里面看到了,我找下
回复

使用道具 举报

1

主题

22

回帖

25

积分

新手上路

积分
25
 楼主| 发表于 2018-11-17 10:43:39 | 显示全部楼层
感谢网友提供的断电模式,这个问题值得深入dig, 今晚看手册配置试试,谢谢
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-17 17:51 , Processed in 0.377771 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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