打印

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

[复制链接]
4228|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的中断向量设置正确吗?

使用特权

评论回复
5
torsten|  楼主 | 2011-10-11 11:44 | 只看该作者
4# 香水城

同样的条件下,EXTI5~7都出现软件复位问题,EXTI0~4都没有软件复位啊
香主说的设置正确是指什么?

使用特权

评论回复
6
香水城| | 2011-10-11 12:17 | 只看该作者
你的EXTI9_5中断向量是否放在中断向量表中正确的地方?如果不正确,当发生这个中断时,程序肯定要跑飞的,造成所谓的软件复位。

使用特权

评论回复
7
torsten|  楼主 | 2011-10-11 13:47 | 只看该作者
6# 香水城
对,多谢香主,的确是这个问题

使用特权

评论回复
8
香水城| | 2011-10-11 17:01 | 只看该作者
6# 香水城  
对,多谢香主,的确是这个问题
torsten 发表于 2011-10-11 13:47


哈哈,2楼就让你查这个问题,可是被你忽略了,:D

使用特权

评论回复
9
sinadz| | 2011-10-11 18:23 | 只看该作者
香主的指点还是很关键的:lol

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

37

帖子

1

粉丝