香主,各位大侠,有关exti外部中断的一个问题想向你们请教

[复制链接]
5737|8
 楼主| torsten 发表于 2011-10-10 17:13 | 显示全部楼层 |阅读模式
我用STM32F103VC,PC0~7用作8组串口的输入引脚,同时使用外部中断,用于捕捉每一个字节的起始位(下降沿).现在PC0~PC4(EXTI0~EXTI4)的应用都没有问题,但是PC5~PC7(EXTI5~EXTI7,共用中断向量EXTI9_5)这几个引脚没有产生中断,而且当下降沿输入到引脚后立即产生软件复位。而且这八组串口不会在同一时刻工作。
请问这是什么原因呢?EXTI9_5和前面的5个外部中断相比有什么值得注意的地方吗?
香水城 发表于 2011-10-10 17:28 | 显示全部楼层
你是如何判断产生了软件复位?

EXTI9_5的中断向量设置正确吗?
 楼主| torsten 发表于 2011-10-11 08:08 | 显示全部楼层
2# 香水城

我用在线仿真调试,先让程序运行一段时间(我确定已经运行到while(1)),然后在程序一开始的地方(while(1)前)和EXTI9_5的中断程序里分别加入断点,然后我用电脑通过串口向STM32发送启动模拟串口的指令(模拟串口先发后收),结果程序没在EXTI9_5中断的断点停下,而是在程序一开始的地方停下来了。

程序一开始我先初始化中断
  Ex_NVIC_Config(GPIO_C,5,FTIR);
  EXTI->IMR&=NOT_USART_IB;

void Ex_NVIC_Config(u8 GPIOx,u8 BITx,u8 TRIM)
{
u8 EXTADDR;
u8 EXTOFFSET;
EXTADDR=BITx/4;
EXTOFFSET=(BITx%4)*4;

AFIO->EXTICR[EXTADDR]&=~(0x000F<<EXTOFFSET;
AFIO->EXTICR[EXTADDR]|=GPIOx<<EXTOFFSET;//EXTI.BITxÓ³Éäµ½GPIOx.BITx


  if(TRIM&0x01)EXTI->FTSR|=1<<BITx;
if(TRIM&0x02)EXTI->RTSR|=1<<BITx;
}

但先不使能中断
STM32先发串口命令到其他芯片,发送后程序使能EXTI中断。
EXTI->IMR&=USART_IB;
然后就是没有进入到EXTI中断而且引起了软件复位
但是我在同样的情况下使用EXTI0~EXTI4都没有问题
香水城 发表于 2011-10-11 11:01 | 显示全部楼层
你怎么知道是软件复位而不是你的程序跑乱了呢?

还是那个问题:EXTI9_5的中断向量设置正确吗?
 楼主| torsten 发表于 2011-10-11 11:44 | 显示全部楼层
4# 香水城

同样的条件下,EXTI5~7都出现软件复位问题,EXTI0~4都没有软件复位啊
香主说的设置正确是指什么?
香水城 发表于 2011-10-11 12:17 | 显示全部楼层
你的EXTI9_5中断向量是否放在中断向量表中正确的地方?如果不正确,当发生这个中断时,程序肯定要跑飞的,造成所谓的软件复位。
 楼主| torsten 发表于 2011-10-11 13:47 | 显示全部楼层
6# 香水城
对,多谢香主,的确是这个问题
香水城 发表于 2011-10-11 17:01 | 显示全部楼层
6# 香水城  
对,多谢香主,的确是这个问题
torsten 发表于 2011-10-11 13:47


哈哈,2楼就让你查这个问题,可是被你忽略了,:D
sinadz 发表于 2011-10-11 18:23 | 显示全部楼层
香主的指点还是很关键的:lol
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

37

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部