hardware connect 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. |
从零开始操作STM8寄存器(风驰iCreate奉献)
【中文资料】初学STM8库函数的中文帮助软件
绝对经典的中文STM8学习手册,淘宝上学习板资料,友情大放送!
【原创教程】风驰iCreate独家开源STM8 27个例程和10多万字的pdf教程
STM8的LCD1602 4线驱动,为什么不工作
【精华资料】由零开始开发STM8
STM8S 的触摸库是如何在主程序中查询键的呢、
【精华资料】STM8的C语言编程1-14讲完整版
【精品教程】STM8系列单片机入门教程系列
STM8 第一次进中断不准【悬赏问答】
RE:STM8L152R6T6 external interrupt cant work normally
这个功能没有开启。
回复:STM8L152R6T6 external interrupt cant work normally
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就不能够产生中断了。
RE:STM8L152R6T6 external interrupt cant work normally
RE:STM8L152R6T6 external interrupt cant work normally
你看一下这个函数,对应的引脚也要开启。
RE:STM8L152R6T6 external interrupt cant work normally
有劳版主了,板子不在手头,等明儿个俺来试试.
回复: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,其中一个保持低电平,另一个就不能够产生中断了。郁闷呀!
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);这样才能够起到中断独立的作用。
总算把问题解决了。
回复:STM8L152R6T6 external interrupt cant work normally
这个函数的详细意义吗?似乎数据手册上讲解的不是很清楚。尤其是对PF端口,ENABLE/DISABLE参数的差异在哪?
EXTIE_F_PVD_IRQn中断与单一一个pin脚中断有何差异吗?
RE:STM8L152R6T6 external interrupt cant work normally
2、EXTIE_F_PVD_IRQn是一个特殊的中断,具体你可以参考手册外部中断的介绍
3、EXTI_HalfPort_F_MSB的作用,你可以看看他定义的值,然后对比对应的寄存器,就明白了。