lwfchat 发表于 2016-3-10 13:07:08

关于stm32f407的通用io设置,求助

各位,我在使用stm32f407zet6这个芯片的时候,想把GPIOC设置为输入端口,检测外部按键,我的程序具体编码是这样的:
//对端口初始化
void InitExternalIO(void)
{
      GPIO_InitTypeDef GPIO_InitStructure;
                        
      /* ´ò¿ªGPIOCµÄʱÖÓ */
      RCC_APB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
   
      //ÊäÈë¶Ë¿Ú
      //PC 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
      GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All;
      GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN;      //ÊäÈë
      GPIO_InitStructure.GPIO_OType=GPIO_OType_OD;    //¿ªÂ©Êä³ö
      GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;//
      GPIO_InitStructure.GPIO_Speed=GPIO_Speed_25MHz; //
      GPIO_Init(GPIOC,&GPIO_InitStructure);
   
}

然后在循环里面循环读取C端口的输入状态,再通过串口输出:程序是
    OSTimeDly(500);
    {
      char buf;
      InitExternalIO();
      sprintf(buf,"GPIOC=%04x\r\n",GPIOC->IDR);
      DebugPrint(buf);
    }

在我改变C端口的状态时(示波器观测有变化),但是在串口接收到数据始终是GPIOC=0000,我想知道 哪里没有设置好,或者是由于硬件上问题,望知其下落者告知?

潇潇雨歇pku 发表于 2016-3-10 14:11:57

我跟你用的库不一样,不过我把GPIO随便设置成输入甚至是输出都可以读到。

看你代码唯一让我觉得可能有错的地方就是,你把GPIOC设置成OD输入,只听说过OD输出,是不是这里配置错了?

lwfchat 发表于 2016-3-10 14:26:53

本帖最后由 lwfchat 于 2016-3-10 14:44 编辑

你说的这个问题,我也改变过:输入上拉或者是输入悬空,都是同样的现象, 我觉得这个配置是比较简单的,你的QQ是多少,还望赐教?

lwfchat 发表于 2016-3-10 14:28:18

但是奇怪的是,我在使用PB5,PB6,PB7模拟读写外部E2PROM是正确的,但是端口C D E F,读取不到状态变化,我擦

陈万垒 发表于 2016-3-10 14:30:16

输入的话不用配置speed和otype

lwfchat 发表于 2016-3-10 14:31:05

是的不用配置,但是配置了也不影响,在调用端口初始化函数时,那部分没执行的。我关心的是状态为何读取不到。

lwfchat 发表于 2016-3-10 14:43:48

:)没人帮我了,我晕

Mandelbrot_Set 发表于 2016-3-10 17:50:31

时钟:$                              

xmshao 发表于 2016-3-10 23:33:25

RCC_APB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
==>RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);

lwfchat 发表于 2016-3-11 00:07:45

楼上的兄弟, 都是我粗心啊,太感谢了,:lol:handshake
页: [1]
查看完整版本: 关于stm32f407的通用io设置,求助