初级会员

- 积分
- 160
- 金钱
- 160
- 注册时间
- 2012-12-22
- 在线时间
- 65 小时
|
5金钱
最近做外部中断出现一个问题,
我设置的是PC3 为下降沿触发 外部中断,PA0~7为自己定义的总线,但是当PA3电平发生变化时会进入外部中断3函数,
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource3);这调语句好像没什么用一样;不管我怎么配置这调语句都是PA3触发中断。
问题:我程序问题出在那里?
附程序:
void other_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, ENABLE); //使能PF端口时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //使能PC端口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; //INIT0--> C.3端口
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //下拉输入
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
GPIO_Init(GPIOC, &GPIO_InitStructure); //下拉输入 ,IO口速度为50MHz
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; // K1--> F.1
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; //开漏输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
GPIO_Init(GPIOF, &GPIO_InitStructure); //开漏输出 ,IO口速度为50MHz
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_1; //FMQ--> F.0
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
GPIO_Init(GPIOF, &GPIO_InitStructure); //推挽输出 ,IO口速度为50MHz
GPIO_SetBits(GPIOF,GPIO_Pin_0); //PF.0 输出高
}
void EXTI_INIT0(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
EXTI_InitTypeDef EXTI_InitStruct;
/*时钟配置函数 */
RCC_APB2PeriphResetCmd(RCC_APB2Periph_AFIO,ENABLE); //使能功能复用时钟AFIO
NVIC_InitStructure.NVIC_IRQChannel=EXTI3_IRQn; //设置外部中断3
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2; //抢占优先级为2
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0; //从优先级为0
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; //使能中断
NVIC_Init(&NVIC_InitStructure); //设置该中断
/*外部中断映射配置 */
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource3);//设置GPIOC.3为外部中断3
EXTI_InitStruct.EXTI_Line=EXTI_Line3; //设置外部中断3
EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt; //设置中断模式为中断
EXTI_InitStruct.EXTI_Trigger=EXTI_Trigger_Falling; //设置输入线路下降沿为中断请求
EXTI_InitStruct.EXTI_LineCmd=ENABLE; //使能该中断
EXTI_Init(&EXTI_InitStruct); //根据配置设置外部函数
}
void EXTI3_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line3) !=RESET)
{
k1=~k1; //PC3
EXTI_ClearITPendingBit(EXTI_Line3); //清除LINE3上的中断标志位
}
}
|
最佳答案
查看完整内容[请看2#楼]
RCC_APB2PeriphResetCmd(RCC_APB2Periph_AFIO,ENABLE); //使能功能复用时钟AFIO----这句错了吧 C时钟没有使能呢
|