From a6bd0409e62851f6bbab0a185001da1200a97f63 Mon Sep 17 00:00:00 2001 From: Olivier Chevilley Date: Tue, 4 Apr 2023 12:58:52 +0200 Subject: [PATCH] =?UTF-8?q?UART=20fini=20et=20test=C3=A9=20mais=20sans=20D?= =?UTF-8?q?MA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Drivers/Inc/GPIO.h | 15 +++--- Drivers/Inc/UART.h | 6 +-- Drivers/Src/ADC.c | 2 +- Drivers/Src/TIMER.c | 2 +- Drivers/Src/UART.c | 63 +++++++++++----------- Projet_voile/Sources/Principal.c | 91 ++++++++------------------------ Projet_voile/TP1.uvoptx | 44 +++++++++------ Projet_voile/TP1.uvprojx | 24 ++++----- 8 files changed, 110 insertions(+), 137 deletions(-) diff --git a/Drivers/Inc/GPIO.h b/Drivers/Inc/GPIO.h index 3b8deb3..2bd5695 100644 --- a/Drivers/Inc/GPIO.h +++ b/Drivers/Inc/GPIO.h @@ -1,12 +1,6 @@ #ifndef MYGPIO_H #define MYGPIO_H #include "stm32f10x.h" -typedef struct -{ - GPIO_TypeDef * GPIO ; - char GPIO_Pin ; // numero de 0 a 15 - char GPIO_Conf ; // voir ci dessous -} MyGPIO_Struct_TypeDef ; #define In_Floating 0x4 // a completer #define In_PullDown 0x8 @@ -17,6 +11,15 @@ typedef struct #define AltOut_Ppull 0xA // deux derniers bits pour regler la vitesse max (due a la valeur de res) (01:10MHz 10:2MHz 11:50MHz) #define AltOut_OD 0xD // deux derniers bits pour regler la vitesse max (due a la valeur de res) (01:10MHz 10:2MHz 11:50MHz) +typedef struct +{ + GPIO_TypeDef * GPIO ; + char GPIO_Pin ; // numero de 0 a 15 + char GPIO_Conf ; // voir ci dessous +} MyGPIO_Struct_TypeDef ; + + + void MyGPIO_Init ( MyGPIO_Struct_TypeDef * GPIOStructPtr ) ; int MyGPIO_Read ( GPIO_TypeDef * GPIO , char GPIO_Pin ) ; // renvoie 0 ou autre chose different de 0 void MyGPIO_Set ( GPIO_TypeDef * GPIO , char GPIO_Pin ) ; diff --git a/Drivers/Inc/UART.h b/Drivers/Inc/UART.h index 398b87b..7a2fdcc 100644 --- a/Drivers/Inc/UART.h +++ b/Drivers/Inc/UART.h @@ -3,8 +3,8 @@ #include "stm32f10x.h" void MyUART_init(void); -void UART_send(char data); //à revoir -void MyUART_ActiveIT(char Prio, void (*IT_function)(void), char mode); //mode permet d'activer soit l'interruption sur RX (mode='r') soit TX (mode='t') -char UART_receive(); +void UART_send(char data); +void MyUART_ActiveIT(char Prio, void (*IT_function)(void)); +char UART_receive(void); #endif diff --git a/Drivers/Src/ADC.c b/Drivers/Src/ADC.c index 50fa86a..55fdf88 100644 --- a/Drivers/Src/ADC.c +++ b/Drivers/Src/ADC.c @@ -188,4 +188,4 @@ int MyADC_result(ADC_TypeDef* ADC) return ADC2->DR & ~((0x0F) << 12); // retour de la conversion } return 0; -} \ No newline at end of file +} diff --git a/Drivers/Src/TIMER.c b/Drivers/Src/TIMER.c index 8b0fe3b..76e67aa 100644 --- a/Drivers/Src/TIMER.c +++ b/Drivers/Src/TIMER.c @@ -88,7 +88,7 @@ void TIM4_IRQHandler (void) TIM4->SR &= ~(1<<0) ; } -void TIM1_UP_IRQHandler (void) // à vérifier +void TIM1_UP_IRQHandler (void) { if(tim_ptr1_func!=0) { diff --git a/Drivers/Src/UART.c b/Drivers/Src/UART.c index e89e7f6..b84c1a6 100644 --- a/Drivers/Src/UART.c +++ b/Drivers/Src/UART.c @@ -1,4 +1,5 @@ #include "UART.h" +#include "GPIO.h" void (*uart_rx_ptr_func)(void); void (*uart_tx_ptr_func)(void); @@ -6,34 +7,45 @@ char buffer[1000]={0}; void MyUART_init(void) // que pour du 9600 bauds { - RCC->APB2ENR |= RCC_APB2ENR_USART1EN; // validation horloge USART1 - USART1->CR1 |= USART_CR1_UE; // Activation de l'USART - USART1->CR1 &= ~USART_CR1_M; // Choix d'une taille de 8 bits de données - USART1->CR2 &= USART_CR2_STOP; // Choix d'un seul bit de stop - USART1->BRR |= 468 << 4; // Fixe le baud rate à 9600bps //valeurs trouvé p804 - USART1->BRR |= 75; // Fixe le baud rate à 9600bps - USART1->CR1 |= USART_CR1_TE; // Envoi de la première trame d'attente + MyGPIO_Struct_TypeDef RX_pin; + MyGPIO_Struct_TypeDef TX_pin; + + RX_pin.GPIO = GPIOA; + RX_pin.GPIO_Conf = In_Floating; + RX_pin.GPIO_Pin = 10; + + TX_pin.GPIO = GPIOA; + TX_pin.GPIO_Conf = AltOut_Ppull; + TX_pin.GPIO_Pin = 9; + + MyGPIO_Init (&RX_pin); + MyGPIO_Init (&TX_pin); + + RCC->APB2ENR |= RCC_APB2ENR_USART1EN; // validation horloge USART1 + USART1->CR1 |= USART_CR1_UE; // Activation de l'USART + USART1->CR1 &= ~USART_CR1_M; // Choix d'une taille de 8 bits de données + USART1->CR2 &= USART_CR2_STOP; // Choix d'un seul bit de stop + USART1->BRR |= 468 << 4; // Fixe le baud rate à 9600bps //valeurs trouvé p804 + USART1->BRR |= 75; // Fixe le baud rate à 9600bps + USART1->CR1 |= USART_CR1_RE; + USART1->CR1 |= USART_CR1_TE; } void UART_send(char data) { - USART1->DR |= data; // Ecriture de la donnée dans le registre DR + while(!(USART1->SR & USART_SR_TXE)) + { + } + USART1->DR = data; // Ecriture de la donnée dans le registre DR } -void MyUART_ActiveIT(char Prio, void (*IT_function)(void), char mode) +void MyUART_ActiveIT(char Prio, void (*IT_function)(void)) { - if (mode=='r') - { - USART1->CR1 |= USART_CR1_RXNEIE; - uart_rx_ptr_func=IT_function; - } - else if (mode=='t') - { - USART1->CR1 |= USART_CR1_TXEIE; - uart_tx_ptr_func=IT_function; - } + //activer l'interrupt sur reception + USART1->CR1 |= USART_CR1_RXNEIE; + uart_rx_ptr_func=IT_function; NVIC->ISER[1] |= 0x01<<(USART1_IRQn%32); - NVIC->IP[USART1_IRQn] |= Prio << 4; + NVIC->IP[USART1_IRQn] |= Prio << 4; } void USART1_IRQHandler() @@ -46,18 +58,9 @@ void USART1_IRQHandler() (*uart_rx_ptr_func)(); } } - else if (USART1->SR & USART_SR_TXE) // à revoir car si rien dedans il va tout le temps y retourner vu qu'il est vide - { - USART1->SR &= ~USART_SR_TXE; - if(uart_tx_ptr_func!=0) - { - (*uart_tx_ptr_func)(); - } - } - } char UART_receive() { - return USART1->DR; + return USART1->DR; // on recupere dans DR } diff --git a/Projet_voile/Sources/Principal.c b/Projet_voile/Sources/Principal.c index 7dff07f..2b8afb2 100644 --- a/Projet_voile/Sources/Principal.c +++ b/Projet_voile/Sources/Principal.c @@ -2,79 +2,34 @@ #include #include #include "GPIO.h" -#include "TIMER.h" -#include "ADC.h" #include "UART.h" -int val_adc=0; -int cpt_buff_tx=0; -int cpt_buff_rx=0; -MyGPIO_Struct_TypeDef PA5; //PA5 LED -MyGPIO_Struct_TypeDef PC13; //PC13 Bouton -MyTimer_Struct_TypeDef timer2; -MyADC_Struct_TypeDef myADC; -char buffer_tx[100]={0}; -char buffer_rx[100]={0}; -void GPIO_led_IT (void); -void ADC_IT(void); -void UART_RX_IT(void); -void UART_TX_IT(void); +char MyChar; -int main ( void ) -{ - myADC.ADC=ADC1; - myADC.channel=2; - MyADC_init(&myADC); - MyADC_ActiveIT(myADC.ADC,4,&ADC_IT); - MyADC_start_conversion(myADC.ADC); - - MyUART_init(); - MyUART_ActiveIT(1, &UART_RX_IT, 'r'); //mode permet d'activer soit l'interruption sur RX (mode=0) soit TX (mode=1) - MyUART_ActiveIT(3, &UART_TX_IT, 't'); //mode permet d'activer soit l'interruption sur RX (mode=0) soit TX (mode=1) - sprintf(buffer_tx,"Test"); - - while(1) - { - } - -} - - - -void GPIO_led_IT (void) -{ - MyGPIO_Toggle(PA5.GPIO,5); -} - -void ADC_IT (void) -{ - val_adc=MyADC_result(myADC.ADC); -} - -void UART_TX_IT (void) -{ - if(buffer_tx[cpt_buff_tx]!=0) - { - UART_send(buffer_tx[cpt_buff_tx]); - cpt_buff_tx++; - } - else - { - cpt_buff_tx=0; - memset(buffer_tx, 0, sizeof buffer_tx); - } - -} +//MyGPIO_Struct_TypeDef PA5; //PA5 LED +//MyGPIO_Struct_TypeDef PC13; //PC13 Bouton void UART_RX_IT (void) { - if((cpt_buff_rx!=-1)&&(cpt_buff_rx<100)) + MyChar=UART_receive(); +} + +int main ( void ) +{ + MyGPIO_Struct_TypeDef myGPIO; + myGPIO.GPIO = GPIOA; + myGPIO.GPIO_Conf = Out_Ppull; + myGPIO.GPIO_Pin = 5; + + MyGPIO_Init (&myGPIO); + + MyUART_init(); + MyUART_ActiveIT(1, &UART_RX_IT); //mode permet d'activer soit l'interruption sur TX + + while(1) { - buffer_rx[cpt_buff_rx]=UART_receive(); + } - else - { - cpt_buff_rx=0; - memset(buffer_rx, 0, sizeof buffer_rx); - } -} \ No newline at end of file +} + + diff --git a/Projet_voile/TP1.uvoptx b/Projet_voile/TP1.uvoptx index 38a78b5..4d68f84 100644 --- a/Projet_voile/TP1.uvoptx +++ b/Projet_voile/TP1.uvoptx @@ -125,7 +125,7 @@ 0 DLGDARM - (1010=984,109,1360,666,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(100=-1,-1,-1,-1,0)(110=-1,-1,-1,-1,0)(111=-1,-1,-1,-1,0)(1011=-1,-1,-1,-1,0)(180=-1,-1,-1,-1,0)(120=733,260,1154,687,0)(121=-1,-1,-1,-1,0)(122=939,341,1360,768,0)(123=-1,-1,-1,-1,0)(140=-1,-1,-1,-1,0)(240=-1,-1,-1,-1,0)(190=-1,-1,-1,-1,0)(200=-1,-1,-1,-1,0)(170=-1,-1,-1,-1,0)(130=-1,-1,-1,-1,0)(131=335,17,929,768,0)(132=-1,-1,-1,-1,0)(133=-1,-1,-1,-1,0)(160=695,235,1143,649,0)(161=-1,-1,-1,-1,0)(162=-1,-1,-1,-1,0)(210=-1,-1,-1,-1,0)(211=-1,-1,-1,-1,0)(220=-1,-1,-1,-1,0)(221=-1,-1,-1,-1,0)(230=-1,-1,-1,-1,0)(234=-1,-1,-1,-1,0)(231=-1,-1,-1,-1,0)(232=-1,-1,-1,-1,0)(233=-1,-1,-1,-1,0)(150=298,17,901,768,0)(151=-1,-1,-1,-1,0) + (1010=984,109,1360,666,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(100=-1,-1,-1,-1,0)(110=-1,-1,-1,-1,0)(111=-1,-1,-1,-1,0)(1011=-1,-1,-1,-1,0)(180=-1,-1,-1,-1,0)(120=1084,185,1505,612,0)(121=-1,-1,-1,-1,0)(122=939,341,1360,768,0)(123=-1,-1,-1,-1,0)(140=-1,-1,-1,-1,0)(240=-1,-1,-1,-1,0)(190=-1,-1,-1,-1,0)(200=-1,-1,-1,-1,0)(170=-1,-1,-1,-1,0)(130=-1,-1,-1,-1,0)(131=335,17,929,768,0)(132=-1,-1,-1,-1,0)(133=-1,-1,-1,-1,0)(160=1177,417,1625,831,0)(161=-1,-1,-1,-1,0)(162=-1,-1,-1,-1,0)(210=-1,-1,-1,-1,0)(211=-1,-1,-1,-1,0)(220=-1,-1,-1,-1,0)(221=-1,-1,-1,-1,0)(230=-1,-1,-1,-1,0)(234=-1,-1,-1,-1,0)(231=-1,-1,-1,-1,0)(232=-1,-1,-1,-1,0)(233=-1,-1,-1,-1,0)(150=298,17,901,768,0)(151=-1,-1,-1,-1,0) 0 @@ -142,9 +142,9 @@ 0 0 - 31 + 15 1 -
134219858
+
134219150
0 0 0 @@ -153,7 +153,7 @@ 1 .\Sources\Principal.c - \\TP1\Sources/Principal.c\31 + \\TP1\Sources/Principal.c\15
@@ -167,6 +167,26 @@ 1 ADC + + 2 + 1 + MyChar + + + 3 + 1 + RX_pin + + + 4 + 1 + RX_pin + + + 5 + 1 + MyChar + 0 @@ -217,12 +237,6 @@ FF000000000000000000000000000000E0FFEF400100000000000000000000000000000028504F5254412026203078303030303030323029203E3E2035000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000001000000000000000000F03F170000000000000000000000000000000000000090020008 - - - System Viewer\USART1 - 35905 - - 1 1 @@ -337,7 +351,7 @@ 0 DLGTARM - (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(100=-1,-1,-1,-1,0)(110=-1,-1,-1,-1,0)(111=-1,-1,-1,-1,0)(1011=-1,-1,-1,-1,0)(180=-1,-1,-1,-1,0)(120=318,388,739,793,0)(121=1101,403,1522,808,0)(122=1281,393,1702,798,0)(123=-1,-1,-1,-1,0)(140=-1,-1,-1,-1,0)(240=-1,-1,-1,-1,0)(190=-1,-1,-1,-1,0)(200=-1,-1,-1,-1,0)(170=-1,-1,-1,-1,0)(130=-1,-1,-1,-1,0)(131=-1,-1,-1,-1,0)(132=-1,-1,-1,-1,0)(133=-1,-1,-1,-1,0)(160=-1,-1,-1,-1,0)(161=-1,-1,-1,-1,0)(162=-1,-1,-1,-1,0)(210=-1,-1,-1,-1,0)(211=-1,-1,-1,-1,0)(220=-1,-1,-1,-1,0)(221=-1,-1,-1,-1,0)(230=-1,-1,-1,-1,0)(231=-1,-1,-1,-1,0)(232=-1,-1,-1,-1,0)(233=-1,-1,-1,-1,0)(150=-1,-1,-1,-1,0)(151=-1,-1,-1,-1,0) + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(100=-1,-1,-1,-1,0)(110=-1,-1,-1,-1,0)(111=-1,-1,-1,-1,0)(1011=-1,-1,-1,-1,0)(180=-1,-1,-1,-1,0)(120=318,388,739,793,0)(121=1101,403,1522,808,0)(122=1281,393,1702,798,0)(123=-1,-1,-1,-1,0)(140=-1,-1,-1,-1,0)(240=-1,-1,-1,-1,0)(190=-1,-1,-1,-1,0)(200=-1,-1,-1,-1,0)(170=-1,-1,-1,-1,0)(130=-1,-1,-1,-1,0)(131=-1,-1,-1,-1,0)(132=-1,-1,-1,-1,0)(133=-1,-1,-1,-1,0)(160=1106,213,1554,627,1)(161=-1,-1,-1,-1,0)(162=-1,-1,-1,-1,0)(210=-1,-1,-1,-1,0)(211=-1,-1,-1,-1,0)(220=-1,-1,-1,-1,0)(221=-1,-1,-1,-1,0)(230=-1,-1,-1,-1,0)(231=-1,-1,-1,-1,0)(232=-1,-1,-1,-1,0)(233=-1,-1,-1,-1,0)(150=-1,-1,-1,-1,0)(151=-1,-1,-1,-1,0) 0 @@ -369,7 +383,7 @@ 1 1 0 - 0 + 1 0 0 1 @@ -381,7 +395,7 @@ 0 0 0 - 1 + 0 0 0 0 @@ -459,7 +473,7 @@ 1 4 1 - 1 + 0 0 0 ..\Drivers\Src\ADC.c @@ -471,7 +485,7 @@ 1 5 1 - 1 + 0 0 0 ..\Drivers\Src\UART.c diff --git a/Projet_voile/TP1.uvprojx b/Projet_voile/TP1.uvprojx index 8e098ec..3755d44 100644 --- a/Projet_voile/TP1.uvprojx +++ b/Projet_voile/TP1.uvprojx @@ -10,13 +10,13 @@ Simulé 0x4 ARM-ADS - 6190000::V6.19::ARMCLANG - 1 + 5060960::V5.06 update 7 (build 960)::.\ARMCC + 0 STM32F103RB STMicroelectronics - Keil.STM32F1xx_DFP.2.4.0 + Keil.STM32F1xx_DFP.2.3.0 http://www.keil.com/pack/ IRAM(0x20000000,0x00005000) IROM(0x08000000,0x00020000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE @@ -186,7 +186,6 @@ 0 0 0 - 0 0 0 8 @@ -314,7 +313,7 @@ 1 - 2 + 1 0 0 1 @@ -323,7 +322,7 @@ 0 0 0 - 3 + 2 0 0 0 @@ -599,7 +598,6 @@ 0 0 0 - 0 0 0 8 @@ -837,15 +835,15 @@ - - + + - + @@ -856,7 +854,7 @@ RTE\Device\STM32F103RB\RTE_Device.h - + @@ -865,7 +863,7 @@ RTE\Device\STM32F103RB\startup_stm32f10x_md.s - + @@ -874,7 +872,7 @@ RTE\Device\STM32F103RB\system_stm32f10x.c - +