projet_voilier/MyDrivers/USART.c
Arnaud Vergnet 4e69b9b112 improve doc
2020-11-15 16:53: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 *usart)
{
int txPin;
GPIO_TypeDef *usartGpio;
if (usart == 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 (usart == 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 (usart == 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(usart, &usartInit);
GPIO_conf(usartGpio, txPin, LL_GPIO_MODE_ALTERNATE, LL_GPIO_OUTPUT_PUSHPULL, LL_GPIO_PULL_UP);
}
void USART_start(USART_TypeDef *usart)
{
LL_USART_Enable(usart);
}
void sendChar(USART_TypeDef *usart, char c)
{
LL_USART_TransmitData8(usart, c);
while (!LL_USART_IsActiveFlag_TXE(usart)) {}
}
void USART_send(USART_TypeDef *usart, char *msg, int length)
{
for (int i = 0; i < length; i++) {
sendChar(usart, msg[i]);
}
}