#include "Driver_GPIO.h" void MyGPIO_Activate(int nb_GPIO) { //activer la clock du GPIO donné RCC->APB2ENR |= (0x01 << (nb_GPIO +1)) ; //RCC->APB2ENR |= (0x01 << 2 | 0x01 << 3 | 0x01 << 4) ; } /* void MyGPIO_Desactivate(int nb_GPIO) { //désactiver le GPIO donné RCC->APB2ENR &= ~(0x01 << (nb_GPIO +1)) ; }*/ //la structure est déjà remplie void MyGPIO_Init(MyGPIO_Struct_TypeDef * GPIOStructPtr) { //màj crl si on veut un pull up ou pull down //on reset la conf if(GPIOStructPtr->GPIO_Pin > 7){ GPIOStructPtr->GPIO->CRH &= ~(0xF << ((GPIOStructPtr->GPIO_Pin*4) - (8*4))); //on met la bonne conf if (GPIOStructPtr->GPIO_Conf == In_PullUp) { //on est en pull up -> on met à 1 par défaut GPIOStructPtr->GPIO->CRH |= (In_PullDown << ((GPIOStructPtr->GPIO_Pin*4) - (8*4))); MyGPIO_Set(GPIOStructPtr->GPIO, GPIOStructPtr->GPIO_Pin); } else { GPIOStructPtr->GPIO->CRH |= (GPIOStructPtr->GPIO_Conf << ((GPIOStructPtr->GPIO_Pin*4) - (8*4))); } } else { GPIOStructPtr->GPIO->CRL &= ~(0xF << (GPIOStructPtr->GPIO_Pin*4)); //on met la bonne conf if (GPIOStructPtr->GPIO_Conf == In_PullUp) { //on est en pull up -> on met à 1 par défaut GPIOStructPtr->GPIO->CRL |= (In_PullDown << (GPIOStructPtr->GPIO_Pin*4)); MyGPIO_Set(GPIOStructPtr->GPIO, GPIOStructPtr->GPIO_Pin); } else { GPIOStructPtr->GPIO->CRL |= (GPIOStructPtr->GPIO_Conf << (GPIOStructPtr->GPIO_Pin * 4)); } } } int MyGPIO_Read(GPIO_TypeDef * GPIO, char GPIO_Pin) { return (GPIO->IDR & (1 << GPIO_Pin)) ; } void MyGPIO_Set(GPIO_TypeDef * GPIO, char GPIO_Pin){ //GPIO->ODR |= (1 << GPIO_Pin); GPIO->BSRR = (1 << GPIO_Pin) ; } void MyGPIO_Reset(GPIO_TypeDef * GPIO, char GPIO_Pin) { //GPIO->ODR &= ~(1 << GPIO_Pin); //d'après la data sheet, il faut écrire dans la partie des bits compris entre 16 et 31 GPIO->BSRR = (1 << (GPIO_Pin + 16)) ; } void MyGPIO_Toggle(GPIO_TypeDef * GPIO, char GPIO_Pin){ //voir si il y a une meilleur manière if (GPIO->ODR & (1 << GPIO_Pin)) { //dans ce cas c'est activé donc on le désactive MyGPIO_Reset(GPIO, GPIO_Pin); } else { //c'était désactivé donc on l'active MyGPIO_Set(GPIO, GPIO_Pin); } }