Mettre à jour 'Drivers/Sources/Driver_GPIO.c'

This commit is contained in:
Louis Rousset 2023-04-11 13:52:20 +02:00
parent e06fea7cc1
commit 9e9fc9eb4e

View file

@ -5,26 +5,26 @@
void MyGPIO_Init ( MyGPIO_Struct_TypeDef * GPIOStructPtr ) void MyGPIO_Init ( MyGPIO_Struct_TypeDef * GPIOStructPtr )
{ {
/* Activation of the GPIO port specific clock */ /* Activation de la clock liée au GPIO sélectionné */
if (GPIOStructPtr->GPIO == GPIOA) if (GPIOStructPtr->GPIO == GPIOA)
{ {
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;
} }
else if (GPIOStructPtr->GPIO == GPIOB) else if (GPIOStructPtr->GPIO == GPIOB)
{ {
RCC->APB2ENR |= RCC_APB2ENR_IOPBEN; RCC->APB2ENR |= RCC_APB2ENR_IOPBEN;
} }
else if (GPIOStructPtr->GPIO == GPIOC) else if (GPIOStructPtr->GPIO == GPIOC)
{ {
RCC->APB2ENR |= RCC_APB2ENR_IOPCEN; RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;
} }
else if (GPIOStructPtr->GPIO == GPIOD) else if (GPIOStructPtr->GPIO == GPIOD)
{ {
RCC->APB2ENR |= RCC_APB2ENR_IOPDEN; RCC->APB2ENR |= RCC_APB2ENR_IOPDEN;
} }
/* Reset, and then configuration writing of the selected GPIO Pin */ /* Reset & configuration de la pin avec le mode adéquat */
if(GPIOStructPtr->GPIO_Pin <= 8) if(GPIOStructPtr->GPIO_Pin <= 8)
{ {
GPIOStructPtr->GPIO->CRL &= ~0xF<<(4*(GPIOStructPtr->GPIO_Pin)); GPIOStructPtr->GPIO->CRL &= ~0xF<<(4*(GPIOStructPtr->GPIO_Pin));
@ -36,6 +36,7 @@ void MyGPIO_Init ( MyGPIO_Struct_TypeDef * GPIOStructPtr )
GPIOStructPtr->GPIO->CRH |= (GPIOStructPtr->GPIO_Conf)<<(4*((GPIOStructPtr->GPIO_Pin)%8)); GPIOStructPtr->GPIO->CRH |= (GPIOStructPtr->GPIO_Conf)<<(4*((GPIOStructPtr->GPIO_Pin)%8));
} }
/* Ecriture de l'ODR pour choisir entre pulldown & pushpull*/
if(GPIOStructPtr->GPIO_Conf == (char)In_PullDown) if(GPIOStructPtr->GPIO_Conf == (char)In_PullDown)
{ {
GPIOStructPtr->GPIO->ODR &= ~(0x1<<(GPIOStructPtr->GPIO_Pin)); GPIOStructPtr->GPIO->ODR &= ~(0x1<<(GPIOStructPtr->GPIO_Pin));
@ -49,7 +50,8 @@ void MyGPIO_Init ( MyGPIO_Struct_TypeDef * GPIOStructPtr )
//----------------------------READ--------------------------// //----------------------------READ--------------------------//
int MyGPIO_Read ( GPIO_TypeDef * GPIO , char GPIO_Pin ){ int MyGPIO_Read ( GPIO_TypeDef * GPIO , char GPIO_Pin ){
int etatbit; int etatbit;
//On vérifie si la valeur lue dans l'IDR est un 0 ou un 1
/* Verification de la valeur de l'IDR */
if((GPIO->IDR & (1<<GPIO_Pin))!=0){ if((GPIO->IDR & (1<<GPIO_Pin))!=0){
etatbit = 1; etatbit = 1;
} }
@ -61,13 +63,16 @@ int MyGPIO_Read ( GPIO_TypeDef * GPIO , char GPIO_Pin ){
//---------------------SET-------------------// //---------------------SET-------------------//
void MyGPIO_Set ( GPIO_TypeDef * GPIO , char GPIO_Pin ){ void MyGPIO_Set ( GPIO_TypeDef * GPIO , char GPIO_Pin ){
/*Ecriture du 1 sur le numéro de la pin dans le registre BSRR*/
GPIO->BSRR |= (1 << GPIO_Pin); GPIO->BSRR |= (1 << GPIO_Pin);
} }
//---------------------RESET-----------------// //---------------------RESET-----------------//
void MyGPIO_Reset ( GPIO_TypeDef * GPIO , char GPIO_Pin ){ void MyGPIO_Reset ( GPIO_TypeDef * GPIO , char GPIO_Pin ){
/*Ecriture du 1 sur le numéro de la pin dans le registre BRR*/
GPIO->BRR = (1 << GPIO_Pin); GPIO->BRR = (1 << GPIO_Pin);
//Pas besoin de | puisque les 0 n'impactent pas la fonction reset
} }
//---------------------TOGGLE-----------------// //---------------------TOGGLE-----------------//