OpenEdv-开源电子网

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

STM32F407 PC13-PC15作为GPIO的方法

[复制链接]

1

主题

3

帖子

0

精华

新手入门

积分
27
金钱
27
注册时间
2014-11-8
在线时间
0 小时
发表于 2014-11-8 17:02:39 | 显示全部楼层 |阅读模式
5金钱
第一次用STM32F407,因为没有用到RTC,无意中将PC-13-PC15作为了普通IO口使用了。接下来悲催的事情发生了,PC13-PC15是很特殊的pin,STM32F103,很多人讨论过怎么设置成GPIO,并且成功了。看STM32F407的资料,说只能有一个作为输出,即便如此我也认了,现在是也搞不定,都设置成输入,是高阻,通过上拉电阻可以得到高电平,设置成输出,则都是低电平,把某一路设置成输出,三路的输出就有点乱套。整个PCB的工程非常大,STM32F407在里面只是辅助功能,所以重新修改设计只能是下次了。因为RTC是需要在低功耗情况下运行的,所以IC设计的时候这些端口的驱动电路都会和普通的IO不一样,前车之鉴呀。哪位大神碰到过类似的问题,还望赐教!现在我的代码是这样的,控制不了输出电平情况。
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC  , ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_BKPSRAM, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR , ENABLE);
PWR_BackupAccessCmd(ENABLE);
RCC_LSEConfig(RCC_LSE_OFF);
GPIO_InitStructure.GPIO_Pin =   GPIO_Pin_13;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOC, &GPIO_InitStructure);

最佳答案

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

 我们的探索者F4开发板,就用了PC13来控制触摸屏的片选信号,代码如下: [mw_shl_code=c,true] RCC->AHB1ENR|=1<<1; //使能PORTB时钟 RCC->AHB1ENR|=1<<2; //使能PORTC时钟 RCC->AHB1ENR|=1<<5; //使能PORTF时钟 GPIO_Set(GPIOB,PIN1|PIN2,GPIO_MODE_IN,0,0,GPIO_PUPD_PU); //PB1/PB2 设置为上拉输入 GPIO_Set(GPIOB,PIN0,GPIO_MODE_OUT,GPIO_OTYPE_PP,GPIO_SP ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2014-11-8 17:02:40 | 显示全部楼层
 我们的探索者F4开发板,就用了PC13来控制触摸屏的片选信号,代码如下:
[mw_shl_code=c,true] RCC->AHB1ENR|=1<<1; //使能PORTB时钟 RCC->AHB1ENR|=1<<2; //使能PORTC时钟 RCC->AHB1ENR|=1<<5; //使能PORTF时钟 GPIO_Set(GPIOB,PIN1|PIN2,GPIO_MODE_IN,0,0,GPIO_PUPD_PU); //PB1/PB2 设置为上拉输入 GPIO_Set(GPIOB,PIN0,GPIO_MODE_OUT,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU); //PB0设置为推挽输出 GPIO_Set(GPIOC,PIN13,GPIO_MODE_OUT,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU); //PC13设置为推挽输出 GPIO_Set(GPIOF,PIN11,GPIO_MODE_OUT,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU); //PF11设置推挽输出 [/mw_shl_code]
没任何特殊的地方。
倒是PC14,15,还没用过。

我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
27
金钱
27
注册时间
2014-11-8
在线时间
0 小时
 楼主| 发表于 2014-11-8 17:02:40 | 显示全部楼层
问题解决了,PC13-PC15都可以作为GPIO使用,而且都可以作为输出,手册中说只能有一个作为输出是因为在三个PIN总的输出电流不能超过4mA,如果输出电流很小,则都可以作为输出。VBAT可以不和VDD连接在一起,VDD上电后,内部电路会自动切换到VDD上。代码如下:
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC  , ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR  , ENABLE);
PWR_BackupAccessCmd(ENABLE);
RCC_LSEConfig(RCC_LSE_OFF);
GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIOC->BSRRH = GPIO_Pin_13;
GPIOC->BSRRH = GPIO_Pin_14;
GPIOC->BSRRH = GPIO_Pin_15;

这次碰到的主要问题是STM32库的问题,BSRRH 和BSRRL是反的,修改了库中的定义的顺序,一切解决。不知道是我用的库被人修改过还是,ST公司本来就错了,不知道还有谁碰到过这样的问题?太相信库了,就是这样的结果。

回复

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
27
金钱
27
注册时间
2014-11-8
在线时间
0 小时
 楼主| 发表于 2014-11-8 19:43:02 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
谢谢站长的回复!周一我再试试,另外我的VBAT IN没有和VDD接在一起,是悬空的,不知道是否会影响对这部分的操作?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2014-11-8 19:51:11 | 显示全部楼层
回复【3楼】bg4tfw:
---------------------------------
最好连接在一起
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2014-11-12 23:10:22 | 显示全部楼层
回复【5楼】bg4tfw:
---------------------------------
谢谢分享
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

16

主题

173

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2441
金钱
2441
注册时间
2014-11-5
在线时间
348 小时
发表于 2016-1-6 22:04:28 | 显示全部楼层
bg4tfw 发表于 2014-11-8 17:02
问题解决了,PC13-PC15都可以作为GPIO使用,而且都可以作为输出,手册中说只能有一个作为输出是因为在三个P ...

可以作为输入吗?作为输入怎么感觉不好使呢??
回复

使用道具 举报

1

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
118
金钱
118
注册时间
2013-9-9
在线时间
25 小时
发表于 2016-5-20 15:16:41 | 显示全部楼层
我只用到PC13,发现PC13作输入时,测得此引脚电压总为1.65V左右,MCU有时判断为高电平,有时判断为低电平.
回复

使用道具 举报

0

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
96
金钱
96
注册时间
2017-4-24
在线时间
18 小时
发表于 2017-4-27 10:51:15 | 显示全部楼层
谢谢楼主分享  我也遇到这个问题了 太好了 就这样解决了 赞
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2017-9-13
在线时间
2 小时
发表于 2021-10-6 09:21:13 | 显示全部楼层
way3 发表于 2016-5-20 15:16
我只用到PC13,发现PC13作输入时,测得此引脚电压总为1.65V左右,MCU有时判断为高电平,有时判断为低电平.

大哥,这是什么问题呢
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-26 20:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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