From ba6ec8e022c3ef4824ad44c9d8edd443f0b0fa93 Mon Sep 17 00:00:00 2001 From: Alix Chagot Date: Fri, 17 Mar 2023 12:17:44 +0100 Subject: [PATCH] Avancement driver gpio --- ProjetsKEIL/Drivers/inc/gpio.h | 6 ++-- ProjetsKEIL/Drivers/src/gpio.c | 54 ++++++++++++++++++++++++++---- ProjetsKEIL/Projet/src/Principal.c | 21 +++++++++--- ProjetsKEIL/Projet/tp1.uvoptx | 20 ++++++++--- ProjetsKEIL/Projet/tp1.uvprojx | 20 +++++++++-- 5 files changed, 99 insertions(+), 22 deletions(-) diff --git a/ProjetsKEIL/Drivers/inc/gpio.h b/ProjetsKEIL/Drivers/inc/gpio.h index e787241..6f362de 100644 --- a/ProjetsKEIL/Drivers/inc/gpio.h +++ b/ProjetsKEIL/Drivers/inc/gpio.h @@ -9,8 +9,8 @@ typedef struct { } MyGPIO_Struct_TypeDef; #define In_Floating 0x4 -#define In_PullDown 0x101 //faire -#define In_PullUp 0x102 //faire +#define In_PullDown 0x7 //faire +#define In_PullUp 0x8 //faire #define In_Analog 0x0 #define Out_Ppull 0x2 #define Out_OD 0x6 @@ -23,4 +23,4 @@ void MyGPIO_Set(GPIO_TypeDef * GPIO, char GPIO_Pin); void MyGPIO_Reset(GPIO_TypeDef * GPIO, char GPIO_Pin); void MyGPIO_Toggle(GPIO_TypeDef * GPIO, char GPIO_Pin); -#endif \ No newline at end of file +#endif diff --git a/ProjetsKEIL/Drivers/src/gpio.c b/ProjetsKEIL/Drivers/src/gpio.c index 42b0293..5ecf4f0 100644 --- a/ProjetsKEIL/Drivers/src/gpio.c +++ b/ProjetsKEIL/Drivers/src/gpio.c @@ -1,30 +1,70 @@ #include "gpio.h" void MyGPIO_Init(MyGPIO_Struct_TypeDef * GPIOStructPtr) { - if (GPIOStructPtr->GPIO_Pin >= 8) { + if (GPIOStructPtr->GPIO_Pin >= 8) { switch (GPIOStructPtr->GPIO_Conf) { case In_PullDown: + GPIOStructPtr->GPIO->CRH &= ~(0xF << (4 * (GPIOStructPtr->GPIO_Pin % 8))); + GPIOStructPtr->GPIO->CRH |= (0x8 << (4 * (GPIOStructPtr->GPIO_Pin % 8))); + GPIOStructPtr->GPIO->ODR &= (0x0 << GPIOStructPtr->GPIO_Pin); + break; + case In_PullUp: + GPIOStructPtr->GPIO->CRH &= ~(0xF << (4 * (GPIOStructPtr->GPIO_Pin % 8))); + GPIOStructPtr->GPIO->CRH |= (0x8 << (4 * (GPIOStructPtr->GPIO_Pin % 8))); + GPIOStructPtr->GPIO->ODR |= (0x1 << GPIOStructPtr->GPIO_Pin); + break; + + case In_Floating: + case In_Analog: + case Out_Ppull: + case Out_OD: + case AltOut_Ppull: + case AltOut_OD: + GPIOStructPtr->GPIO->CRH &= ~(0xF << (4 * (GPIOStructPtr->GPIO_Pin % 8))); + GPIOStructPtr->GPIO->CRH |= (GPIOStructPtr->GPIO_Conf << (4 * (GPIOStructPtr->GPIO_Pin % 8))); break; } } else { - //suite + switch (GPIOStructPtr->GPIO_Conf) { + case In_PullDown: + GPIOStructPtr->GPIO->CRH &= ~(0xF << (4 * (GPIOStructPtr->GPIO_Pin % 8))); + GPIOStructPtr->GPIO->CRH |= (0x8 << (4 * (GPIOStructPtr->GPIO_Pin % 8))); + GPIOStructPtr->GPIO->ODR &= (0x0 << GPIOStructPtr->GPIO_Pin); + break; + + case In_PullUp: + GPIOStructPtr->GPIO->CRL &= ~(0xF << (4 * (GPIOStructPtr->GPIO_Pin))); + GPIOStructPtr->GPIO->CRL |= (0x8 << (4 * (GPIOStructPtr->GPIO_Pin))); + GPIOStructPtr->GPIO->ODR |= (0x1 << GPIOStructPtr->GPIO_Pin); + break; + + case In_Floating: + case In_Analog: + case Out_Ppull: + case Out_OD: + case AltOut_Ppull: + case AltOut_OD: + GPIOStructPtr->GPIO->CRL &= ~(0xF << (4 * (GPIOStructPtr->GPIO_Pin))); + GPIOStructPtr->GPIO->CRL |= (GPIOStructPtr->GPIO_Conf << (4 * (GPIOStructPtr->GPIO_Pin))); + break; + } } - } int MyGPIO_Read(GPIO_TypeDef * GPIO, char GPIO_Pin) { + return ((GPIO->IDR & (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 &= (0x0 << GPIO_Pin); } void MyGPIO_Toggle(GPIO_TypeDef * GPIO, char GPIO_Pin) { - -} \ No newline at end of file + +} diff --git a/ProjetsKEIL/Projet/src/Principal.c b/ProjetsKEIL/Projet/src/Principal.c index dd96fbd..33756d5 100644 --- a/ProjetsKEIL/Projet/src/Principal.c +++ b/ProjetsKEIL/Projet/src/Principal.c @@ -1,22 +1,33 @@ #include "stm32f10x.h" +#include "gpio.h" int main(void) { + MyGPIO_Struct_TypeDef * led2; + MyGPIO_Struct_TypeDef * b1; + RCC->APB2ENR |= (0x01 << 2) | (0x01 << 3) | (0x01 << 4); - GPIOA->CRL &= ~(0xF << (4 * 5)); + /*GPIOA->CRL &= ~(0xF << (4 * 5)); GPIOA->CRL |= (0x3 << (4 * 5)); GPIOA->ODR &= (0x0 << 5); GPIOC->CRH &= ~(0xF << (4 * (13%8))); - GPIOC->CRH |= (0x8 << (4 * (13%8))); + GPIOC->CRH |= (0x8 << (4 * (13%8)));*/ + + led2->GPIO = GPIOA; + led2->GPIO_Pin = 5; + led2->GPIO_Conf = Out_Ppull; + b1->GPIO = GPIOC; + b1->GPIO_Pin = 13; + b1->GPIO_Conf = In_PullUp; do { - if (((GPIOC->IDR & (0x1 << 13)) >> 13) == 0x1) { - GPIOA->ODR &= (0x0 << 5); + if (MyGPIO_Read(GPIOC, 13) == 0x1) { + MyGPIO_Reset(GPIOA, 5); } else { - GPIOA->ODR |= (0x1 << 5); + MyGPIO_Set(GPIOA, 5); } } while (1); } diff --git a/ProjetsKEIL/Projet/tp1.uvoptx b/ProjetsKEIL/Projet/tp1.uvoptx index f6f81c7..a6d95d1 100644 --- a/ProjetsKEIL/Projet/tp1.uvoptx +++ b/ProjetsKEIL/Projet/tp1.uvoptx @@ -196,7 +196,7 @@ 0x4 ARM-ADS - 25000000 + 8000000 1 1 @@ -378,7 +378,7 @@ MesSources - 1 + 0 0 0 0 @@ -389,7 +389,7 @@ 1 0 0 - .\Source\Principal.c + .\src\Principal.c Principal.c 0 0 @@ -398,10 +398,22 @@ MesDrivers - 0 + 1 0 0 0 + + 2 + 2 + 1 + 0 + 0 + 0 + ..\Drivers\src\gpio.c + gpio.c + 0 + 0 + diff --git a/ProjetsKEIL/Projet/tp1.uvprojx b/ProjetsKEIL/Projet/tp1.uvprojx index ce97dc0..f5fb201 100644 --- a/ProjetsKEIL/Projet/tp1.uvprojx +++ b/ProjetsKEIL/Projet/tp1.uvprojx @@ -386,12 +386,19 @@ Principal.c 1 - .\Source\Principal.c + .\src\Principal.c MesDrivers + + + gpio.c + 1 + ..\Drivers\src\gpio.c + + ::CMSIS @@ -734,7 +741,7 @@ - .\Include + ..\Drivers\inc;.\inc @@ -781,12 +788,19 @@ Principal.c 1 - .\Source\Principal.c + .\src\Principal.c MesDrivers + + + gpio.c + 1 + ..\Drivers\src\gpio.c + + ::CMSIS