OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2183|回复: 3

STM32 外部 按键中断 问题

[复制链接]

2

主题

9

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2019-3-13
在线时间
6 小时
发表于 2019-3-13 09:37:08 | 显示全部楼层 |阅读模式
各位大佬 是这样的 我想做一个 基于STM32F103C8T6 的按键外部中断 以GPIOB Pin 0 作为中断 选择 0中断线  ,GPIOA Pin 0 作为led 输出 主程序中 led 为灭的状态 ,监测到中断后 进行亮灯操作,经过操作,可以实现功能,但是测试的时候 发现 我按GPIOB 的Pin 1 引脚外连的按键 也可以引起中断,请问这是为什么呢,如何解决这个问题呢?

  1. [mw_shl_code=c,true]#include "stm32f10x.h"                  // Device header
  2. #include "stm32f10x_gpio.h"             // Keil::Device:StdPeriph Drivers:GPIO
  3. #include "stm32f10x_exti.h"             // Keil::Device:StdPeriph Drivers:EXTI

  4. void delay(u32 t)
  5. {
  6.   while(--t);
  7. }

  8. void ledGpioInitConfig()  //led初始化 选择GPIOA Pin_0 作为推挽输出
  9. {
  10.   GPIO_InitTypeDef GPIO_InitStructure;
  11.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  12.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
  13.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  14.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  15.   GPIO_Init(GPIOA, &GPIO_InitStructure);
  16. }

  17. void nvicInitConfig() //初始化 嵌套向量中断控制器
  18. {
  19.   NVIC_InitTypeDef NVIC_Initstructure;

  20.   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

  21.   NVIC_Initstructure.NVIC_IRQChannel = EXTI0_IRQn;
  22.   NVIC_Initstructure.NVIC_IRQChannelPreemptionPriority = 0;
  23.   NVIC_Initstructure.NVIC_IRQChannelSubPriority = 1;
  24.   NVIC_Initstructure.NVIC_IRQChannelCmd = ENABLE;
  25. }

  26. void extiGpioBPin1InitConfig() //初始化 外部中断配置 选择 GPIOA Pin 0 作为外部按键 且下降沿有效
  27. {
  28.   GPIO_InitTypeDef GPIO_InitStructure;
  29.   EXTI_InitTypeDef EXTI_InitStructure;

  30.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);

  31.   nvicInitConfig();

  32.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
  33.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  34.   GPIO_Init(GPIOB, &GPIO_InitStructure);

  35.   EXTI_InitStructure.EXTI_Line = EXTI_Line0;
  36.   EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  37.   EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
  38.   EXTI_InitStructure.EXTI_LineCmd = ENABLE;

  39.   GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource0);
  40. }

  41. void EXTI0_IRQHandler() //中断服务程序控制 led亮
  42. {
  43.   if(EXTI_GetITStatus(EXTI_Line0) != RESET)
  44.   {
  45.     GPIO_SetBits(GPIOA, GPIO_Pin_0);
  46.     delay(0xFFFFF);
  47.     EXTI_ClearFlag(EXTI_Line0);
  48.   }
  49.   EXTI_ClearITPendingBit(EXTI_Line0);
  50. }

  51. int main()
  52. {
  53.   ledGpioInitConfig();
  54.   extiGpioBPin1InitConfig();
  55.   while(1)
  56.   {
  57.     GPIO_ResetBits(GPIOA, GPIO_Pin_0);
  58.     delay(0xFFFFF);
  59.   }
  60. }
  61. [/mw_shl_code]
复制代码

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

31

主题

2183

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
14433
金钱
14433
注册时间
2018-8-3
在线时间
1157 小时
发表于 2019-3-13 10:14:26 | 显示全部楼层
仿真 全速运行 在中断函数打断点  触发相应IO  看程序如何运行
啊哈~加油!!
回复 支持 反对

使用道具 举报

2

主题

9

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2019-3-13
在线时间
6 小时
 楼主| 发表于 2019-3-13 12:35:36 | 显示全部楼层
翼行园子 发表于 2019-3-13 10:14
仿真 全速运行 在中断函数打断点  触发相应IO  看程序如何运行

好 已解决 哎呀 还是自己的语法问题 233333333. 得多练练 谢谢了老哥
回复 支持 反对

使用道具 举报

头像被屏蔽

0

主题

207

帖子

0

精华

禁止发言

积分
276
金钱
276
注册时间
2019-3-4
在线时间
4 小时
发表于 2019-3-14 08:15:10 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-24 05:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表