📄 stm32f10x_gpio.c
字号:
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 + -