83 lines
1.9 KiB
C
83 lines
1.9 KiB
C
#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)
|
|
{
|
|
}
|
|
}
|