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

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个回答
七哥 回答时间: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

查看全部评分

GKoSon 回答时间: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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版