diff --git a/Drivers/Include/Driver_UART.h b/Drivers/Include/Driver_UART.h
index 98e39a5..c296384 100644
--- a/Drivers/Include/Driver_UART.h
+++ b/Drivers/Include/Driver_UART.h
@@ -3,9 +3,18 @@
#include "stm32f10x.h"
+typedef struct {
+ USART_TypeDef * UART;
+ unsigned int baudrate;
+}MyUART_Struct_Typedef;
+
void UART_send(char data);
-void UART_init(void);
-void UART_ITHandler(void);
+char UART_read(char data, MyUART_Struct_Typedef * UART);
+void UART_init(MyUART_Struct_Typedef * UART);
+void USART1_IRQHandler(void);
+void USART2_IRQHandler(void);
+void USART3_IRQHandler(void);
+
diff --git a/Drivers/Sources/Driver_UART.c b/Drivers/Sources/Driver_UART.c
index 2b1f6f9..11ed828 100644
--- a/Drivers/Sources/Driver_UART.c
+++ b/Drivers/Sources/Driver_UART.c
@@ -1,15 +1,25 @@
#include "Driver_UART.h"
-void UART_init(void)
+char received_data1, received_data2, received_data3;
+
+void UART_init(MyUART_Struct_Typedef * UART)
{
+ if(UART->UART ==USART1)
+ RCC->APB2ENR |= RCC_APB2ENR_USART1EN;
+ if(UART->UART ==USART2)
+ RCC->APB2ENR |= RCC_APB1ENR_USART2EN;
+ if(UART->UART ==USART3)
+ RCC->APB2ENR |= RCC_APB1ENR_USART3EN;
+
+
RCC->APB2ENR |= RCC_APB2ENR_USART1EN; // Validation horloge USART1
USART1->CR1 |= USART_CR1_UE; // Activer l'USART
USART1->CR1 &= ~USART_CR1_M; // Choisir la taille 8bits de donnée
USART1->CR2 |= USART_CR2_STOP; // 1 seul bit de stop
- USART1->BRR |= 468 << 4; // Fixe le baud rate à 9600bps partie entière
- USART1->BRR |= 75; // Fixe le baud rate à 9600bps partie fractionnaire
- //USART1->BRR = 72000000/9600; // Fixer le Baudrate à 9600
+ //USART1->BRR |= 468 << 4; // Fixe le baud rate à 9600bps partie entière
+ //USART1->BRR |= 75; // Fixe le baud rate à 9600bps partie fractionnaire
+ UART->UART->BRR = 72000000/(UART->baudrate);
USART1->CR1 |= USART_CR1_TE; // Autoriser la transmission
USART1->CR1 |= USART_CR1_RE; // Activer la réception
USART1->CR1 |= USART_CR1_TCIE; // Activer l'interruption de transmission
@@ -18,16 +28,29 @@ void UART_init(void)
void UART_send(char data)
{
+ while(!(USART1->SR & USART_SR_TXE)){} //Attendre l'autorisation de transmission
USART1->DR |= data;
while(!(USART1->SR & USART_SR_TC)){} //Attendre la fin de transmission
}
+char UART_read(char data, MyUART_Struct_Typedef * UART)
+ {
+ if(UART->UART == USART1)
+ return received_data1;
+ else if (UART->UART == USART2)
+ return received_data2;
+ else if (UART->UART == USART3)
+ return received_data3;
+ else
+ return 0;
+ }
-void UART_ITHandler(void)
+
+void USART1_IRQHandler(void)
{
if (USART1->SR & USART_SR_RXNE) // si une donnée a été reçue
{
- char received_data = USART1->DR; // lire la donnée reçue
+ received_data1 = USART1->DR; // lire la donnée reçue
}
if (USART1->SR & USART_SR_TC) // si la transmission est terminée
@@ -35,3 +58,29 @@ void UART_ITHandler(void)
USART1->SR &= ~USART_SR_TC; // effacer le bit de transmission terminée
}
}
+
+void USART2_IRQHandler(void)
+{
+ if (USART2->SR & USART_SR_RXNE) // si une donnée a été reçue
+ {
+ received_data2 = USART2->DR; // lire la donnée reçue
+ }
+
+ if (USART2->SR & USART_SR_TC) // si la transmission est terminée
+ {
+ USART2->SR &= ~USART_SR_TC; // effacer le bit de transmission terminée
+ }
+}
+
+void USART3_IRQHandler(void)
+{
+ if (USART3->SR & USART_SR_RXNE) // si une donnée a été reçue
+ {
+ received_data3 = USART3->DR; // lire la donnée reçue
+ }
+
+ if (USART3->SR & USART_SR_TC) // si la transmission est terminée
+ {
+ USART3->SR &= ~USART_SR_TC; // effacer le bit de transmission terminée
+ }
+}
diff --git a/GPIO_Test/GPIO_Test.uvoptx b/GPIO_Test/GPIO_Test.uvoptx
index 305a639..c3d2a1d 100644
--- a/GPIO_Test/GPIO_Test.uvoptx
+++ b/GPIO_Test/GPIO_Test.uvoptx
@@ -75,7 +75,7 @@
1
0
- 1
+ 0
18
@@ -143,24 +143,7 @@
-U -O206 -S8 -C0 -P00 -N00("") -D00(00000000) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL020000 -FP0($$Device:STM32F103RB$Flash\STM32F10x_128.FLM)
-
-
- 0
- 0
- 51
- 1
- 134219346
- 0
- 0
- 0
- 0
- 0
- 1
- U:\INSA\Microcontrôleur\Projet_Voilier_grp\Voilier\GPIO_Test\Sources\Main.c
-
- \\GPIO_Test\Sources/Main.c\51
-
-
+
0
@@ -274,7 +257,7 @@
1
0
- 0
+ 1
18
@@ -347,14 +330,47 @@
-U -O206 -S8 -C0 -P00 -N00("") -D00(00000000) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL020000 -FP0($$Device:STM32F103RB$Flash\STM32F10x_128.FLM)
-
+
+
+ 0
+ 0
+ 62
+ 1
+ 134218958
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ U:\INSA\Microcontrôleur\Projet_Voilier_grp\Voilier\GPIO_Test\Sources\Main.c
+
+ \\GPIO_Test\Sources/Main.c\62
+
+
+ 1
+ 0
+ 53
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ .\Sources\Main.c
+
+
+
+
0
0
1
- 1
+ 0
0
0
0
@@ -422,7 +438,7 @@
1
2
1
- 0
+ 1
0
0
..\Drivers\Sources\Driver_Timer.c
diff --git a/GPIO_Test/Sources/Main.c b/GPIO_Test/Sources/Main.c
index 333bc74..e67bed9 100644
--- a/GPIO_Test/Sources/Main.c
+++ b/GPIO_Test/Sources/Main.c
@@ -10,8 +10,15 @@ int main (void){
//Déclaration d'une LED et d'un BP par structure GPIO
MyGPIO_Struct_TypeDef LED;
MyGPIO_Struct_TypeDef BP;
+
//Déclaration d'un Timer 500 ms
MyTimer_Struct_TypeDef TIM500ms;
+
+ //Déclaration de l'UART
+ MyUART_Struct_Typedef * UART;
+ UART->UART=USART1;
+ UART->baudrate=9600;
+
//Config LED PA5
LED.GPIO_Conf = Out_Ppull;
LED.GPIO_Pin = 5;
@@ -42,7 +49,8 @@ int main (void){
MyTimer_PWM(&TIM500ms, 50);
- UART_init();
+
+ UART_init(UART);
//NVIC_EnableIRQ(USART1_IRQn);// Activer les interruptions
@@ -50,6 +58,9 @@ int main (void){
for (i = 0; i < len; i++) {
UART_send(data[i]);
}
+
+ UART_read(data[i], UART);
+