你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM8L152R6T6 external interrupt cant work normally

[复制链接]
etangmail 提问时间:2011-9-27 15:30 /
hardware connect
hardware.JPG
port configuration
 //--------------------------initinal rotate coder
 //PF4,PF5,PF6,PF7
 GPIO_Init(GPIOF,GPIO_Pin_4,GPIO_Mode_In_FL_IT );
 GPIO_Init(GPIOF,GPIO_Pin_5,GPIO_Mode_In_FL_No_IT );
 GPIO_Init(GPIOF,GPIO_Pin_6,GPIO_Mode_In_FL_IT );
 GPIO_Init(GPIOF,GPIO_Pin_7,GPIO_Mode_In_FL_No_IT );
 EXTI_SelectPort(EXTI_Port_F);
 
 EXTI_SetHalfPortSelection(EXTI_HalfPort_F_MSB,ENABLE);
 
 EXTI_SetPortSensitivity(EXTI_Port_F,EXTI_Trigger_Rising_Falling);
 ITC_SetSoftwarePriority(EXTI4_IRQn,ITC_PriorityLevel_2);
 ITC_SetSoftwarePriority(EXTI6_IRQn,ITC_PriorityLevel_2);
 
problem descrtiption:
when the PF6,PF7 is low level, the PF4 cant triggle the external internal, when PF6, PF7 is high level ,the interrupt is work normally.
how to resolve this problem , need your help.
PF4 and PF6 use as  external interrupt the PF5 and PF7 use as input port.
收藏 评论9 发布时间:2011-9-27 15:30

举报

9个回答
废鱼 回答时间:2011-9-27 16:43:31

RE:STM8L152R6T6 external interrupt cant work normally

GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);  //用于外部唤醒
这个功能没有开启。
etangmail 回答时间:2011-9-27 17:42:18

回复:STM8L152R6T6 external interrupt cant work normally

你说的那个函数ST标准库中,似乎没有。
void GPIO_Init(GPIO_TypeDef *GPIOx, uint8_t GPIO_Pin, GPIO_Mode_TypeDef GPIO_Mode)
似乎已经配置了端口的外部中断功能。第三个参数已经表明了是否为中断功能,如果像你说的那样
应该在PF6,PF7为高点平的时候也不能工作的,但是却可以工作,之前用Freescale的KEYINT也有这种
问题。但是Freescale GPIO可以独立配置中断边缘类型,ST的似乎只能4个端口统一配置为Falling,Rising,或者其他。
在PF4,PF5,PF6,PF7中配置PF4和PF6为外部中断,类型为EXTI_Trigger_Rising_Falling, 问题是外部电路保持PF6为低电平的时候,
PF4就不能够产生中断了。
 
etangmail 回答时间:2011-9-27 20:16:10

RE:STM8L152R6T6 external interrupt cant work normally

高手中的高高手,人呢?没人顶,自己来。
废鱼 回答时间:2011-9-27 20:27:58

RE:STM8L152R6T6 external interrupt cant work normally

void EXTI_SetPinSensitivity(EXTI_Pin_TypeDef EXTI_Pin, EXTI_Trigger_TypeDef EXTI_Trigger);
你看一下这个函数,对应的引脚也要开启。
etangmail 回答时间:2011-9-27 21:01:30

RE:STM8L152R6T6 external interrupt cant work normally

Right, miss that.
有劳版主了,板子不在手头,等明儿个俺来试试.
etangmail 回答时间:2011-9-28 09:08:28

回复:STM8L152R6T6 external interrupt cant work normally

代码修改为
 //--------------------------initinal rotate coder
 //PF4,PF5,PF6,PF7
 GPIO_Init(GPIOF,GPIO_Pin_4,GPIO_Mode_In_FL_IT );
 GPIO_Init(GPIOF,GPIO_Pin_5,GPIO_Mode_In_FL_No_IT );
 GPIO_Init(GPIOF,GPIO_Pin_6,GPIO_Mode_In_FL_IT );
 GPIO_Init(GPIOF,GPIO_Pin_7,GPIO_Mode_In_FL_No_IT );
 EXTI_SelectPort(EXTI_Port_F);
 
 EXTI_SetHalfPortSelection(EXTI_HalfPort_F_MSB,ENABLE);
 EXTI_SetPortSensitivity(EXTI_Port_F,EXTI_Trigger_Rising_Falling);
 
 EXTI_SetPinSensitivity(EXTI_Pin_4,EXTI_Trigger_Rising_Falling);
 EXTI_SetPinSensitivity(EXTI_Pin_6,EXTI_Trigger_Rising_Falling);
 ITC_SetSoftwarePriority(EXTIE_F_PVD_IRQn,ITC_PriorityLevel_3);
问题依旧,不行呀,无论是PF4,还是PF6,其中一个保持低电平,另一个就不能够产生中断了。郁闷呀!
etangmail 回答时间:2011-9-28 09:36:11

RE:STM8L152R6T6 external interrupt cant work normally

修改代码如下:
GPIO_Init(GPIOF,GPIO_Pin_4,GPIO_Mode_In_FL_IT );
GPIO_Init(GPIOF,GPIO_Pin_5,GPIO_Mode_In_FL_No_IT );
GPIO_Init(GPIOF,GPIO_Pin_6,GPIO_Mode_In_FL_IT );
GPIO_Init(GPIOF,GPIO_Pin_7,GPIO_Mode_In_FL_No_IT );
EXTI_SelectPort(EXTI_Port_F);
       
EXTI_SetHalfPortSelection(EXTI_HalfPort_F_MSB,DISABLE);
       
EXTI_SetPinSensitivity(EXTI_Pin_4,EXTI_Trigger_Rising_Falling);
EXTI_SetPinSensitivity(EXTI_Pin_6,EXTI_Trigger_Rising_Falling);
ITC_SetSoftwarePriority(EXTI4_IRQn,ITC_PriorityLevel_3);
ITC_SetSoftwarePriority(EXTI6_IRQn,ITC_PriorityLevel_3);
不使用EXTIE_F_PVD_IRQHandler中断,改为EXTI4_IRQn和EXTI6_IRQn中断,同时需要设置EXTI_SetHalfPortSelection(EXTI_HalfPort_F_MSB,DISABLE);这样才能够起到中断独立的作用。
总算把问题解决了。
etangmail 回答时间:2011-9-28 09:43:34

回复:STM8L152R6T6 external interrupt cant work normally

有谁可以说说EXTI_SetHalfPortSelection(EXTI_HalfPort_F_MSB,DISABLE);
这个函数的详细意义吗?似乎数据手册上讲解的不是很清楚。尤其是对PF端口,ENABLE/DISABLE参数的差异在哪?
EXTIE_F_PVD_IRQn中断与单一一个pin脚中断有何差异吗?
废鱼 回答时间:2011-9-28 11:34:25

RE:STM8L152R6T6 external interrupt cant work normally

1、因为你使用的是非FVD中断,所以要使用EXTI4_IRQn
2、EXTIE_F_PVD_IRQn是一个特殊的中断,具体你可以参考手册外部中断的介绍
3、EXTI_HalfPort_F_MSB的作用,你可以看看他定义的值,然后对比对应的寄存器,就明白了。
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版