#include "Driver_GPIO.h" void MyGPIO_Init(MyGPIO_Struct_TypeDef * GPIOStructPtr) { //Configurer les horloges if(GPIOStructPtr->GPIO == GPIOA){ RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;//RCC->APB2ENR = 0x02; } else if(GPIOStructPtr->GPIO == GPIOB){ RCC->APB2ENR |= RCC_APB2ENR_IOPBEN;//RCC->APB2ENR = 0x03; } else if (GPIOStructPtr->GPIO == GPIOC){ RCC->APB2ENR |= RCC_APB2ENR_IOPCEN; //RCC->APB2ENR = 0x04; } //Initialiser le registre urilisé if (GPIOStructPtr->GPIO_Pin < 8) { GPIOStructPtr->GPIO->CRL &= ~(0xF << (4 * GPIOStructPtr->GPIO_Pin)); //Mettre le port du registre à 0 GPIOStructPtr->GPIO->CRL |= (GPIOStructPtr->GPIO_Conf << (4 * GPIOStructPtr->GPIO_Pin)); //Mettre la conf sélectionné dans le registre } else { GPIOStructPtr->GPIO->CRH &= ~(0xF << (4 * GPIOStructPtr->GPIO_Pin - 8)); //Mettre le port du registre à 0 / -8 car CRH commence à 8 GPIOStructPtr->GPIO->CRH |= (GPIOStructPtr->GPIO_Conf << (4* GPIOStructPtr->GPIO_Pin - 8)); } if (GPIOStructPtr->GPIO_Conf == In_PullUp) { GPIOStructPtr->GPIO->ODR |= (1<GPIO_Pin); //Mettre à 1 pour le push pull le registre }else{ GPIOStructPtr->GPIO->ODR &= ~(1<GPIO_Pin); //Mettre à 0 pour le pull down le registre } } int MyGPIO_Read(GPIO_TypeDef * GPIO, char GPIO_Pin){ if((GPIO->IDR & (1 << GPIO_Pin)) != 0) //Retourne si la Pin a été sélectionné { return 1; }else{ return 0; } } //BSRR registre permettant de Set la Pin void MyGPIO_Set(GPIO_TypeDef * GPIO, char GPIO_Pin){ GPIO->BSRR |= (1 << GPIO_Pin); //Mettre à 1 la PIN } //BRR registre permettant de ReSet la Pin void MyGPIO_Reset(GPIO_TypeDef * GPIO, char GPIO_Pin){ GPIO->BRR |= (1 << GPIO_Pin); //Mettre à 0 la PIN } void MyGPIO_Toggle(GPIO_TypeDef * GPIO, char GPIO_Pin){ GPIO->ODR ^= (1 << GPIO_Pin); //XOR, Inverser l'état de la PIN }