新手上路
- 积分
- 41
- 金钱
- 41
- 注册时间
- 2014-3-27
- 在线时间
- 0 小时
|
5金钱
4个IO口(PB0-3)接入4个外部中断(PC0-3) 4个外部中断在GROUP3 ; 出发方式是上升沿触发 我打算用GPIOB的电平输出变化来制造上升沿;触发外部中断通过串口分别发送“0x31 0x32 0x33 0x34”
PC0和PC1的先占优先级2 PC0的从是1 PC1是0
PC2和PC3的先占是1   C2从是1 PC3从是0; PC0中断 1S发送一次 PC1 2S发送一次   C2 4S发送   C3 8S发送;
但现在的问题是串口只是一直发送“11111111111” 也就是一直触发外部中断0线。。。求教怎么回事。。。下面是我的外部中断函数和定时器TIM2(用于延时的并且定时器中断内发生电平变化)
void TIM2_IRQHandler(void)
{
u8 x=0;
if(TIM_GetITStatus(TIM2,TIM_IT_Update)!=RESET)
{
x++;
if(x==1||x==3||x==5||x==7)
{
GPIO_SetBits(GPIOB,GPIO_Pin_0);
delay_ms(50);
GPIO_ResetBits(GPIOB,GPIO_Pin_0);
TIM_ClearFlag(TIM2, TIM_FLAG_CC1);
}
if(x==2||x==6)
{
GPIO_SetBits(GPIOB,GPIO_Pin_1|GPIO_Pin_0);
delay_ms(50);
GPIO_ResetBits(GPIOB,GPIO_Pin_1|GPIO_Pin_0);
TIM_ClearFlag(TIM2, TIM_FLAG_CC1);
}
if(x==4)
{
GPIO_SetBits(GPIOB,GPIO_Pin_2|GPIO_Pin_1|GPIO_Pin_0);
delay_ms(50);
GPIO_ResetBits(GPIOB,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2);
TIM_ClearFlag(TIM2, TIM_FLAG_CC1);
}
if(x==8)
{
x=0;
GPIO_SetBits(GPIOB,GPIO_Pin_4|GPIO_Pin_2|GPIO_Pin_1|GPIO_Pin_0);
delay_ms(50);
GPIO_ResetBits(GPIOB,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_4);
TIM_ClearFlag(TIM2, TIM_FLAG_CC1);
}
}
}
//外部中断函数
void EXTI0_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line0) != RESET)
{
USART_SendData(USART1,0x31);
}
EXTI_ClearITPendingBit(EXTI_Line0);
}
void EXTI1_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line1) != RESET)
{
USART_SendData(USART1,0x32);
}
EXTI_ClearITPendingBit(EXTI_Line1);
}
void EXTI2_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line2) != RESET)
{
USART_SendData(USART1,0x33);
}
EXTI_ClearITPendingBit(EXTI_Line2);
}
void EXTI3_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line3) != RESET)
{
USART_SendData(USART1,0x34);
}
EXTI_ClearITPendingBit(EXTI_Line3);
}
|
最佳答案
查看完整内容[请看2#楼]
回复【10楼】正点原子:
---------------------------------
原子哥,问题解决了,是其他地方还有一些小的疏忽,现在都解决了,下次会仔细一点,不这么马虎了
|