⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stm32f10x_gpio.c

📁 中文固件库.rar
💻 C
📖 第 1 页 / 共 2 页
字号:
  return bitstatus;
}

/**
  * @简述  读取指定的GPIO端口输出.
  * @参数  GPIOx: x可为A到G来选择特定的GPIO设备.
  * @返回  指定 GPIO 输出数据端口值.
  */
uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx)
{
  /* Check the parameters */
  assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
    
  return ((uint16_t)GPIOx->ODR);
}

/**
  * @简述  设置指定的数据端口位.
  * @参数  x可为A到G来选择特定的GPIO设备.
  *        GPIO_Pin: 确定端口位.
  *                  该参数可为GPIO_Pin_x的任意组合,其中x为0到15.
  * @返回  没有
  */
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
  /* 检查参数 */
  assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
  assert_param(IS_GPIO_PIN(GPIO_Pin));
  
  GPIOx->BSRR = GPIO_Pin;
}

/**
  * @简述  清除指定的数据端口位.
  * @参数  x可为A到G来选择特定的GPIO设备.
  *        GPIO_Pin: 确定端口位.
  *                  该参数可为GPIO_Pin_x的任意组合,其中x为0到15.
  * @返回  没有
  */
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
  /* 检查参数 */
  assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
  assert_param(IS_GPIO_PIN(GPIO_Pin));
  
  GPIOx->BRR = GPIO_Pin;
}

/**
  * @简述  设置或者清除指定的数据端口位.
  * @参数  GPIOx: x可为A到G来选择特定的GPIO设备.
  *        GPIO_Pin: 指定被写入的端口位.
  *                  该参数可为GPIO_Pin_x的任意组合,其中x为0到15.
  *        BitVal:   该参数指定被写入到选定位.
  *                  BitVal必须为BitAction枚举类型值: 
  *                  @arg Bit_RESET:清除端口引脚,
  *                  @arg Bit_SET:置位端口引脚
  * @返回  没有
  */
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal)
{
  /* 检查参数 */
  assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
  assert_param(IS_GET_GPIO_PIN(GPIO_Pin));
  assert_param(IS_GPIO_BIT_ACTION(BitVal)); 
  
  if (BitVal != Bit_RESET)
  {
    GPIOx->BSRR = GPIO_Pin;
  }
  else
  {
    GPIOx->BRR = GPIO_Pin;
  }
}

/**
  * @简述  向指定GPIO数据端口写入数据.
  * @参数  GPIOx: x可为A到G来选择特定的GPIO设备.
  *        PortVal: 写入到数据端口寄存器的值.
  * @返回  没有
  */
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal)
{
  /* 检查参数 */
  assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
  
  GPIOx->ODR = PortVal;
}

/**
  * @简述  锁定GPIO引脚配置寄存器.
  * @参数  GPIOx: x可为A到G来选择特定的GPIO设备.
  *        GPIO_Pin:指定被写入的端口位.
  *                 该参数可为GPIO_Pin_x的任意组合,其中x为0到15.
  * @返回  没有
  */
void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
  uint32_t tmp = 0x00010000;
  
  /* 检查参数 */
  assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
  assert_param(IS_GPIO_PIN(GPIO_Pin));
  
  tmp |= GPIO_Pin;
  /* Set LCKK bit */
  GPIOx->LCKR = tmp;
  /* Reset LCKK bit */
  GPIOx->LCKR =  GPIO_Pin;
  /* Set LCKK bit */
  GPIOx->LCKR = tmp;
  /* Read LCKK bit*/
  tmp = GPIOx->LCKR;
  /* Read LCKK bit*/
  tmp = GPIOx->LCKR;
}

/**
  * @简述  选择 GPIO 管脚用作事件输出.
  * @参数  GPIO_PortSource: 选择用作事件输出的GPIO端口
  *                         GPIOx:x可为A到E来选择特定的GPIO设备.
  *        GPIO_PinSource: 事件输出的管脚.
  *                        该参数可为GPIO_PinSourcex,这里x可为0到15.
  * @返回  没有
  */
void GPIO_EventOutputConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource)
{
  uint32_t tmpreg = 0x00;
  /* 检查参数 */
  assert_param(IS_GPIO_EVENTOUT_PORT_SOURCE(GPIO_PortSource));
  assert_param(IS_GPIO_PIN_SOURCE(GPIO_PinSource));
    
  tmpreg = AFIO->EVCR;
  /* Clear the PORT[6:4] and PIN[3:0] bits */
  tmpreg &= EVCR_PORTPINCONFIG_MASK;
  tmpreg |= (uint32_t)GPIO_PortSource << 0x04;
  tmpreg |= GPIO_PinSource;
  AFIO->EVCR = tmpreg;
}

/**
  * @简述  使能或者失能事件输出.
  * @参数  NewState: 事件输出的新状态.
  *                  这个参数可以取:ENABLE或者DISABLE.
  * @返回  没有
  */
void GPIO_EventOutputCmd(FunctionalState NewState)
{
  /* 检查参数 */
  assert_param(IS_FUNCTIONAL_STATE(NewState));
  
  *(__IO uint32_t *) EVCR_EVOE_BB = (uint32_t)NewState;
}

