搜索
查看: 8935|回复: 9

STM8L152R6T6 external interrupt cant work normally

[复制链接]

该用户从未签到

2

主题

15

帖子

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2011-9-27 15:30:11 | 显示全部楼层 |阅读模式
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.
回复

使用道具 举报

该用户从未签到

133

主题

4688

帖子

239

蝴蝶豆

版主

最后登录
2021-4-10
发表于 2011-9-27 16:43:31 | 显示全部楼层

RE:STM8L152R6T6 external interrupt cant work normally

GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);  //用于外部唤醒
这个功能没有开启。
回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

15

帖子

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 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就不能够产生中断了。
 
回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

15

帖子

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2011-9-27 20:16:10 | 显示全部楼层

RE:STM8L152R6T6 external interrupt cant work normally

高手中的高高手,人呢?没人顶,自己来。
回复 支持 反对

使用道具 举报

该用户从未签到

133

主题

4688

帖子

239

蝴蝶豆

版主

最后登录
2021-4-10
发表于 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);
你看一下这个函数,对应的引脚也要开启。
回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

15

帖子

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2011-9-27 21:01:30 | 显示全部楼层

RE:STM8L152R6T6 external interrupt cant work normally

Right, miss that.
有劳版主了,板子不在手头,等明儿个俺来试试.
回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

15

帖子

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 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,其中一个保持低电平,另一个就不能够产生中断了。郁闷呀!
回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

15

帖子

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 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);这样才能够起到中断独立的作用。
总算把问题解决了。
回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

15

帖子

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 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脚中断有何差异吗?
回复 支持 反对

使用道具 举报

该用户从未签到

133

主题

4688

帖子

239

蝴蝶豆

版主

最后登录
2021-4-10
发表于 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的作用,你可以看看他定义的值,然后对比对应的寄存器,就明白了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

GMT+8, 2024-5-7 08:24 , Processed in 0.180136 second(s), 41 queries .

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表