stm32f10x_gpio.c
上传用户:yj_qqy
上传日期:2017-01-28
资源大小:2911k
文件大小:22k
源码类别:

uCOS

开发平台:

C/C++

  1. /******************** (C) COPYRIGHT 2008 STMicroelectronics ********************
  2. * File Name          : stm32f10x_gpio.c
  3. * Author             : MCD Application Team
  4. * Version            : V2.0.2
  5. * Date               : 07/11/2008
  6. * Description        : This file provides all the GPIO firmware functions.
  7. ********************************************************************************
  8. * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  9. * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
  10. * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
  11. * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
  12. * CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
  13. * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  14. *******************************************************************************/
  15. /* Includes ------------------------------------------------------------------*/
  16. #include "stm32f10x_gpio.h"
  17. #include "stm32f10x_rcc.h"
  18. /* Private typedef -----------------------------------------------------------*/
  19. /* Private define ------------------------------------------------------------*/
  20. /* ------------ RCC registers bit address in the alias region ----------- */
  21. #define AFIO_OFFSET                 (AFIO_BASE - PERIPH_BASE)
  22. /* --- EVENTCR Register ---*/
  23. /* Alias word address of EVOE bit */
  24. #define EVCR_OFFSET                 (AFIO_OFFSET + 0x00)
  25. #define EVOE_BitNumber              ((u8)0x07)
  26. #define EVCR_EVOE_BB                (PERIPH_BB_BASE + (EVCR_OFFSET * 32) + (EVOE_BitNumber * 4))
  27. #define EVCR_PORTPINCONFIG_MASK     ((u16)0xFF80)
  28. #define LSB_MASK                    ((u16)0xFFFF)
  29. #define DBGAFR_POSITION_MASK        ((u32)0x000F0000)
  30. #define DBGAFR_SWJCFG_MASK          ((u32)0xF0FFFFFF)
  31. #define DBGAFR_LOCATION_MASK        ((u32)0x00200000)
  32. #define DBGAFR_NUMBITS_MASK         ((u32)0x00100000)
  33. /* Private macro -------------------------------------------------------------*/
  34. /* Private variables ---------------------------------------------------------*/
  35. /* Private function prototypes -----------------------------------------------*/
  36. /* Private functions ---------------------------------------------------------*/
  37. /*******************************************************************************
  38. * Function Name  : GPIO_DeInit
  39. * Description    : Deinitializes the GPIOx peripheral registers to their default
  40. *                  reset values.
  41. * Input          : - GPIOx: where x can be (A..G) to select the GPIO peripheral.
  42. * Output         : None
  43. * Return         : None
  44. *******************************************************************************/
  45. void GPIO_DeInit(GPIO_TypeDef* GPIOx)
  46. {
  47.   /* Check the parameters */
  48.   assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
  49.   
  50.   switch (*(u32*)&GPIOx)
  51.   {
  52.     case GPIOA_BASE:
  53.       RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOA, ENABLE);
  54.       RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOA, DISABLE);
  55.       break;
  56.     case GPIOB_BASE:
  57.       RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOB, ENABLE);
  58.       RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOB, DISABLE);
  59.       break;
  60.     case GPIOC_BASE:
  61.       RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOC, ENABLE);
  62.       RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOC, DISABLE);
  63.       break;
  64.     case GPIOD_BASE:
  65.       RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOD, ENABLE);
  66.       RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOD, DISABLE);
  67.       break;
  68.       
  69.     case GPIOE_BASE:
  70.       RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOE, ENABLE);
  71.       RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOE, DISABLE);
  72.       break; 
  73.     case GPIOF_BASE:
  74.       RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOF, ENABLE);
  75.       RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOF, DISABLE);
  76.       break;
  77.     case GPIOG_BASE:
  78.       RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOG, ENABLE);
  79.       RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOG, DISABLE);
  80.       break;                       
  81.     default:
  82.       break;
  83.   }
  84. }
  85. /*******************************************************************************
  86. * Function Name  : GPIO_AFIODeInit
  87. * Description    : Deinitializes the Alternate Functions (remap, event control
  88. *                  and EXTI configuration) registers to their default reset
  89. *                  values.
  90. * Input          : None
  91. * Output         : None
  92. * Return         : None
  93. *******************************************************************************/
  94. void GPIO_AFIODeInit(void)
  95. {
  96.   RCC_APB2PeriphResetCmd(RCC_APB2Periph_AFIO, ENABLE);
  97.   RCC_APB2PeriphResetCmd(RCC_APB2Periph_AFIO, DISABLE);
  98. }
  99. /*******************************************************************************
  100. * Function Name  : GPIO_Init
  101. * Description    : Initializes the GPIOx peripheral according to the specified
  102. *                  parameters in the GPIO_InitStruct.
  103. * Input          : - GPIOx: where x can be (A..G) to select the GPIO peripheral.
  104. *                  - GPIO_InitStruct: pointer to a GPIO_InitTypeDef structure that
  105. *                    contains the configuration information for the specified GPIO
  106. *                    peripheral.
  107. * Output         : None
  108. * Return         : None
  109. *******************************************************************************/
  110. void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
  111. {
  112.   u32 currentmode = 0x00, currentpin = 0x00, pinpos = 0x00, pos = 0x00;
  113.   u32 tmpreg = 0x00, pinmask = 0x00;
  114.   /* Check the parameters */
  115.   assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
  116.   assert_param(IS_GPIO_MODE(GPIO_InitStruct->GPIO_Mode));
  117.   assert_param(IS_GPIO_PIN(GPIO_InitStruct->GPIO_Pin));  
  118.   
  119. /*---------------------------- GPIO Mode Configuration -----------------------*/
  120.   currentmode = ((u32)GPIO_InitStruct->GPIO_Mode) & ((u32)0x0F);
  121.   if ((((u32)GPIO_InitStruct->GPIO_Mode) & ((u32)0x10)) != 0x00)
  122.   { 
  123.     /* Check the parameters */
  124.     assert_param(IS_GPIO_SPEED(GPIO_InitStruct->GPIO_Speed));
  125.     /* Output mode */
  126.     currentmode |= (u32)GPIO_InitStruct->GPIO_Speed;
  127.   }
  128. /*---------------------------- GPIO CRL Configuration ------------------------*/
  129.   /* Configure the eight low port pins */
  130.   if (((u32)GPIO_InitStruct->GPIO_Pin & ((u32)0x00FF)) != 0x00)
  131.   {
  132.     tmpreg = GPIOx->CRL;
  133.     for (pinpos = 0x00; pinpos < 0x08; pinpos++)
  134.     {
  135.       pos = ((u32)0x01) << pinpos;
  136.       /* Get the port pins position */
  137.       currentpin = (GPIO_InitStruct->GPIO_Pin) & pos;
  138.       if (currentpin == pos)
  139.       {
  140.         pos = pinpos << 2;
  141.         /* Clear the corresponding low control register bits */
  142.         pinmask = ((u32)0x0F) << pos;
  143.         tmpreg &= ~pinmask;
  144.         /* Write the mode configuration in the corresponding bits */
  145.         tmpreg |= (currentmode << pos);
  146.         /* Reset the corresponding ODR bit */
  147.         if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPD)
  148.         {
  149.           GPIOx->BRR = (((u32)0x01) << pinpos);
  150.         }
  151.         else
  152.         {
  153.           /* Set the corresponding ODR bit */
  154.           if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPU)
  155.           {
  156.             GPIOx->BSRR = (((u32)0x01) << pinpos);
  157.           }
  158.         }
  159.       }
  160.     }
  161.     GPIOx->CRL = tmpreg;
  162.   }
  163. /*---------------------------- GPIO CRH Configuration ------------------------*/
  164.   /* Configure the eight high port pins */
  165.   if (GPIO_InitStruct->GPIO_Pin > 0x00FF)
  166.   {
  167.     tmpreg = GPIOx->CRH;
  168.     for (pinpos = 0x00; pinpos < 0x08; pinpos++)
  169.     {
  170.       pos = (((u32)0x01) << (pinpos + 0x08));
  171.       /* Get the port pins position */
  172.       currentpin = ((GPIO_InitStruct->GPIO_Pin) & pos);
  173.       if (currentpin == pos)
  174.       {
  175.         pos = pinpos << 2;
  176.         /* Clear the corresponding high control register bits */
  177.         pinmask = ((u32)0x0F) << pos;
  178.         tmpreg &= ~pinmask;
  179.         /* Write the mode configuration in the corresponding bits */
  180.         tmpreg |= (currentmode << pos);
  181.         /* Reset the corresponding ODR bit */
  182.         if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPD)
  183.         {
  184.           GPIOx->BRR = (((u32)0x01) << (pinpos + 0x08));
  185.         }
  186.         /* Set the corresponding ODR bit */
  187.         if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPU)
  188.         {
  189.           GPIOx->BSRR = (((u32)0x01) << (pinpos + 0x08));
  190.         }
  191.       }
  192.     }
  193.     GPIOx->CRH = tmpreg;
  194.   }
  195. }
  196. /*******************************************************************************
  197. * Function Name  : GPIO_StructInit
  198. * Description    : Fills each GPIO_InitStruct member with its default value.
  199. * Input          : - GPIO_InitStruct : pointer to a GPIO_InitTypeDef structure
  200. *                    which will be initialized.
  201. * Output         : None
  202. * Return         : None
  203. *******************************************************************************/
  204. void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct)
  205. {
  206.   /* Reset GPIO init structure parameters values */
  207.   GPIO_InitStruct->GPIO_Pin  = GPIO_Pin_All;
  208.   GPIO_InitStruct->GPIO_Speed = GPIO_Speed_2MHz;
  209.   GPIO_InitStruct->GPIO_Mode = GPIO_Mode_IN_FLOATING;
  210. }
  211. /*******************************************************************************
  212. * Function Name  : GPIO_ReadInputDataBit
  213. * Description    : Reads the specified input port pin.
  214. * Input          : - GPIOx: where x can be (A..G) to select the GPIO peripheral.
  215. *                : - GPIO_Pin:  specifies the port bit to read.
  216. *                    This parameter can be GPIO_Pin_x where x can be (0..15).
  217. * Output         : None
  218. * Return         : The input port pin value.
  219. *******************************************************************************/
  220. u8 GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, u16 GPIO_Pin)
  221. {
  222.   u8 bitstatus = 0x00;
  223.   
  224.   /* Check the parameters */
  225.   assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
  226.   assert_param(IS_GET_GPIO_PIN(GPIO_Pin)); 
  227.   
  228.   if ((GPIOx->IDR & GPIO_Pin) != (u32)Bit_RESET)
  229.   {
  230.     bitstatus = (u8)Bit_SET;
  231.   }
  232.   else
  233.   {
  234.     bitstatus = (u8)Bit_RESET;
  235.   }
  236.   return bitstatus;
  237. }
  238. /*******************************************************************************
  239. * Function Name  : GPIO_ReadInputData
  240. * Description    : Reads the specified GPIO input data port.
  241. * Input          : - GPIOx: where x can be (A..G) to select the GPIO peripheral.
  242. * Output         : None
  243. * Return         : GPIO input data port value.
  244. *******************************************************************************/
  245. u16 GPIO_ReadInputData(GPIO_TypeDef* GPIOx)
  246. {
  247.   /* Check the parameters */
  248.   assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
  249.   
  250.   return ((u16)GPIOx->IDR);
  251. }
  252. /*******************************************************************************
  253. * Function Name  : GPIO_ReadOutputDataBit
  254. * Description    : Reads the specified output data port bit.
  255. * Input          : - GPIOx: where x can be (A..G) to select the GPIO peripheral.
  256. *                : - GPIO_Pin:  specifies the port bit to read.
  257. *                    This parameter can be GPIO_Pin_x where x can be (0..15).
  258. * Output         : None
  259. * Return         : The output port pin value.
  260. *******************************************************************************/
  261. u8 GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, u16 GPIO_Pin)
  262. {
  263.   u8 bitstatus = 0x00;
  264.   /* Check the parameters */
  265.   assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
  266.   assert_param(IS_GET_GPIO_PIN(GPIO_Pin)); 
  267.   
  268.   if ((GPIOx->ODR & GPIO_Pin) != (u32)Bit_RESET)
  269.   {
  270.     bitstatus = (u8)Bit_SET;
  271.   }
  272.   else
  273.   {
  274.     bitstatus = (u8)Bit_RESET;
  275.   }
  276.   return bitstatus;
  277. }
  278. /*******************************************************************************
  279. * Function Name  : GPIO_ReadOutputData
  280. * Description    : Reads the specified GPIO output data port.
  281. * Input          : - GPIOx: where x can be (A..G) to select the GPIO peripheral.
  282. * Output         : None
  283. * Return         : GPIO output data port value.
  284. *******************************************************************************/
  285. u16 GPIO_ReadOutputData(GPIO_TypeDef* GPIOx)
  286. {
  287.   /* Check the parameters */
  288.   assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
  289.     
  290.   return ((u16)GPIOx->ODR);
  291. }
  292. /*******************************************************************************
  293. * Function Name  : GPIO_SetBits
  294. * Description    : Sets the selected data port bits.
  295. * Input          : - GPIOx: where x can be (A..G) to select the GPIO peripheral.
  296. *                  - GPIO_Pin: specifies the port bits to be written.
  297. *                    This parameter can be any combination of GPIO_Pin_x where 
  298. *                    x can be (0..15).
  299. * Output         : None
  300. * Return         : None
  301. *******************************************************************************/
  302. void GPIO_SetBits(GPIO_TypeDef* GPIOx, u16 GPIO_Pin)
  303. {
  304.   /* Check the parameters */
  305.   assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
  306.   assert_param(IS_GPIO_PIN(GPIO_Pin));
  307.   
  308.   GPIOx->BSRR = GPIO_Pin;
  309. }
  310. /*******************************************************************************
  311. * Function Name  : GPIO_ResetBits
  312. * Description    : Clears the selected data port bits.
  313. * Input          : - GPIOx: where x can be (A..G) to select the GPIO peripheral.
  314. *                  - GPIO_Pin: specifies the port bits to be written.
  315. *                    This parameter can be any combination of GPIO_Pin_x where 
  316. *                    x can be (0..15).
  317. * Output         : None
  318. * Return         : None
  319. *******************************************************************************/
  320. void GPIO_ResetBits(GPIO_TypeDef* GPIOx, u16 GPIO_Pin)
  321. {
  322.   /* Check the parameters */
  323.   assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
  324.   assert_param(IS_GPIO_PIN(GPIO_Pin));
  325.   
  326.   GPIOx->BRR = GPIO_Pin;
  327. }
  328. /*******************************************************************************
  329. * Function Name  : GPIO_WriteBit
  330. * Description    : Sets or clears the selected data port bit.
  331. * Input          : - GPIOx: where x can be (A..G) to select the GPIO peripheral.
  332. *                  - GPIO_Pin: specifies the port bit to be written.
  333. *                    This parameter can be one of GPIO_Pin_x where x can be (0..15).
  334. *                  - BitVal: specifies the value to be written to the selected bit.
  335. *                    This parameter can be one of the BitAction enum values:
  336. *                       - Bit_RESET: to clear the port pin
  337. *                       - Bit_SET: to set the port pin
  338. * Output         : None
  339. * Return         : None
  340. *******************************************************************************/
  341. void GPIO_WriteBit(GPIO_TypeDef* GPIOx, u16 GPIO_Pin, BitAction BitVal)
  342. {
  343.   /* Check the parameters */
  344.   assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
  345.   assert_param(IS_GET_GPIO_PIN(GPIO_Pin));
  346.   assert_param(IS_GPIO_BIT_ACTION(BitVal)); 
  347.   
  348.   if (BitVal != Bit_RESET)
  349.   {
  350.     GPIOx->BSRR = GPIO_Pin;
  351.   }
  352.   else
  353.   {
  354.     GPIOx->BRR = GPIO_Pin;
  355.   }
  356. }
  357. /*******************************************************************************
  358. * Function Name  : GPIO_Write
  359. * Description    : Writes data to the specified GPIO data port.
  360. * Input          : - GPIOx: where x can be (A..G) to select the GPIO peripheral.
  361. *                  - PortVal: specifies the value to be written to the port output
  362. *                    data register.
  363. * Output         : None
  364. * Return         : None
  365. *******************************************************************************/
  366. void GPIO_Write(GPIO_TypeDef* GPIOx, u16 PortVal)
  367. {
  368.   /* Check the parameters */
  369.   assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
  370.   
  371.   GPIOx->ODR = PortVal;
  372. }
  373. /*******************************************************************************
  374. * Function Name  : GPIO_PinLockConfig
  375. * Description    : Locks GPIO Pins configuration registers.
  376. * Input          : - GPIOx: where x can be (A..G) to select the GPIO peripheral.
  377. *                  - GPIO_Pin: specifies the port bit to be written.
  378. *                    This parameter can be any combination of GPIO_Pin_x where 
  379. *                    x can be (0..15).
  380. * Output         : None
  381. * Return         : None
  382. *******************************************************************************/
  383. void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, u16 GPIO_Pin)
  384. {
  385.   u32 tmp = 0x00010000;
  386.   
  387.   /* Check the parameters */
  388.   assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
  389.   assert_param(IS_GPIO_PIN(GPIO_Pin));
  390.   
  391.   tmp |= GPIO_Pin;
  392.   /* Set LCKK bit */
  393.   GPIOx->LCKR = tmp;
  394.   /* Reset LCKK bit */
  395.   GPIOx->LCKR =  GPIO_Pin;
  396.   /* Set LCKK bit */
  397.   GPIOx->LCKR = tmp;
  398.   /* Read LCKK bit*/
  399.   tmp = GPIOx->LCKR;
  400.   /* Read LCKK bit*/
  401.   tmp = GPIOx->LCKR;
  402. }
  403. /*******************************************************************************
  404. * Function Name  : GPIO_EventOutputConfig
  405. * Description    : Selects the GPIO pin used as Event output.
  406. * Input          : - GPIO_PortSource: selects the GPIO port to be used as source
  407. *                    for Event output.
  408. *                    This parameter can be GPIO_PortSourceGPIOx where x can be
  409. *                    (A..E).
  410. *                  - GPIO_PinSource: specifies the pin for the Event output.
  411. *                    This parameter can be GPIO_PinSourcex where x can be (0..15).
  412. * Output         : None
  413. * Return         : None
  414. *******************************************************************************/
  415. void GPIO_EventOutputConfig(u8 GPIO_PortSource, u8 GPIO_PinSource)
  416. {
  417.   u32 tmpreg = 0x00;
  418.   /* Check the parameters */
  419.   assert_param(IS_GPIO_EVENTOUT_PORT_SOURCE(GPIO_PortSource));
  420.   assert_param(IS_GPIO_PIN_SOURCE(GPIO_PinSource));
  421.     
  422.   tmpreg = AFIO->EVCR;
  423.   /* Clear the PORT[6:4] and PIN[3:0] bits */
  424.   tmpreg &= EVCR_PORTPINCONFIG_MASK;
  425.   tmpreg |= (u32)GPIO_PortSource << 0x04;
  426.   tmpreg |= GPIO_PinSource;
  427.   AFIO->EVCR = tmpreg;
  428. }
  429. /*******************************************************************************
  430. * Function Name  : GPIO_EventOutputCmd
  431. * Description    : Enables or disables the Event Output.
  432. * Input          : - NewState: new state of the Event output.
  433. *                    This parameter can be: ENABLE or DISABLE.
  434. * Output         : None
  435. * Return         : None
  436. *******************************************************************************/
  437. void GPIO_EventOutputCmd(FunctionalState NewState)
  438. {
  439.   /* Check the parameters */
  440.   assert_param(IS_FUNCTIONAL_STATE(NewState));
  441.   
  442.   *(vu32 *) EVCR_EVOE_BB = (u32)NewState;
  443. }
  444. /*******************************************************************************
  445. * Function Name  : GPIO_PinRemapConfig
  446. * Description    : Changes the mapping of the specified pin.
  447. * Input          : - GPIO_Remap: selects the pin to remap.
  448. *                    This parameter can be one of the following values:
  449. *                       - GPIO_Remap_SPI1
  450. *                       - GPIO_Remap_I2C1
  451. *                       - GPIO_Remap_USART1
  452. *                       - GPIO_Remap_USART2
  453. *                       - GPIO_PartialRemap_USART3
  454. *                       - GPIO_FullRemap_USART3
  455. *                       - GPIO_PartialRemap_TIM1
  456. *                       - GPIO_FullRemap_TIM1
  457. *                       - GPIO_PartialRemap1_TIM2
  458. *                       - GPIO_PartialRemap2_TIM2
  459. *                       - GPIO_FullRemap_TIM2
  460. *                       - GPIO_PartialRemap_TIM3
  461. *                       - GPIO_FullRemap_TIM3
  462. *                       - GPIO_Remap_TIM4
  463. *                       - GPIO_Remap1_CAN
  464. *                       - GPIO_Remap2_CAN
  465. *                       - GPIO_Remap_PD01
  466. *                       - GPIO_Remap_TIM5CH4_LSI
  467. *                       - GPIO_Remap_ADC1_ETRGINJ
  468. *                       - GPIO_Remap_ADC1_ETRGREG
  469. *                       - GPIO_Remap_ADC2_ETRGINJ
  470. *                       - GPIO_Remap_ADC2_ETRGREG
  471. *                       - GPIO_Remap_SWJ_NoJTRST
  472. *                       - GPIO_Remap_SWJ_JTAGDisable
  473. *                       - GPIO_Remap_SWJ_Disable
  474. *                  - NewState: new state of the port pin remapping.
  475. *                    This parameter can be: ENABLE or DISABLE.
  476. * Output         : None
  477. * Return         : None
  478. *******************************************************************************/
  479. void GPIO_PinRemapConfig(u32 GPIO_Remap, FunctionalState NewState)
  480. {
  481.   u32 tmp = 0x00, tmp1 = 0x00, tmpreg = 0x00, tmpmask = 0x00;
  482.   /* Check the parameters */
  483.   assert_param(IS_GPIO_REMAP(GPIO_Remap));
  484.   assert_param(IS_FUNCTIONAL_STATE(NewState));  
  485.   
  486.   tmpreg = AFIO->MAPR;
  487.   tmpmask = (GPIO_Remap & DBGAFR_POSITION_MASK) >> 0x10;
  488.   tmp = GPIO_Remap & LSB_MASK;
  489.   if ((GPIO_Remap & (DBGAFR_LOCATION_MASK | DBGAFR_NUMBITS_MASK)) == (DBGAFR_LOCATION_MASK | DBGAFR_NUMBITS_MASK))
  490.   {
  491.     tmpreg &= DBGAFR_SWJCFG_MASK;
  492.     AFIO->MAPR &= DBGAFR_SWJCFG_MASK;
  493.   }
  494.   else if ((GPIO_Remap & DBGAFR_NUMBITS_MASK) == DBGAFR_NUMBITS_MASK)
  495.   {
  496.     tmp1 = ((u32)0x03) << tmpmask;
  497.     tmpreg &= ~tmp1;
  498.     tmpreg |= ~DBGAFR_SWJCFG_MASK;
  499.   }
  500.   else
  501.   {
  502.     tmpreg &= ~(tmp << ((GPIO_Remap >> 0x15)*0x10));
  503.     tmpreg |= ~DBGAFR_SWJCFG_MASK;
  504.   }
  505.   if (NewState != DISABLE)
  506.   {
  507.     tmpreg |= (tmp << ((GPIO_Remap >> 0x15)*0x10));
  508.   }
  509.   AFIO->MAPR = tmpreg;
  510. }
  511. /*******************************************************************************
  512. * Function Name  : GPIO_EXTILineConfig
  513. * Description    : Selects the GPIO pin used as EXTI Line.
  514. * Input          : - GPIO_PortSource: selects the GPIO port to be used as
  515. *                    source for EXTI lines.
  516. *                    This parameter can be GPIO_PortSourceGPIOx where x can be
  517. *                    (A..G).
  518. *                  - GPIO_PinSource: specifies the EXTI line to be configured.
  519. *                   This parameter can be GPIO_PinSourcex where x can be (0..15).
  520. * Output         : None
  521. * Return         : None
  522. *******************************************************************************/
  523. void GPIO_EXTILineConfig(u8 GPIO_PortSource, u8 GPIO_PinSource)
  524. {
  525.   u32 tmp = 0x00;
  526.   /* Check the parameters */
  527.   assert_param(IS_GPIO_EXTI_PORT_SOURCE(GPIO_PortSource));
  528.   assert_param(IS_GPIO_PIN_SOURCE(GPIO_PinSource));
  529.   
  530.   tmp = ((u32)0x0F) << (0x04 * (GPIO_PinSource & (u8)0x03));
  531.   AFIO->EXTICR[GPIO_PinSource >> 0x02] &= ~tmp;
  532.   AFIO->EXTICR[GPIO_PinSource >> 0x02] |= (((u32)GPIO_PortSource) << (0x04 * (GPIO_PinSource & (u8)0x03)));
  533. }
  534. /******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/