/**
  * @简述  改变指定管脚的映射.
  * @参数  GPIO_Remap: 选择重映射的管脚.
  *                    GPIO_Remap 用来改变备用功能映射,它的可用值:
  *     @arg GPIO_Remap_SPI1
  *     @arg GPIO_Remap_I2C1
  *     @arg GPIO_Remap_USART1
  *     @arg GPIO_Remap_USART2
  *     @arg GPIO_PartialRemap_USART3
  *     @arg GPIO_FullRemap_USART3
  *     @arg GPIO_PartialRemap_TIM1
  *     @arg GPIO_FullRemap_TIM1
  *     @arg GPIO_PartialRemap1_TIM2
  *     @arg GPIO_PartialRemap2_TIM2
  *     @arg GPIO_FullRemap_TIM2
  *     @arg GPIO_PartialRemap_TIM3
  *     @arg GPIO_FullRemap_TIM3
  *     @arg GPIO_Remap_TIM4
  *     @arg GPIO_Remap1_CAN1
  *     @arg GPIO_Remap2_CAN1
  *     @arg GPIO_Remap_PD01
  *     @arg GPIO_Remap_TIM5CH4_LSI
  *     @arg GPIO_Remap_ADC1_ETRGINJ
  *     @arg GPIO_Remap_ADC1_ETRGREG
  *     @arg GPIO_Remap_ADC2_ETRGINJ
  *     @arg GPIO_Remap_ADC2_ETRGREG
  *     @arg GPIO_Remap_ETH
  *     @arg GPIO_Remap_CAN2  
  *     @arg GPIO_Remap_SWJ_NoJTRST
  *     @arg GPIO_Remap_SWJ_JTAGDisable
  *     @arg GPIO_Remap_SWJ_Disable
  *     @arg GPIO_Remap_SPI3
  *     @arg GPIO_Remap_TIM2ITR1_PTP_SOF
  *     @arg GPIO_Remap_PTP_PPS  
  * @注解  如果 GPIO_Remap_TIM2ITR1_PTP_SOF 被激活  TIM2 ITR1 连接到以太网 PTP 输出
  *        当复位的时候 TIM2 ITR1 连接到 USB OTG SOF 输出.       
  * @参数  NewState: 端口引脚重映射的新状态.
  *                  该参数可为:ENABLE或DISABLE.
  * @返回  没有
  */
void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState)
{
  uint32_t tmp = 0x00, tmp1 = 0x00, tmpreg = 0x00, tmpmask = 0x00;

  /* 检查参数 */
  assert_param(IS_GPIO_REMAP(GPIO_Remap));
  assert_param(IS_FUNCTIONAL_STATE(NewState));  
  
  tmpreg = AFIO->MAPR;

  tmpmask = (GPIO_Remap & DBGAFR_POSITION_MASK) >> 0x10;
  tmp = GPIO_Remap & LSB_MASK;

  if ((GPIO_Remap & (DBGAFR_LOCATION_MASK | DBGAFR_NUMBITS_MASK)) == (DBGAFR_LOCATION_MASK | DBGAFR_NUMBITS_MASK))
  {
    tmpreg &= DBGAFR_SWJCFG_MASK;
    AFIO->MAPR &= DBGAFR_SWJCFG_MASK;
  }
  else if ((GPIO_Remap & DBGAFR_NUMBITS_MASK) == DBGAFR_NUMBITS_MASK)
  {
    tmp1 = ((uint32_t)0x03) << tmpmask;
    tmpreg &= ~tmp1;
    tmpreg |= ~DBGAFR_SWJCFG_MASK;
  }
  else
  {
    tmpreg &= ~(tmp << ((GPIO_Remap >> 0x15)*0x10));
    tmpreg |= ~DBGAFR_SWJCFG_MASK;
  }

  if (NewState != DISABLE)
  {
    tmpreg |= (tmp << ((GPIO_Remap >> 0x15)*0x10));
  }

  AFIO->MAPR = tmpreg;
}

/**
  * @简述  选择GPIO引脚作为 EXTI 线.
  * @参数  GPIO_PortSource: 选择将要用作 EXTI 线的源的 GPIO 口.
  *                         GPIOx:x可为A到G来选择特定的GPIO设备.
  *        GPIO_PinSource:  指定需要配置的EXTI线.
  *                         这个参数可以是GPIO_PinSourcex,其中x为0到15.
  * @返回  没有
  */
void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource)
{
  uint32_t tmp = 0x00;
  /* 检查参数 */
  assert_param(IS_GPIO_EXTI_PORT_SOURCE(GPIO_PortSource));
  assert_param(IS_GPIO_PIN_SOURCE(GPIO_PinSource));
  
  tmp = ((uint32_t)0x0F) << (0x04 * (GPIO_PinSource & (uint8_t)0x03));
  AFIO->EXTICR[GPIO_PinSource >> 0x02] &= ~tmp;
  AFIO->EXTICR[GPIO_PinSource >> 0x02] |= (((uint32_t)GPIO_PortSource) << (0x04 * (GPIO_PinSource & (uint8_t)0x03)));
}

/**
  * @简述  指定以太网接口.
  * @注解  此功能仅适用于STM32连接线配置.  
  * @参数  GPIO_ETH_MediaInterface: 指定接口模式.
  *                                 这个参数可以选择:
  *                                 GPIO_ETH_MediaInterface_MII: MII mode    ->独立接口
  *                                 GPIO_ETH_MediaInterface_RMII: RMII mode  ->精简独立接口  
  * @返回  没有
  */
void GPIO_ETH_MediaInterfaceConfig(uint32_t GPIO_ETH_MediaInterface) 
{ 
  assert_param(IS_GPIO_ETH_MEDIA_INTERFACE(GPIO_ETH_MediaInterface)); 

  /* 配置 MII_RMII 选择位 */ 
  *(__IO uint32_t *) MAPR_MII_RMII_SEL_BB = GPIO_ETH_MediaInterface; 
}
  
/**
  * @}
  */

/**
  * @}
  */

/**
  * @}
  */

/******************* (C) COPYRIGHT 2009 STMicroelectronics *****END OF FILE****/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -