OpenEdv-开源电子网

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

PC13、PC14、PC15怎么设置成普通IO口呀?

[复制链接]

51

主题

214

帖子

0

精华

高级会员

Rank: 4

积分
561
金钱
561
注册时间
2011-4-11
在线时间
43 小时
发表于 2013-5-22 13:15:12 | 显示全部楼层 |阅读模式
问题如题。
我想应该蛮多人碰到这个问题吧。在使用STM32F103C8T6的时候,没有使用的备份域,RTC等功能,所以将PC13、PC14、PC15也设置成控制IO口了。现在在写测试程序,设置这些IO口为普通的输出口,但是不知道要关闭那些功能,开启那些功能,希望大侠们可以指点一下???最后是写一下参考代码。。谢谢啦!!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2013-5-22 15:29:24 | 显示全部楼层

PC13,我们的mini板就有用到,作为触摸屏的片选脚.
PC14,15,我也没用过,估计你只要不开启RTC,直接设置为通用IO就可以使用的,你测试下.
图片是<STM32参考手册>对这几个脚的说明.




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

使用道具 举报

51

主题

214

帖子

0

精华

高级会员

Rank: 4

积分
561
金钱
561
注册时间
2011-4-11
在线时间
43 小时
 楼主| 发表于 2013-5-23 07:58:47 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
RCC->APB2ENR|=1<<4;      //使能PORTC时钟 
RCC->APB2ENR|=1<<2;      //使能PORTA时钟
RCC->APB2ENR|=1<<0;      //使能AFIO时钟

GPIOA->CRL&=0XFFF00000; //PA0,1,2,3,4设置成输出  
GPIOA->CRL|=0X00033333;

GPIOC->CRH&=0X000FFFFF; //PC13,14,15设置成输出 2MHz 推挽输出  
GPIOC->CRH|=0X22200000;

PWR->CR|=1<<8; //取消备份区写保护
RCC->BDCR&=0xFFFFFFFE; //外部低俗振荡器关闭 C14,PC15成为普通IO  
BKP->CR&=0xFFFFFFFE;  //侵入检测TAMPER引脚作为通用IO口使用
PWR->CR&=0xFFFFFEFF; //备份区写保护


经测试是可以的。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

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

使用道具 举报

105

主题

522

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1386
金钱
1386
注册时间
2012-10-23
在线时间
97 小时
发表于 2013-6-26 22:21:21 | 显示全部楼层
回复【3楼】Julius007:
---------------------------------
库函数版本的是这样吗:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO, ENABLE);//开C口时钟,复用时钟。

GPIO_InitTypeDef GPIO_InitStructure;

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 |GPIO_Pin_14 | GPIO_Pin_15;

 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;  //设为输出 注意:2MHZ

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_Init(GPIOC, &GPIO_InitStructure);

 

PWR_BackupAccessCmd(ENABLE);//允许修改RTC 和后备寄存器

RCC_LSEConfig(RCC_LSE_OFF);//关闭外部低速外部时钟信号功能 后,PC13 PC14 PC15 才可以当普通IO用。

BKP_TamperPinCmd(DISABLE);//关闭入侵检测功能,也就是 PC13,也可以当普通IO 使用
PWR_BackupAccessCmd(DISABLE);//禁止修改后备寄存器

//BKP_ITConfig(DISABLE);  

作为输入也能正常配置成上拉下拉吗?

回复 支持 反对

使用道具 举报

51

主题

214

帖子

0

精华

高级会员

Rank: 4

积分
561
金钱
561
注册时间
2011-4-11
在线时间
43 小时
 楼主| 发表于 2013-7-4 09:52:30 | 显示全部楼层
回复【5楼】miaoguoqiang:
---------------------------------
不好意思,我不是很懂库函数。反正我操作寄存器方法是可以的。
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
24
金钱
24
注册时间
2013-8-23
在线时间
0 小时
发表于 2013-8-23 17:28:29 | 显示全部楼层
回复【3楼】Julius007:
---------------------------------
我用你的代码怎么还是不行呢,13-15只有一个能输出
回复 支持 反对

