aboutsummaryrefslogtreecommitdiffstats
path: root/src/serial.c
diff options
context:
space:
mode:
authorClyne Sullivan <tullivan99@gmail.com>2018-01-06 19:47:40 -0500
committerClyne Sullivan <tullivan99@gmail.com>2018-01-06 19:47:40 -0500
commita93e506b78b7379e14c23ae80a5281485897faee (patch)
treebdf12811a80d31056bcc0b607062e6ce7cd7919d /src/serial.c
parent67243b6d986179da11fc1d364606d8e1653688ff (diff)
serial support
Diffstat (limited to 'src/serial.c')
-rw-r--r--src/serial.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/serial.c b/src/serial.c
new file mode 100644
index 0000000..692faf0
--- /dev/null
+++ b/src/serial.c
@@ -0,0 +1,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;
+}