打印
[STM32F1]

STM32F103的io口不能上拉输入

[复制链接]
5746|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
HAORANAN123|  楼主 | 2017-12-2 09:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
碰到一个奇怪的问题,我用stm32的io口做按键输入,PB0和PB1设置为上拉输入,PA7是矩阵按键扫描的一个IO设置成下拉输入,io口初始化成功后发现PB0和PB1并不是3.3V,然后把PA7的io口初始化去掉以后,发现PB0和PB1就可以输出3.3V。好奇怪啊,我又换了其他的板子,发现都是这样的,有人知道是什么原因吗?
沙发
一周一天班| | 2017-12-2 09:54 | 只看该作者
电路有问题

使用特权

评论回复
板凳
mmuuss586| | 2017-12-2 09:54 | 只看该作者
最好贴程序;

使用特权

评论回复
地板
caijie001| | 2017-12-2 10:09 | 只看该作者
这么奇怪的吗,什么原因造成的

使用特权

评论回复
5
HAORANAN123|  楼主 | 2017-12-2 11:19 | 只看该作者

void InitKey(void)
{
        GPIO_InitTypeDef  GPIOStru;
        GPIOStru.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;
        GPIOStru.GPIO_Mode = GPIO_Mode_Out_PP;  //??PA0?PA3??????
        GPIOStru.GPIO_Speed = GPIO_Speed_50MHz;       
        GPIO_Init(GPIOA,&GPIOStru);
       
        GPIOStru.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
        GPIOStru.GPIO_Mode = GPIO_Mode_IPD;  //ÕâÀïÊÇPA7³õʼ»¯³ÉÏÂÀ­ÊäÈë
        GPIOStru.GPIO_Speed = GPIO_Speed_50MHz;       
        GPIO_Init(GPIOA,&GPIOStru);
       
        GPIOStru.GPIO_Pin = GPIO_Pin_8;
        GPIOStru.GPIO_Mode = GPIO_Mode_IPU;  //
        GPIOStru.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA,&GPIOStru);
       
                GPIOStru.GPIO_Pin =  GPIO_Pin_0 | GPIO_Pin_1 ;//UP  DOWN
   GPIOStru.GPIO_Mode = GPIO_Mode_IPU; //ÕâÀïÊÇPB0  PB1³õʼ»¯³ÉÉÏÀ­ÊäÈë
         GPIOStru.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_Init(GPIOB, &GPIOStru);
//        GPIO_SetBits( GPIOB, GPIO_Pin_0);
       
}

void RCC_Configuration(void)
{
  /* Setup the microcontroller system. Initialize the Embedded Flash Interface,   
     initialize the PLL and update the SystemFrequency variable. */
  /* The System frequency should be set to HSE frequency */
  SystemInit();
  
  /* GPIO clock enable */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC| RCC_APB2Periph_GPIOA, ENABLE);  
}
主函数里面就这两个函数,我把其他函数都屏蔽掉了

使用特权

评论回复
6
HAORANAN123|  楼主 | 2017-12-2 11:20 | 只看该作者

电路很简单了就是PB0和PB1直接按键接地,PA7是矩阵键盘的口,没有其他的外围电路,用万用表测得电气连接都正常

使用特权

评论回复
7
HAORANAN123|  楼主 | 2017-12-2 11:21 | 只看该作者
caijie001 发表于 2017-12-2 10:09
这么奇怪的吗,什么原因造成的

不知道啊,我把程序下到其他的电路板上都一样的情况

使用特权

评论回复
8
mmuuss586| | 2017-12-2 16:43 | 只看该作者

看了下程序没问题啊;
程序没问题;
那电路怎么连的呢?
截下图看看;

另外下次问问题,最好描述清楚;
图和程序最好贴出来,方便人回答;

使用特权

评论回复
9
HAORANAN123|  楼主 | 2017-12-4 13:36 | 只看该作者
mmuuss586 发表于 2017-12-2 16:43
看了下程序没问题啊;
程序没问题;
那电路怎么连的呢?

