|
@@ -13,13 +13,25 @@
|
|
|
#define BAUD 3000000 /* 3Mbaud */
|
|
|
#endif
|
|
|
|
|
|
+#if STM32F == 1
|
|
|
+#define PCLK SYSCLK
|
|
|
+#elif STM32F == 7
|
|
|
+#define PCLK (APB2_MHZ * 1000000)
|
|
|
+#endif
|
|
|
+
|
|
|
#define USART1_IRQ 37
|
|
|
|
|
|
static void ser_putc(uint8_t c)
|
|
|
{
|
|
|
+#if STM32F == 1
|
|
|
while (!(usart1->sr & USART_SR_TXE))
|
|
|
cpu_relax();
|
|
|
usart1->dr = c;
|
|
|
+#elif STM32F == 7
|
|
|
+ while (!(usart1->isr & USART_ISR_TXE))
|
|
|
+ cpu_relax();
|
|
|
+ usart1->tdr = c;
|
|
|
+#endif
|
|
|
}
|
|
|
|
|
|
int vprintk(const char *format, va_list ap)
|
|
@@ -68,13 +80,21 @@ void console_init(void)
|
|
|
{
|
|
|
/* Turn on the clocks. */
|
|
|
rcc->apb2enr |= RCC_APB2ENR_USART1EN;
|
|
|
+ peripheral_clock_delay();
|
|
|
|
|
|
/* Enable TX pin (PA9) for USART output, RX pin (PA10) as input. */
|
|
|
+#if STM32F == 1
|
|
|
gpio_configure_pin(gpioa, 9, AFO_pushpull(_10MHz));
|
|
|
gpio_configure_pin(gpioa, 10, GPI_pull_up);
|
|
|
+#elif STM32F == 7
|
|
|
+ gpio_set_af(gpioa, 9, 7);
|
|
|
+ gpio_set_af(gpioa, 10, 7);
|
|
|
+ gpio_configure_pin(gpioa, 9, AFO_pushpull(_10MHz));
|
|
|
+ gpio_configure_pin(gpioa, 10, AFO_pushpull(_10MHz));
|
|
|
+#endif
|
|
|
|
|
|
/* BAUD, 8n1. */
|
|
|
- usart1->brr = SYSCLK / BAUD;
|
|
|
+ usart1->brr = PCLK / BAUD;
|
|
|
usart1->cr1 = (USART_CR1_UE | USART_CR1_TE | USART_CR1_RE);
|
|
|
}
|
|
|
|
|
@@ -82,7 +102,12 @@ void console_init(void)
|
|
|
* any serial input to cause a crash dump of the stuck context. */
|
|
|
void console_crash_on_input(void)
|
|
|
{
|
|
|
+#if STM32F == 1
|
|
|
(void)usart1->dr; /* clear UART_SR_RXNE */
|
|
|
+#elif STM32F == 7
|
|
|
+ usart1->rqr = USART_RQR_RXFRQ; /* clear ISR_RXNE */
|
|
|
+ usart1->icr = USART_ICR_ORECF; /* clear ISR_ORE */
|
|
|
+#endif
|
|
|
usart1->cr1 |= USART_CR1_RXNEIE;
|
|
|
IRQx_set_prio(USART1_IRQ, RESET_IRQ_PRI);
|
|
|
IRQx_enable(USART1_IRQ);
|