使用道具 举报

6

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
168
金钱
168
注册时间
2012-11-8
在线时间
19 小时
发表于 2013-9-20 18:12:19 | 显示全部楼层
回复【7楼】rtgchym:
---------------------------------
是的,这三个引脚作为输出时有以下限制:在同一时间只有一个引脚作为输出,作为输出的引脚只能工作在2MHz模式下,最大驱动负载为30pf,并且不能作为电流源(如:驱动LED)。
回复 支持 反对

使用道具 举报

51

主题

214

帖子

0

精华

高级会员

Rank: 4

积分
561
金钱
561
注册时间
2011-4-11
在线时间
43 小时
 楼主| 发表于 2013-10-6 19:22:03 | 显示全部楼层
回复【8楼】qq910876301:
---------------------------------
现在可以同时作为输出吧!我做的是可以。
回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2012-11-29
在线时间
3 小时
发表于 2013-11-5 17:45:25 | 显示全部楼层
如果没有使用RTC, 没有开 入侵 功能时, 应该可以直接使用的吧.
回复 支持 反对

使用道具 举报

0

主题

7

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2013-9-6
在线时间
2 小时
发表于 2014-3-10 14:58:02 | 显示全部楼层
MARK!
回复 支持 反对

使用道具 举报

14

主题

168

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
497
金钱
497
注册时间
2013-4-1
在线时间
25 小时
发表于 2014-5-19 21:00:08 | 显示全部楼层
回复【9楼】Julius007:
---------------------------------
我配置了一会,还是不行,能贴上你的配置代码吗?
回复 支持 反对

使用道具 举报

3

主题

7

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2014-9-22
在线时间
2 小时
发表于 2014-9-22 21:02:19 | 显示全部楼层
楼主,用了你的代码还是没能设置成功,能帮忙看看嘛。
[mw_shl_code=c,true]#include <stm32f10x_map.h> #include <stm32f10x_nvic.h> #include "led.h" ////////////////////////////////////////////////////////////////////////////////// //??????PA8??PD2????????.?????????????????±?? //LED IO?????? void LED_Init(void) { RCC->APB2ENR|=1<<4; //??PORTC?? RCC->APB2ENR|=1<<2; //??PORTA?? RCC->APB2ENR|=1<<0; //??AFIO?? GPIOA->CRL&=0XFFF00000; //PA0,1,2,3,4????? GPIOA->CRL|=0X00033333; GPIOC->CRH&=0X000FFFFF; //PC13,14,15????? 2MHz ???? GPIOC->CRH|=0X22200000; PWR->CR|=1<<8; //???????? RCC->BDCR&=0xFFFFFFFE; //????????? PC14,PC15????IO BKP->CR&=0xFFFFFFFE; //????TAMPER??????IO??? PWR->CR&=0xFFFFFEFF; //?????? }[/mw_shl_code]
上面这个是led.c
[mw_shl_code=c,true]#ifndef __LED_H #define __LED_H #include "sys.h" //Mini STM32??·?°? //LED?????ú?? //?????­×?@ALIENTEK //2010/5/27 //LED?????¨?? #define LED0 PCout(13)// PC13 #define LED1 PCout(14)// PC14 #define LED2 PCout(15)// PC15 void LED_Init(void);//?????? #endif [/mw_shl_code]

上面的是led.h
[mw_shl_code=c,true] #include "sys.h" #include "delay.h" #include "usart.h" #include "led.h" int main(void) { Stm32_Clock_Init(9);//??????stm32???±????8M*9=72M delay_init(72);//delay???????? uart_init(72,9600);//?è???®??1?¨???? while(1) { LED0=0; LED1=1; LED2=1; delay_ms(400); LED0=1; LED1=0; LED2=1; delay_ms(400); LED0=1; LED1=1; LED2=0; delay_ms(400); } } [/mw_shl_code]

上面这个是main函数。
整个程序是为了点亮连在PC13~15的led。
回复 支持 反对

使用道具 举报

3

主题

