中级会员
 
- 积分
- 271
- 金钱
- 271
- 注册时间
- 2016-3-23
- 在线时间
- 49 小时
|
1金钱
各位,工程中只配置EXTI,EXTI 为A口时可以使用,将A全部换为B口,却无法使用,查了许久发现还是只能用B口,麻烦各位,不知该改何处,多谢。
代码为
# include "stm32f10x.h"
# include "stm32f10x_crc.h"
# include "stm32f10x_exti.h"
# include "stm32f10x_flash.h"
# include "stm32f10x_gpio.h"
# include "stm32f10x_misc.h"
# include "stm32f10x_can.h"
# include "stm32f10x_tim.h"
# include "Delay_Init.h"
# define RED_1 GPIO_SetBits(GPIOB,GPIO_Pin_9 )
# define RED_0 GPIO_ResetBits(GPIOB,GPIO_Pin_9 )
# define BLUE_1 GPIO_SetBits(GPIOB,GPIO_Pin_8 )
# define BLUE_0 GPIO_ResetBits(GPIOB,GPIO_Pin_8 )
void LED_Init()
{
GPIO_InitTypeDef GPIO_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
// LED配置
//RED
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE); // 使能PD端口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 ;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化PD端口
//BLUE
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE); // 使能PG端口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化PG端口
// EXTI 配置
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE); // 使能PA端口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 ;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化PA端口
// 外部事件中断 Lin0
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);
EXTI_DeInit(); //配置缺省
EXTI_InitStructure.EXTI_Line = EXTI_Line0;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
EXTI_ClearITPendingBit(EXTI_Line0); //清除中断线路
// Configure the Priority Grouping with 0 bit //
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); //主从优先级
// Enable TIM3 global interrupt with Preemption Priority 1 and SubPriority as 0 //
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //主优先级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //从优先级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
void EXTI0_IRQHandler(void) //中断处程序
{
if(EXTI_GetITStatus(EXTI_Line0) != RESET)
{
BLUE_0;
RED_0;
delay_ms(3000);
// Clear the EXTI line 9 pending bit
EXTI_ClearITPendingBit(EXTI_Line0);
}
}
int main(void)
{
SystemInit( ); // 配置系统时钟为72M
Delay_init( );
LED_Init( );
while (1)
{
BLUE_1;
RED_1;
}
}
|
|