#include "MyTimer.h" #include "stm32f10x.h" #include "Driver_GPIO.h" #include "Plateau.h" #include "Telecommande.h" #define NULL 0 /* Declaration */ USART_TypeDef USART ; USART_TypeDef * Usart = &USART; MyGPIO_Struct_TypeDef GPIOA10; // pin rx = reception MyGPIO_Struct_TypeDef GPIOA9; // pin tx = envoie void (* ptr) (char) = NULL; /* Configuration de l'UART */ void Init_USART (USART_TypeDef * USART){ /* Configuration des GPIOs */ GPIOA10.GPIO = GPIOA; GPIOA10.GPIO_Pin = 10; GPIOA10.GPIO_Conf = In_Floating; MyGPIO_Init(&GPIOA10); GPIOA9.GPIO = GPIOA; GPIOA9.GPIO_Pin = 9; GPIOA9.GPIO_Conf = AltOut_Ppull; MyGPIO_Init(&GPIOA9); /* Configuration de l'USART */ RCC->APB2ENR |= RCC_APB2ENR_USART1EN ; // activation de la clock USART1->CR1 |= USART_CR1_UE ; // rendre usart enable USART1->CR1 &= ~(USART_CR1_M); // mettre à 8 la longueur du mot // bd 9600 (cf. prof) puis calcul de la mantisse et de la fraction (cf. p 804) USART1->BRR |= 0x0C; // mantisse USART1->BRR |= (0x01D4 << 4) ; // fraction // Active la reception et l'emission USART1->CR1 |= USART_CR1_RE; USART1->CR1 |= USART_CR1_TE; /* On active les interruptions pour l'usart1 */ USART1->CR1 |= USART_CR1_RXNEIE; } /* Envoie d'un character */ void Send_Char (char c) { while (((USART1->SR >> 6) & 0x1) == 0);// tant que la transmission n'est pas finie USART1->DR = c; } /* Envoie de messages */ void Send_Message (char message[]){ int i = 0; while (message[i] != '\0') { Send_Char(message[i]); i+=1; } } void USART1_IRQHandler() { char input; input = USART1->DR ; // on récupère ce qu'il y a dans le registre (*ptr) (input); // on execute la fonction } /* Reception de message */ void Init_Message_Reception(void (* pFonction) (char)){ //(void (* pFonction) (char)){ /* Configuration de l'interruption */ //!\\ A revoir cette partie ! p 198 NVIC->ISER[1] |= NVIC_ISER_SETENA_5 ;//NVIC_IABR_ACTIVE_5 ; // on autorise l'interuption au niveau du coeur par le usart1 NVIC->IP[37] = 7; // on parametre la prio de l'usart /* Activation de la réception */ USART1->CR1 |= USART_CR1_RE ; ptr = pFonction; //fonction à appeler par le handler }