Projet_voilier2/Drivers/Src/UART.c

44 lines
1.1 KiB
C

#include "UART.h"
void (*uart_ptr_func)(void);
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
}
void UART_send(char data)
{
USART1->DR |= data; // Ecriture de la donnée dans le registre DR
while(!(USART1->SR & USART_SR_TC)) {} // Attente de la fin de transmission
}
void MyUART_ActiveIT(char Prio, void (*IT_function)(void))
{
USART1->CR1 |= USART_CR1_RXNEIE;
NVIC->ISER[1] |= 0x01<<(USART1_IRQn%32);
NVIC->IP[USART1_IRQn] |= Prio << 4;
}
void USART1_IRQHandler()
{
USART1->SR &= ~USART_SR_RXNE;
if(uart_ptr_func!=0)
{
(*uart_ptr_func)();
}
}
char UART_receive()
{
char carac;
carac = USART1->DR;
return carac;
}