野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 18248|回复: 1

GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0)语句不懂求解

[复制链接]
发表于 2015-7-15 15:53:00 | 显示全部楼层 |阅读模式
请问下面这段程序中  GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0)这条语句是干什么用的,为啥会出下在这里,大神求解,麻烦说详细点
  ******************************************************************************
  * @file    bsp_exti.c
  * @author  fire
  * @version V1.0
  * @date    2013-xx-xx
  * @brief   I/OÏßÖD¶Ïó|óÃbsp
  ******************************************************************************
  * @attention
  *
  * êμÑéƽì¨:ò°»e iSO STM32 ¿a·¢°å
  * ÂÛì3    :http://www.firebbs.cn
  * ìÔ±|    :http://firestm32.taobao.com
  *
  ******************************************************************************
  */

#include "bsp_exti.h"

/**
  * @brief  ÅäÖÃǶì×Ïòá¿ÖD¶Ï¿ØÖÆÆ÷NVIC
  * @param  ÎT
  * @retval ÎT
  */
static void NVIC_Configuration(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;

  /* Configure one bit for preemption priority */
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

  /* ÅäÖÃÖD¶ÏÔ′ */
  NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}

/**
  * @brief  ÅäÖà PA0 ÎaÏßÖD¶Ï¿ú£¬2¢éèÖÃÖD¶ÏóÅÏ輶
  * @param  ÎT
  * @retval ÎT
  */
void EXTI_PA0_Config(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        EXTI_InitTypeDef EXTI_InitStructure;

        /* config the extiline clock and AFIO clock */
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO,ENABLE);
                                                                                               
        /* config the NVIC */
        NVIC_Configuration();

        /* EXTI line gpio config*/       
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;      
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;         // éÏà-êäèë
  GPIO_Init(GPIOA, &GPIO_InitStructure);

        /* EXTI line mode config */
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);
  EXTI_InitStructure.EXTI_Line = EXTI_Line0;
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //ϽμÑØÖD¶Ï
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);
}

回复

使用道具 举报

发表于 2015-7-15 17:59:27 | 显示全部楼层
按住F12,查看该函数原型,这个函数的作用是:Selects the GPIO pin used as EXTI Line
翻译过来就是配置IO口为中断线,当IO上出现下降沿和上升沿时,可以产生IO中断。
STM32 每一个 IO 都可以配置为 EXTI LINE 模式。

  1. /**
  2.   * @brief  Selects the GPIO pin used as EXTI Line.
  3.   * @param  GPIO_PortSource: selects the GPIO port to be used as source for EXTI lines.
  4.   *   This parameter can be GPIO_PortSourceGPIOx where x can be (A..G).
  5.   * @param  GPIO_PinSource: specifies the EXTI line to be configured.
  6.   *   This parameter can be GPIO_PinSourcex where x can be (0..15).
  7.   * @retval None
  8.   */
  9. void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource)
  10. {
  11.   uint32_t tmp = 0x00;
  12.   /* Check the parameters */
  13.   assert_param(IS_GPIO_EXTI_PORT_SOURCE(GPIO_PortSource));
  14.   assert_param(IS_GPIO_PIN_SOURCE(GPIO_PinSource));
  15.   
  16.   tmp = ((uint32_t)0x0F) << (0x04 * (GPIO_PinSource & (uint8_t)0x03));
  17.   AFIO->EXTICR[GPIO_PinSource >> 0x02] &= ~tmp;
  18.   AFIO->EXTICR[GPIO_PinSource >> 0x02] |= (((uint32_t)GPIO_PortSource) << (0x04 * (GPIO_PinSource & (uint8_t)0x03)));
  19. }
复制代码

回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-13 15:46 , Processed in 0.034883 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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