GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
EXTI_InitTypeDef EXTI_InitStructure;
GPIO_EXTILineConfigGPIO_PortSourceGPIOB, GPIO_PinSource4);
EXTI_InitStructure.EXTI_Line = EXTI_Line4;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
EXTI_GenerateSWInterrupt(EXTI_Line4);
而GPIOA PA4 配置为输入,PA4没有配置为中断线,只是数据输入。
为什么PA4用镊子碰它能进入中断函数的,而PB4却不能??
10 个解决方案
#1
我对比我和你的配置的区别:
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource4);//先定这个,再配置IO参数
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
EXTI_InitTypeDef EXTI_InitStructure;
EXTI_InitStructure.EXTI_Line = EXTI_Line4;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
//EXTI_GenerateSWInterrupt(EXTI_Line4);不需要这个
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource4);//先定这个,再配置IO参数
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
EXTI_InitTypeDef EXTI_InitStructure;
EXTI_InitStructure.EXTI_Line = EXTI_Line4;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
//EXTI_GenerateSWInterrupt(EXTI_Line4);不需要这个
#2
GPIO_EXTILineConfigGPIO_PortSourceGPIOB, GPIO_PinSource4);
少个左括号,编译通过了吗?
少个左括号,编译通过了吗?
#3
我只是发的时候少写了括号。不必要纠结这些小问题!
#4
一样啊,还是不行。PA4老是中断!
#5
我这边的配置用的是PA口的0\1\2来做外中断,同时,我别的口的0/1/2也都有用作别用的.别的口并没有触发中断
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource4);//全工程搜索一下,看有没有在别的地方还调用这个函数?
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource4);//全工程搜索一下,看有没有在别的地方还调用这个函数?
#6
只用了一次,还有更奇怪的是我加上了RCC_APB2Periph_AFIO PA4就不能中断了,但是PB4还是不能中断!
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_USART1, ENABLE);
#7
解决了,应该是没有加RCC_APB2Periph_AFIO这个,所以不行!这个是要加上去,哎,久不用这东西,连外部中断都不会用了!
#8
STM32也真二的,这个时钟没开,那也不应该串过去哈...
这个,算不算是一个硬件的BUG?
要不你向ST提交一下?
这个,算不算是一个硬件的BUG?
要不你向ST提交一下?
#9
不懂它内部怎么构造的,至于是不是BUG就不知道了!
#10
感谢你们的帮助!
#1
我对比我和你的配置的区别:
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource4);//先定这个,再配置IO参数
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
EXTI_InitTypeDef EXTI_InitStructure;
EXTI_InitStructure.EXTI_Line = EXTI_Line4;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
//EXTI_GenerateSWInterrupt(EXTI_Line4);不需要这个
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource4);//先定这个,再配置IO参数
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
EXTI_InitTypeDef EXTI_InitStructure;
EXTI_InitStructure.EXTI_Line = EXTI_Line4;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
//EXTI_GenerateSWInterrupt(EXTI_Line4);不需要这个
#2
GPIO_EXTILineConfigGPIO_PortSourceGPIOB, GPIO_PinSource4);
少个左括号,编译通过了吗?
少个左括号,编译通过了吗?
#3
我只是发的时候少写了括号。不必要纠结这些小问题!
#4
一样啊,还是不行。PA4老是中断!
#5
我这边的配置用的是PA口的0\1\2来做外中断,同时,我别的口的0/1/2也都有用作别用的.别的口并没有触发中断
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource4);//全工程搜索一下,看有没有在别的地方还调用这个函数?
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource4);//全工程搜索一下,看有没有在别的地方还调用这个函数?
#6
只用了一次,还有更奇怪的是我加上了RCC_APB2Periph_AFIO PA4就不能中断了,但是PB4还是不能中断!
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_USART1, ENABLE);
#7
解决了,应该是没有加RCC_APB2Periph_AFIO这个,所以不行!这个是要加上去,哎,久不用这东西,连外部中断都不会用了!
#8
STM32也真二的,这个时钟没开,那也不应该串过去哈...
这个,算不算是一个硬件的BUG?
要不你向ST提交一下?
这个,算不算是一个硬件的BUG?
要不你向ST提交一下?
#9
不懂它内部怎么构造的,至于是不是BUG就不知道了!
#10
感谢你们的帮助!