你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32入门按键控制问题

[复制链接]
maolukai 提问时间:2018-7-20 11:39 /
为什么我按下按键后没有反应,是应为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);
                }
        }
}


收藏 评论4 发布时间:2018-7-20 11:39

举报

4个回答
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中延时做什么?去掉延时。
  1. if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)  !=  Bit_RESET)
  2. {
  3.     GPIO_SetBits(GPIOC,GPIO_Pin_1);
  4. }
  5. else
  6. {
  7.     GPIO_ResetBits(GPIOC,GPIO_Pin_1);
  8. }
复制代码
在第3行、7行,分别加断点,你看进不进。

评分

参与人数 1蝴蝶豆 +4 收起 理由
zero99 + 4

查看全部评分

电子星辰 回答时间:2018-7-20 15:34:36
这标题我还以为是原创。你这按键是用中断还是轮询,如果是轮询,延时可以全去掉再来试试,轮询按键,循环里时间基本都挂起,根本就响应不了你

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

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);
}

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

与龙共舞 回答时间: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蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版