分享

STM32学习笔记---外部中断(EXTI8) (www.ourdev.cn)

 葡萄干 2010-05-26
STM32学习笔记---外部中断(EXTI8) 回复数:6,点击数:311
【楼主位】 weif40423p
积分:45
派别:
等级:------
来自:
在使用EXTI的时候,因为没有开启时钟没有开启RCC_APB2Periph_AFIO时钟,让我调试吃了不少苦头,看来还要好好看看stm32的时钟
现在给出我的exti8的配置

首先一定要记得配置 

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); // 使能AFIO时钟
GPIOB8作为中断脚,配置为浮空输入
void GPIO_Configuration(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
      
    /* Configure PB8 as input floating */
    GPIO_InitStructure.GPIO_Pin = GPIO_
Pin_8;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOB,&GPIO_InitStructure);
    
}
继续配置NVIC
/**
  * @brief  Configures NVIC and Vector Table base location.
  * @param  None
  * @retval : None
  */
void NVIC_Configuration(void)
{
    NVIC_InitTypeDef NVIC_InitStructure;

    NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);   
    
    /* Configure the NVIC Preemption Priority Bits*/  
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
    /* Set the Vector Table base location at 0x08000000 */ 
    NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
}
然后配置EXTI ,把PB8连接到EXTI
/*******************************************************************************
* Function Name  : EXTI_Configuration
* Description    : 
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void EXTI_Configuration(void)
{
    EXTI_InitTypeDef EXTI_InitStructure;
    /*connect PB8 to EXTI*/
    GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource8);
    /*Config EXTI8*/
    EXTI_InitStructure.EXTI_Line = EXTI_Line8;
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
    EXTI_InitStructure.EXTI_LineCmd = ENABLE;
    EXTI_Init(&EXTI_InitStructure);
    //EXTI_GenerateSWInterrupt(EXTI_Line8);
}
这样就可以中断了,
在中断函数里面记得清除标志位
/**
  * @brief  This function handles EXTI9_5 global interrupt request.
  * @param  None
  * @retval : None
  */
void EXTI9_5_IRQHandler(void)
{
     if(EXTI_GetITStatus(EXTI_Line8)!= RESET)
     {
        EXTI_ClearITPendingBit(EXTI_Line8);
     }
}
 
2010-03-16,17:44:17
资料 邮件 回复 引用回复 编辑 删除
【1楼】 FPGARM
积分:89
派别:
等级:------
来自:广州
太巧了,今天晚上我就打算搞介个,谢谢LZ!
 
2010-03-16,18:15:29
资料 邮件 回复 引用回复 编辑 删除
【2楼】 linfeng286
积分:1086
派别:
等级:------
来自:
mark 一会试试
 
2010-03-16,18:51:59
资料 邮件 回复 引用回复 编辑 删除
【3楼】 Grant
积分:2116
派别:
等级:------
来自:
STM32也还,STM8也好,都是以时钟为驱动的,记得使用STM32的任何外设都要先操作RCC。


STM8默认外设时钟都是打开的,要省电就要记得关外设时钟。
 
2010-03-16,20:51:11
资料 邮件 回复 引用回复 编辑 删除
【4楼】 ddljdd
积分:35
派别:
等级:------
来自:
不错,~~~
 
2010-03-17,11:30:15
资料 邮件 回复 引用回复 编辑 删除
【5楼】 rube 永丰庵
积分:1561
派别:
等级:------
来自:深圳
我试过了,这个很好用。
谢谢楼主
 
2010-05-25,15:20:58
资料 邮件 回复 引用回复 编辑 删除

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多