版主,我找到原因了,我写这个GPIOB->ODR=((0xff<<8)|(1<<5)|(1<<6));        寄存器操作,主要是为了高八位并口操作tft屏数据口,但是低八位我设置了输入模式,这个语句也会影响输入的值吗?

使用特权

评论回复
10
HAORANAN123|  楼主 | 2017-12-4 13:55 | 只看该作者
mmuuss586 发表于 2017-12-2 16:43
看了下程序没问题啊;
程序没问题;
那电路怎么连的呢?

如果我把语句携程GPIOB->ODR=((0xff<<8)|(1<<5)|(1<<6)|0x03); ,就不会影响PB0和PB1的按键输入吧

使用特权

评论回复
11
HAORANAN123|  楼主 | 2017-12-4 13:55 | 只看该作者
mmuuss586 发表于 2017-12-2 16:43
看了下程序没问题啊;
程序没问题;
那电路怎么连的呢?

如果我把语句携程GPIOB->ODR=((0xff<<8)|(1<<5)|(1<<6)|0x03); ,就不会影响PB0和PB1的按键输入吧

使用特权

评论回复
12
电气小学生| | 2017-12-4 23:51 | 只看该作者
PB0初始化成上拉输入后,为什么又输出了一个高电平啊,输入模式后,输出不是不起作用了吗?

使用特权

评论回复
来自android
13
一路向北lm| | 2017-12-5 08:51 | 只看该作者
是不是芯片io管脚损坏了

使用特权

评论回复
14
ningling_21| | 2017-12-5 09:32 | 只看该作者
电气小学生 发表于 2017-12-4 23:51
PB0初始化成上拉输入后,为什么又输出了一个高电平啊,输入模式后,输出不是不起作用了吗? ...

上拉输入模式,肯定可以检测到高电平(因为上拉电阻起作用),按键一般都是这种模式

使用特权

评论回复
15
戈卫东| | 2017-12-5 09:41 | 只看该作者
103的ODR会影响上拉下拉

使用特权

评论回复
16
电气小学生| | 2017-12-5 16:16 | 只看该作者
ningling_21 发表于 2017-12-5 09:32
上拉输入模式,肯定可以检测到高电平(因为上拉电阻起作用),按键一般都是这种模式 ...

是可以检测到高电平,我的意思是说楼主的
GPIOStru.GPIO_Pin =  GPIO_Pin_0 | GPIO_Pin_1 ;//UP  DOWN
   GPIOStru.GPIO_Mode = GPIO_Mode_IPU; //ÕâÀïÊÇPB0  PB1³õʼ»¯³ÉÉÏÀ­ÊäÈë
         GPIOStru.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_Init(GPIOB, &GPIOStru);
//        GPIO_SetBits( GPIOB, GPIO_Pin_0);

        PB0已经初始化为上拉输入了,那么  GPIO_SetBits( GPIOB, GPIO_Pin_0); 这个有什么用,这是不是让PB0输出高电平,在输入模式下,输出不起作用了吧

使用特权

评论回复
17
电气小学生| | 2017-12-5 16:18 | 只看该作者
戈卫东 发表于 2017-12-5 09:41
103的ODR会影响上拉下拉

您说的影响是什么意思,管脚设置上拉下拉后,对应ODR需要给1 吗?

使用特权

评论回复
18
戈卫东| | 2017-12-5 17:05 | 只看该作者
电气小学生 发表于 2017-12-5 16:18
您说的影响是什么意思,管脚设置上拉下拉后,对应ODR需要给1 吗?

上拉/下拉依赖于ODR的值。1=上拉,0=下拉。

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
电气小学生 + 2 很给力!
19
HAORANAN123|  楼主 | 2017-12-5 21:11 | 只看该作者
电气小学生 发表于 2017-12-4 23:51
PB0初始化成上拉输入后,为什么又输出了一个高电平啊,输入模式后,输出不是不起作用了吗? ...

事实上依旧起作用了

使用特权

评论回复
20
HAORANAN123|  楼主 | 2017-12-5 21:13 | 只看该作者
戈卫东 发表于 2017-12-5 09:41
103的ODR会影响上拉下拉

是的,就是这一个原因

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

26

主题

330

帖子

1

粉丝