📄 stm32f10x_gpio.c
字号:
u8 GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, u16 GPIO_Pin)
{
u8 bitstatus = 0x00;
/* Check the parameters [检查参数]*/
assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
assert_param(IS_GET_GPIO_PIN(GPIO_Pin));
if ((GPIOx->ODR & GPIO_Pin) != (u32)Bit_RESET)
{
bitstatus = (u8)Bit_SET;
}
else
{
bitstatus = (u8)Bit_RESET;
}
return bitstatus;
}
/*******************************************************************************
* 函数名称: GPIO_ReadOutputData
* 功能描述: 从特定的GPIO输出数据端口读取数据.
* 输入参数: GPIOx:x可为A到G来选择特定的GPIO设备.
* 输出参数: 无
* 返回参数: GPIO输出数据端口值.
*******************************************************************************/
u16 GPIO_ReadOutputData(GPIO_TypeDef* GPIOx)
{
/* Check the parameters [检查参数]*/
assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
return ((u16)GPIOx->ODR);
}
/*******************************************************************************
* 函数名称: GPIO_SetBits
* 功能描述: 置位选定的数据端口位.
* 输入参数: (1)GPIOx:x可为A到G来选择特定的GPIO设备.
* (2)GPIO_Pin:确定要写入的端口位。该参数可为GPIO_Pin_x的任意组合,其中x为0到15。
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void GPIO_SetBits(GPIO_TypeDef* GPIOx, u16 GPIO_Pin)
{
/* Check the parameters [检查参数]*/
assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
assert_param(IS_GPIO_PIN(GPIO_Pin));
GPIOx->BSRR = GPIO_Pin;
}
/*******************************************************************************
* 函数名称: GPIO_ResetBits
* 功能描述: 清除选定的数据端口位.
* 输入参数: (1)GPIOx:x可为A到G来选择特定的GPIO设备.
* (2)GPIO_Pin:指定被写入的端口位。该参数可为GPIO_Pin_x的任意组合,其中x为0到15。
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, u16 GPIO_Pin)
{
/* Check the parameters [检查参数]*/
assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
assert_param(IS_GPIO_PIN(GPIO_Pin));
GPIOx->BRR = GPIO_Pin;
}
/*******************************************************************************
* 函数名称: GPIO_WriteBit
* 功能描述: 置位或清除选定的数据端口位
* 输入参数: (1)GPIOx:x可为A到G来选择特定的GPIO设备.
* (2)GPIO_Pin:指定被写入的端口位。该参数可为GPIO_Pin_x的任意组合,其中x为0到15。
* (3)BitVal:该参数指定被写入到选定位的值。
* BitVal必须为BitAction枚举类型值: Bit_RESET:清除端口引脚,Bit_SET:置位端口引脚
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, u16 GPIO_Pin, BitAction BitVal)
{
/* Check the parameters [检查参数]*/
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_Write
* 功能描述: 写数据到指定的GPIO端口数据寄存器.
* 输入参数: (1)GPIOx:x可为A到G来选择特定的GPIO设备.
* (2)PortVal:写入到数据端口寄存器的值.
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void GPIO_Write(GPIO_TypeDef* GPIOx, u16 PortVal)
{
/* Check the parameters [检查参数]*/
assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
GPIOx->ODR = PortVal;
}
/*******************************************************************************
* 函数名称: GPIO_PinLockConfig
* 功能描述: 锁定GPIO引脚配置寄存器.
* 输入参数: (1)GPIOx:x可为A到G来选择特定的GPIO设备.
* (2)GPIO_Pin:指定被写入的端口位。该参数可为GPIO_Pin_x的任意组合,其中x为0到15.
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, u16 GPIO_Pin)
{
u32 tmp = 0x00010000;
/* Check the parameters [检查参数]*/
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_EventOutputConfig
* 功能描述: Selects the GPIO pin used as Event output.
* 输入参数: (1)GPIO_PortSource:选择GPIO端口用作事件输出源。GPIOx:x可为A到E来选择特定的GPIO设备.
* (2)GPIO_PinSource:事件输出引脚。该参数可为GPIO_PinSourcex,这里x可为0到15.
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void GPIO_EventOutputConfig(u8 GPIO_PortSource, u8 GPIO_PinSource)
{
u32 tmpreg = 0x00;
/* Check the parameters [检查参数]*/
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 [清除PORT[6:4] 和 PIN[3:0]位]*/
tmpreg &= EVCR_PORTPINCONFIG_MASK;
tmpreg |= (u32)GPIO_PortSource << 0x04;
tmpreg |= GPIO_PinSource;
AFIO->EVCR = tmpreg;
}
/*******************************************************************************
* 函数名称: GPIO_EventOutputCmd
* 功能描述: 使能(或禁能)事件输出
* 输入参数: NewState:事件输出的新状态。这个参数可为:ENABLE或DISABLE.
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void GPIO_EventOutputCmd(FunctionalState NewState)
{
/* Check the parameters [检查参数]*/
assert_param(IS_FUNCTIONAL_STATE(NewState));
*(vu32 *) EVCR_EVOE_BB = (u32)NewState;
}
/*******************************************************************************
* 函数名称: GPIO_PinRemapConfig
* 功能描述: 改变特定引脚的映射.
* 输入参数: (1)GPIO_Remap:选择引脚进行重映射。
* GPIO_Remap 用来改变备用功能映射,它的可用值:
* - GPIO_Remap_SPI1 [SPI1备用功能映射]
* - GPIO_Remap_I2C1 [I2C1备用功能映射]
* - GPIO_Remap_USART1 [USART1备用功能映射]
* - GPIO_Remap_USART2 [USART2备用功能映射]
* - GPIO_PartialRemap_USART3 [USART3备用功能映射]
* - GPIO_FullRemap_USART3 [USART3全部备用功能映射]
* - GPIO_PartialRemap_TIM1 [TIM1部分备用功能映射]
* - GPIO_FullRemap_TIM1 [TIM1全部备用功能映射]
* - GPIO_PartialRemap1_TIM2 [TIM2部分1备用功能映射]
* - GPIO_PartialRemap2_TIM2 [TIM2部分2备用功能映射]
* - GPIO_FullRemap_TIM2 [TIM2全部备用功能映射]
* - GPIO_PartialRemap_TIM3 [TIM3部分备用功能映射]
* - GPIO_FullRemap_TIM3 [TIM3全部备用功能映射]
* - GPIO_Remap_TIM4 [TIM4备用功能映射]
* - GPIO_Remap1_CAN [CAN部分1备用功能映射]
* - GPIO_Remap2_CAN [CAN部分2备用功能映射]
* - GPIO_Remap_PD01 [PD01备用功能映射]
* - GPIO_Remap_TIM5CH4_LSI [TIM5CH4_LSI备用功能映射]
* - GPIO_Remap_ADC1_ETRGINJ [ADC1_ETRGINJ备用功能映射]
* - GPIO_Remap_ADC1_ETRGREG [ADC1_ETRGREG备用功能映射]
* - GPIO_Remap_ADC2_ETRGINJ [ADC2_ETRGINJ备用功能映射]
* - GPIO_Remap_ADC2_ETRGREG [ADC2_ETRGREG备用功能映射]
* - GPIO_Remap_SWJ_NoJTRST [全部SWJ使能(JTAG-DP+ SW-DP)但不包括JTRST]
* - GPIO_Remap_SWJ_JTAGDisable [JTAG-DP禁能但SW-DP使能]
* - GPIO_Remap_SWJ_Disable [全部SWJ禁能(JTAG-DP SW-DP)]
* (2)NewState:端口引脚重映射的新状态该参数可为:ENABLE或DISABLE.
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void GPIO_PinRemapConfig(u32 GPIO_Remap, FunctionalState NewState)
{
u32 tmp = 0x00, tmp1 = 0x00, tmpreg = 0x00, tmpmask = 0x00;
/* Check the parameters [检查参数]*/
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 = ((u32)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_EXTILineConfig
* 功能描述: 选择GPIO引脚作为EXTI线.
* 输入参数: (1)GPIO_PortSource:选择将要用作EXTI线的源的GPIO端口。GPIOx:x可为A到G来选择特定的GPIO设备.
* (2)GPIO_PinSource:需要配置的EXTI线。这个参数可以是GPIO_PinSourcex,其中x为0到15.
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void GPIO_EXTILineConfig(u8 GPIO_PortSource, u8 GPIO_PinSource)
{
u32 tmp = 0x00;
/* Check the parameters [检查参数]*/
assert_param(IS_GPIO_EXTI_PORT_SOURCE(GPIO_PortSource));
assert_param(IS_GPIO_PIN_SOURCE(GPIO_PinSource));
tmp = ((u32)0x0F) << (0x04 * (GPIO_PinSource & (u8)0x03));
AFIO->EXTICR[GPIO_PinSource >> 0x02] &= ~tmp;
AFIO->EXTICR[GPIO_PinSource >> 0x02] |= (((u32)GPIO_PortSource) << (0x04 * (GPIO_PinSource & (u8)0x03)));
}
/******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -