static void uart_init(void) { /* set baudrate */ STM32_USART_BRR(UARTN) = DIV_ROUND_NEAREST(CPU_CLOCK, CONFIG_UART_BAUD_RATE); /* UART enabled, 8 Data bits, oversampling x16, no parity */ STM32_USART_CR1(UARTN) = STM32_USART_CR1_UE | STM32_USART_CR1_TE | STM32_USART_CR1_RE; /* 1 stop bit, no fancy stuff */ STM32_USART_CR2(UARTN) = 0x0000; /* DMA disabled, special modes disabled, error interrupt disabled */ STM32_USART_CR3(UARTN) = 0x0000; }
static void usart_variant_enable(struct usart_config const *config) { /* Use single-bit sampling */ STM32_USART_CR3(config->hw->base) |= STM32_USART_CR3_ONEBIT; /* * Make sure we register this config before enabling the HW. * If we did it the other way around the FREQ_CHANGE hook could be * called before we update the configs array and we would miss the * clock frequency change event, leaving our baud rate divisor wrong. */ configs[config->hw->index] = config; usart_set_baud_f0_l(config, clock_get_freq()); task_enable_irq(config->hw->irq); }