RefKEIL/ProjetsKEIL/Drivers/Driver_GPIO.c
2023-03-17 12:25:06 +01:00

49 lines
1.3 KiB
C

#include "Driver_GPIO.h"
#include "stm32f10x.h"
#include "stdio.h"
void MyGPIO_Init ( MyGPIO_Struct_TypeDef * GPIOStructPtr )
{
/* Reset, and then configuration writing of the selected GPIO Pin */
if(GPIOStructPtr->GPIO_Pin <= 8)
{
GPIOStructPtr->GPIO->CRL &= ~0xF<<(4*(GPIOStructPtr->GPIO_Pin));
GPIOStructPtr->GPIO->CRL |= (GPIOStructPtr->GPIO_Conf)<<(4*(GPIOStructPtr->GPIO_Pin));
}
else
{
GPIOStructPtr->GPIO->CRH &= ~0xF<<(4*((GPIOStructPtr->GPIO_Pin)%8));
GPIOStructPtr->GPIO->CRH |= (GPIOStructPtr->GPIO_Conf)<<(4*((GPIOStructPtr->GPIO_Pin)%8));
}
if(GPIOStructPtr->GPIO_Conf == (char)In_PullDown)
{
GPIOStructPtr->GPIO->ODR &= ~(0x1<<(GPIOStructPtr->GPIO_Pin));
}
else if(GPIOStructPtr->GPIO_Conf == (char)In_PullUp)
{
GPIOStructPtr->GPIO->ODR |= 0x1<<(GPIOStructPtr->GPIO_Pin);
}
}
int MyGPIO_Read ( GPIO_TypeDef * GPIO , char GPIO_Pin )
{
return ((GPIO->ODR & (0x1<<GPIO_Pin))>>GPIO_Pin);
}
void MyGPIO_Set (GPIO_TypeDef * GPIO , char GPIO_Pin)
{
GPIO->ODR &= 0x1<<GPIO_Pin;
}
void MyGPIO_Reset (GPIO_TypeDef * GPIO , char GPIO_Pin)
{
GPIO->ODR |= ~(0x1<<GPIO_Pin);
}
void MyGPIO_Toggle ( GPIO_TypeDef * GPIO , char GPIO_Pin )
{
if(MyGPIO_Read(GPIO, GPIO_Pin))
{
MyGPIO_Reset(GPIO, GPIO_Pin);
}
else
{
MyGPIO_Set(GPIO, GPIO_Pin);
}
}