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