maolukai 发表于 2018-7-20 11:39:11

stm32入门按键控制问题

为什么我按下按键后没有反应,是应为GPIO_ReadInputDataBit函数问题还是其他
void Key_Init()
{
      GPIO_InitTypeDef GPIO_InitStructure;
      RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOE,ENABLE);
      
      GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;
                GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;
      GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
      GPIO_Init(GPIOA,&GPIO_InitStructure);
      
      GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;
                GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
      GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
      GPIO_Init(GPIOE,&GPIO_InitStructure);
      
}

int main()
{
      Led_Init_My();
      SysTick_init_My(72);
      Key_Init();
      while(1)
      {
    if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)==1)
                {
                        delay_ms(10);
                GPIO_SetBits(GPIOC,GPIO_Pin_1);
                delay_ms(500);
                }
                else if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)==0)
                {
                              delay_ms(10);
          GPIO_ResetBits(GPIOC,GPIO_Pin_1);
                delay_ms(500);
                }
      }
}


toofree 发表于 2018-7-20 14:12:33

本帖最后由 toofree 于 2018-7-20 14:23 编辑

GPIO时钟开了没有?
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOE | RCC_APB2Periph_AFIO, ENABLE);
看你用了RCC_APB2PeriphResetCmd。

在if中延时做什么?去掉延时。
if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)!=Bit_RESET)
{
    GPIO_SetBits(GPIOC,GPIO_Pin_1);
}
else
{
    GPIO_ResetBits(GPIOC,GPIO_Pin_1);
}在第3行、7行,分别加断点,你看进不进。

电子星辰 发表于 2018-7-20 15:34:36

这标题我还以为是原创。你这按键是用中断还是轮询,如果是轮询,延时可以全去掉再来试试,轮询按键,循环里时间基本都挂起,根本就响应不了你

TLLED 发表于 2018-7-20 16:52:31

我建议测试下,主程序循环,先执行下列代码看PC1口是否有电平反转。

while(1)
{
        GPIO_SetBits(GPIOC,GPIO_Pin_1);
        delay_ms(500);
        GPIO_ResetBits(GPIOC,GPIO_Pin_1);
        delay_ms(500);
}

与龙共舞 发表于 2018-7-20 17:55:38

看样子应该是轮训 都已经死循环了
1延时没有必要
2C1接的是灯吗
3通过E2控制C1 看你key还蛮多的 换一个看看
       1、浮空输入GPIO_IN_FLOATING ——浮空输入,可以做KEY识别,RX1
       2、带上拉输入GPIO_IPU——IO内部上拉电阻输入
       3、带下拉输入GPIO_IPD—— IO内部下拉电阻输入
页: [1]
查看完整版本: stm32入门按键控制问题