打印

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

[复制链接]
4611|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xp1314520|  楼主 | 2013-3-2 17:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触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控制啊!!!

使用特权

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

本版积分规则

19

主题

57

帖子

1

粉丝