projet_voilier/MyDrivers/USART.c
2020-11-09 12:14:55 +01:00

58 lines
1.4 KiB
C

#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]);
}
}