xp1314520 发表于 2013-3-2 17:57

关于STM8L152单片机外部中断的问题

刚接触STM8L152单片机,想用PG4接按键和led,平时灯灭,用外部中断功能,来实现按键点亮led的功能。应该是按键按下去,灯亮,松手灯灭,
但是我的程序时按键按下去了,灯就一直是亮的了,松手后不灭,跳不出中断了。。。求高手指教啊 !!!急急急!!!!!
#include "stm8l15x.h"
#include "intrinsics.h"

#define led1_L()(GPIO_ResetBits(GPIOF,GPIO_Pin_4))
#define led1_H()(GPIO_SetBits(GPIOF,GPIO_Pin_4))

void CLK_Config()   
{
    CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_16); //配置系统时钟为HSI 16分频 ,1mhz
}

void GPIO_Config()
{
   GPIO_Init( GPIOF, GPIO_Pin_All, GPIO_Mode_Out_PP_Low_Slow );   //GPIO配置,PF4上拉输出DI,低速
   GPIO_Init(GPIOG,GPIO_Pin_4,GPIO_Mode_In_PU_IT);            //GPIO配置,PG4上拉输入有中断
}   
   void main(void)
{

    void CLK_Config();
    GPIO_Config();
    EXTI_SetPortSensitivity(EXTI_Port_G,EXTI_Trigger_Falling_Low) ;
    EXTI_SetPinSensitivity(EXTI_Pin_4,EXTI_Trigger_Falling_Low );       //下降沿\低电平触发
    __enable_interrupt();
    while (1)
    {
       led1_H();
    }
}
下面这个是PG4的中断子函数 ,是这样写吗 ?
INTERRUPT_HANDLER(EXTIB_G_IRQHandler,6)
{
   led1_L();
   EXTI_ClearITPendingBit(EXTI_IT_PortG);
   EXTI_ClearITPendingBit(EXTI_IT_Pin4);       //清除中断标志
}


求高手指教啊 !!!!!

349264710 发表于 2013-3-3 16:20

我没有用过STM8,但看的出来程序有两个问题:
1.有外部中断时,应该先判断中断源,比如说是下降沿还是上升沿或者是下降沿触发的中断,然后再清除对应的中断标志位
2.你在中断中设置LED1_L();但在主程序中一直为LED1_H();那么从现象上看只能看到LED1_H();
最后从程序的可阅读角度来看,应该把LED1亮灭的宏定义名称改为LED1_ON()\LED1_OFF;

xp1314520 发表于 2013-3-3 22:12

感谢楼上大侠指教,上面的问题解决了哎 !!!哎,,新问题来了,新问题刚刚接触stm8l152这款单片机,想用它来点亮段式lcd,大侠指教一下怎样配置STM8L152的lcd控制啊!!!
页: [1]
查看完整版本: 关于STM8L152单片机外部中断的问题