58 lines
1.4 KiB
C
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]);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|