#include "Driver_UART.h" void MyUART_Init(MyUART_Struct_TypeDef *UART) { // Active l'horloge du périphérique UART if (UART->UART == USART1) { RCC->APB2ENR |= RCC_APB2ENR_USART1EN; } else if (UART->UART == USART2) { RCC->APB1ENR |= RCC_APB1ENR_USART2EN; } else if (UART->UART == USART3) { RCC->APB1ENR |= RCC_APB1ENR_USART3EN; } // Active l'UART pour permettre la transmission/réception de données UART->UART->CR1 |= USART_CR1_UE; // Configure la vitesse de transmission en utilisant la valeur de BRR UART->UART->BRR = 7500/2; // Note : Certains UARTs sont connectés au 72Mhz/2 // Configure le format des données transmises/reçues : 8 bits de données, 1 bit de stop, pas de parité UART->UART->CR1 &= ~(USART_CR1_M | USART_CR1_PS); UART->UART->CR1 |= USART_CR1_TE | USART_CR1_RE; UART->UART->CR2 &= ~(0x11 << 12); USART3->CR1 |= USART_CR1_RXNEIE | USART_CR1_TXEIE; // Active les interruptions de l'UART __enable_irq();// Active les interruptions globales } void MyUART_SendByte(MyUART_Struct_TypeDef *UART, uint8_t data) { // Envoyer la donnée UART->UART->DR = data; // Attendre que la transmission soit terminée while ((UART->UART->SR & USART_SR_TC) == 0); } void MyUART_SendString(MyUART_Struct_TypeDef *UART, const char *str) { // Envoyer chaque caractère de la chaîne while (*str != '\0') { MyUART_SendByte(UART, *str); str++; } } uint8_t MyUART_ReceiveByte(MyUART_Struct_TypeDef *UART) { // Attendre que le registre de données soit rempli avec une nouvelle donnée while (!(UART->UART->SR & USART_SR_RXNE)); // Lire la donnée reçue uint8_t data = (uint8_t)(UART->UART->DR & 0xFF); // Remettre flag à 0 UART->UART->SR &= ~USART_SR_RXNE; // Renvoyer la donnée lue return data; } void USART3_IRQHandler(void) { if (USART3->SR & USART_SR_RXNE) { } if (USART3->SR & USART_SR_TXE) { } }