#include "USART.h" 
#include "GPIO.h"
#include "stm32f1xx_ll_bus.h" 	// Pour horloge


void Usart_conf(USART_TypeDef *USARTx)
{
	int txPin;
	GPIO_TypeDef *usartGpio;
	
	if (USARTx == USART1) {
		LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_USART1);
		LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOA);
		txPin = LL_GPIO_PIN_9;
		usartGpio = GPIOA;
	} else if (USARTx == USART2) {
		LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_USART2);
		LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOA);
		txPin = LL_GPIO_PIN_2;
		usartGpio = GPIOA;
	} else if (USARTx == USART3) {
		LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_USART3);
		LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOB);
		txPin = LL_GPIO_PIN_10;	
		usartGpio = GPIOB;
	}	
	
	LL_USART_InitTypeDef usartInit;
	LL_USART_StructInit(&usartInit);
	usartInit.DataWidth = LL_USART_DATAWIDTH_8B;
	usartInit.BaudRate = 9600;
	usartInit.TransferDirection = LL_USART_DIRECTION_TX_RX;
	LL_USART_Init(USARTx, &usartInit);
	
	GPIO_conf(usartGpio, txPin, LL_GPIO_MODE_ALTERNATE, LL_GPIO_OUTPUT_PUSHPULL, LL_GPIO_PULL_UP);
}



void Usart_enable(USART_TypeDef *USARTx)
{
		LL_USART_Enable(USARTx);
}


void sendChar(USART_TypeDef *USARTx, char c)
{
	LL_USART_TransmitData8(USARTx, c);
	while (!LL_USART_IsActiveFlag_TXE(USARTx)) {}
}


void Usart_send(USART_TypeDef *USARTx, char *msg, int length)
{
	for (int i = 0; i < length; i++) {
		sendChar(USARTx, msg[i]);
	}
}




