初级会员

- 积分
- 194
- 金钱
- 194
- 注册时间
- 2014-9-16
- 在线时间
- 22 小时
|
1金钱
GPIO的配置如下:其中外部中断的引脚接了一个上拉电阻
void Init_MotorAndRelay(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE); //1رÕSWoíJTAG
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD, ENABLE); //¿aÆôê±Öó
//3õê¼»ˉ£¬GPIOA
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
//3õê¼»ˉ£¬GPIOBêä3ö¿ØÖƸ′óÃíÆíìêä3ö
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_8|GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
//3õê¼»ˉ£¬GPIOBéÏà-êä3ö£¬¶áè¡DD3ì¿a1Ø
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING ;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
//3õê¼»ˉ£¬GPIOC
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
//3õê¼»ˉ£¬GPIOCéÏà-êä3ö£¬¶áè¡DD3ì¿a1Ø
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING ;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
//3õê¼»ˉGPIOD
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOD, &GPIO_InitStructure);
}
外部中断的程序,
extern u8 logout;
void myExti_init(void)
{
EXTI_InitTypeDef EXTI_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //ê1Äü¸′óÃê±Öó
/***********************************************************A*/
//¿a1ØA′ò¿aêÇ·ñμ½Î»£¬ C9 ÖD¶ÏÏßòÔ¼°ÖD¶Ï3õê¼»ˉÅäÖã¬Ï½μÑØ′¥·¢
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource9);
EXTI_InitStructure.EXTI_Line =EXTI_Line0;
EXTI_InitStructure.EXTI_Mode =EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd =ENABLE;
EXTI_Init(&EXTI_InitStructure);
//¿a1ØA1رÕêÇ·ñμ½Î»£¬ C8 ÖD¶ÏÏßòÔ¼°ÖD¶Ï3õê¼»ˉÅäÖã¬Ï½μÑØ′¥·¢
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource8);
EXTI_InitStructure.EXTI_Line =EXTI_Line1;
EXTI_InitStructure.EXTI_Mode =EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd =ENABLE;
EXTI_Init(&EXTI_InitStructure);
/***********************************************************B*/
//¿a1ØB′ò¿aêÇ·ñμ½Î»£¬ C7 ÖD¶ÏÏßòÔ¼°ÖD¶Ï3õê¼»ˉÅäÖã¬Ï½μÑØ′¥·¢
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource7);
EXTI_InitStructure.EXTI_Line =EXTI_Line2;
EXTI_InitStructure.EXTI_Mode =EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd =ENABLE;
EXTI_Init(&EXTI_InitStructure);
//¿a1ØB1رÕêÇ·ñμ½Î»£¬ C6 ÖD¶ÏÏßòÔ¼°ÖD¶Ï3õê¼»ˉÅäÖã¬Ï½μÑØ′¥·¢
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource6);
EXTI_InitStructure.EXTI_Line =EXTI_Line3;
EXTI_InitStructure.EXTI_Mode =EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd =ENABLE;
EXTI_Init(&EXTI_InitStructure);
/***********************************************************C*/
//¿a1ØC′ò¿aêÇ·ñμ½Î»£¬ B15 ÖD¶ÏÏßòÔ¼°ÖD¶Ï3õê¼»ˉÅäÖã¬Ï½μÑØ′¥·¢
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource15);
EXTI_InitStructure.EXTI_Line =EXTI_Line5;
EXTI_InitStructure.EXTI_Mode =EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd =ENABLE;
//¿a1ØC1رÕêÇ·ñμ½Î»£¬ B14 ÖD¶ÏÏßòÔ¼°ÖD¶Ï3õê¼»ˉÅäÖã¬Ï½μÑØ′¥·¢
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource14); //μ¥¶àê1óÃía2¿ÖD¶Ï5_9
EXTI_InitStructure.EXTI_Line =EXTI_Line6;
EXTI_InitStructure.EXTI_Mode =EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd =ENABLE;
EXTI_Init(&EXTI_InitStructure);
/***********************************************************D*/
//¿a1ØD′ò¿aêÇ·ñμ½Î»£¬ B13 ÖD¶ÏÏßòÔ¼°ÖD¶Ï3õê¼»ˉÅäÖã¬Ï½μÑØ′¥·¢
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource13);
EXTI_InitStructure.EXTI_Line =EXTI_Line10;
EXTI_InitStructure.EXTI_Mode =EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd =ENABLE;
EXTI_Init(&EXTI_InitStructure);
//¿a1ØD1رÕêÇ·ñμ½Î»£¬ B12 ÖD¶ÏÏßòÔ¼°ÖD¶Ï3õê¼»ˉÅäÖã¬Ï½μÑØ′¥·¢
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource12);
EXTI_InitStructure.EXTI_Line =EXTI_Line11;
EXTI_InitStructure.EXTI_Mode =EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd =ENABLE;
EXTI_Init(&EXTI_InitStructure);
/****************************ÅäÖÃÖD¶ÏÏòá¿************************/
//ÖD¶ÏÏß0------------------A
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; //Ñ¡ÔñÖD¶ÏÏß0
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //ÇàÕ¼óÅÏè¼¶1
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //′óóÅÏè¼¶0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //ê1Äü
NVIC_Init(&NVIC_InitStructure);
//ÖD¶ÏÏß1
NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn; //Ñ¡ÔñÖD¶ÏÏß1
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //ÇàÕ¼óÅÏè¼¶1
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //′óóÅÏè¼¶1
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //ê1Äü
NVIC_Init(&NVIC_InitStructure);
//ÖD¶ÏÏß2------------------B
NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn; //Ñ¡ÔñÖD¶ÏÏß2
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //ÇàÕ¼óÅÏè¼¶2
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //′óóÅÏè¼¶0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //ê1Äü
NVIC_Init(&NVIC_InitStructure);
//ÖD¶ÏÏß3
NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn; //Ñ¡ÔñÖD¶ÏÏß3
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //ÇàÕ¼óÅÏè¼¶2
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //′óóÅÏè¼¶0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //ê1Äü
NVIC_Init(&NVIC_InitStructure);
//ÖD¶ÏÏß9_5------------------C
NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; //Ñ¡ÔñÖD¶ÏÏß9_5
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3; //ÇàÕ¼óÅÏè¼¶3
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //′óóÅÏè¼¶0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //ê1Äü
NVIC_Init(&NVIC_InitStructure);
//ÖD¶ÏÏß15_10------------------D
NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn; //Ñ¡ÔñÖD¶ÏÏß15_10
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 4; //ÇàÕ¼óÅÏè¼¶3
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //′óóÅÏè¼¶1
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //ê1Äü
}
void EXTI0_IRQHandler(void) //μç»úA
{
A_EN=0;A_1 =0;A_2 =0;
EXTI_ClearITPendingBit(EXTI_Line0); //Çå3yÖD¶Ï±ê־λ0
logout=logout&0x7F;
}
void EXTI1_IRQHandler(void) //μç»úA
{
A_EN=0;A_1 =0;A_2 =0;
EXTI_ClearITPendingBit(EXTI_Line1); //Çå3yÖD¶Ï±ê־λ1
logout=logout&0xBF;
}
void EXTI2_IRQHandler(void) //μç»úB
{
B_EN=0;B_1 =0;B_2 =0;
EXTI_ClearITPendingBit(EXTI_Line2); //Çå3yÖD¶Ï±ê־λ2
logout=logout&0xDF;
}
void EXTI3_IRQHandler(void) //μç»úB
{
B_EN=0;B_1 =0;B_2 =0;
EXTI_ClearITPendingBit(EXTI_Line3); //Çå3yÖD¶Ï±ê־λ3
logout=logout&0xEF;
}
void EXTI9_5_IRQHandler(void) //μç»úC
{
C_EN=0;C_1 =0;C_2 =0;
if( 0==C_L )
{
EXTI_ClearITPendingBit(EXTI_Line5); //Çå3yÖD¶Ï±ê־λ5
logout=logout&0xF7;
} //Çå3yÖD¶Ï±ê־λ5
if(0 == C_R)
{
EXTI_ClearITPendingBit(EXTI_Line6); //Çå3yÖD¶Ï±ê־λ6
logout=logout&0xFB;
}
}
void EXTI15_10_IRQHandler(void) //μç»úD
{
D_EN=0;D_1 =0;D_2 =0;
if(0 == D_L)
{
EXTI_ClearITPendingBit(EXTI_Line10); //Çå3yÖD¶Ï±ê־λ10
logout=logout&0xFD;
}
if(0 == D_R)
{
EXTI_ClearITPendingBit(EXTI_Line11); //Çå3yÖD¶Ï±ê־λ11
logout=logout&0xFE;
}
}
|
最佳答案
查看完整内容[请看2#楼]
那这个关闭就错了吧(好像都对不上):
[mw_shl_code=c,true]/***************************A*/
//¿a1ØA′ò¿aêÇ·ñμ½Î»£¬C9 ÖD¶ÏÏßòÔ¼°ÖD¶Ï3õê¼»ˉÅäÖã¬Ï½μÑØ′¥·¢
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSour ...
|