7

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2014-9-22
在线时间
2 小时
发表于 2014-9-23 18:00:43 | 显示全部楼层
回复【13楼】zzwhda:
---------------------------------
@ Julius007
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2016-4-23
在线时间
0 小时
发表于 2016-4-23 20:50:52 | 显示全部楼层
PC14、PC15只能有一个输出低,同时???
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2016-4-23
在线时间
0 小时
发表于 2016-4-23 20:51:45 | 显示全部楼层
我的同时输出高是没有问题,但是同时低的话就不可以了,一个为0,一个为1.8V左右
回复 支持 反对

使用道具 举报

3

主题

92

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
275
金钱
275
注册时间
2012-6-19
在线时间
37 小时
发表于 2016-5-16 17:03:13 | 显示全部楼层
Julius007 发表于 2013-5-23 07:58
回复【2楼】正点原子:
---------------------------------
        RCC-&gt;APB2ENR|=1&lt;&lt;4;&nbsp;&nbsp;&nbsp;& ...

按照你的方法,设置成功,感谢!
回复 支持 反对

使用道具 举报

3

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2019-5-8
在线时间
27 小时
发表于 2019-5-25 10:21:21 | 显示全部楼层
miaoguoqiang 发表于 2013-6-26 22:21
回复【3楼】Julius007:
---------------------------------
库函数版本的是这样吗:

你好 PC13  做普通IO 最后怎么解决的?
回复 支持 反对

使用道具 举报

3

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2019-6-29
在线时间
10 小时
发表于 2019-7-7 17:22:18 | 显示全部楼层
hope0116 发表于 2019-5-25 10:21
你好 PC13  做普通IO 最后怎么解决的?

你解决了吗?用hal库函数
回复 支持 反对

使用道具 举报

3

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2019-5-8
在线时间
27 小时
发表于 2019-8-2 14:19:23 | 显示全部楼层
lxh111 发表于 2019-7-7 17:22
你解决了吗?用hal库函数

我是ucosii  解决了
//PC13 init 作为输出只能工作在2Mhz下
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE );
        PWR_BackupAccessCmd(ENABLE);//允许修改RTC 和后备寄存器
        RCC_LSEConfig(RCC_LSE_OFF);//关闭外部低速外部时钟信号功能 后,PC13 PC14 PC15 才可以当普通IO用。
        BKP_TamperPinCmd(DISABLE);//关闭入侵检测功能,也就是 PC13,也可以当普通IO 使用
        GPIO_InitStructure.GPIO_Pin = DC3V_EN_PIN ;                               
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
        GPIO_Init(DC3V_EN_PORT, &GPIO_InitStructure);
        PWR_BackupAccessCmd(DISABLE);//禁止修改后备寄存器       
        //PC13 init
回复 支持 反对

使用道具 举报

2

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2023-7-18
在线时间
15 小时
发表于 2023-9-7 14:47:47 | 显示全部楼层
  RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO,ENABLE);
  RCC_LSEConfig( RCC_LSE_OFF ); /* 关闭外部低速时钟,PC14+PC15可以用作普通IO*/
  BKP_TamperPinCmd(DISABLE);  /* 关闭入侵检测功能,PC13可以用作普通IO*/
  PWR_BackupAccessCmd( ENABLE );/* 允许修改RTC和后备寄存器*/
  GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 |GPIO_Pin_14 | GPIO_Pin_15;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;         
    GPIO_Init(GPIOC, &GPIO_InitStructure);

我用的库函数,进行对PC13、PC14、PC15初始化为普通IO口,采用stm32f103c8t6最小系统板子,为什么我的pc13和pc14输出不受控制,PC13电压在1.8V左右,烦请大佬指导!
回复 支持 反对

使用道具 举报

2

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2023-7-18
在线时间
15 小时
发表于 2023-9-7 14:48:47 | 显示全部楼层
yangzilong 发表于 2023-9-7 14:47
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO,ENABLE);
  RCC_LSEConfig( RCC_LS ...

GPIO_InitTypeDef GPIO_InitStructure;  结构体忘记加了,我的是在外部声明的
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-24 14:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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