aboutsummaryrefslogtreecommitdiffstats
path: root/src/serial.c
blob: 692faf0900842d0d40030b93d9c1e25cd6388de0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stm32l476xx.h>
#include <gpio.h>

void serial_init(void)
{
	gpio_mode(GPIOA, 2, ALTERNATE);
	gpio_mode(GPIOA, 3, ALTERNATE);
	GPIOA->AFR[0] &= ~(0x0000FF00);
	GPIOA->AFR[0] |= 0x00007700;
	RCC->APB1ENR1 |= RCC_APB1ENR1_USART2EN;

	// start usart device
	USART2->BRR = 80000000L / 115200L;
	USART2->CR1 |= USART_CR1_TE | USART_CR1_RE | USART_CR1_UE;
}

void serial_put(int c)
{
	while (!(USART2->ISR & USART_ISR_TXE));
	USART2->TDR = c & 0xFF;
}

char serial_get(void)
{
	while (!(USART2->ISR & USART_ISR_RXNE));
	return USART2->RDR & 0xFF;
}