|  | @@ -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);
 |