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