int putchar(int ch){ while (!(USART1->SR & USART_SR_TXE)); USART1->DR = (ch & 0xFF); return (ch); } int getchar(void) { while (!(USART1->SR & USART_SR_RXNE)); return ((int)(USART1->DR & 0xFF)); } void usart_setup(void){ RCC->APB2ENR |= RCC_APB2ENR_USART1EN; // enable clock for USART1 USART1->BRR = (500000L/38400L)<<4; // set baudrate USART1->CR1 |= (USART_CR1_RE | USART_CR1_TE); // RX, TX enable USART1->CR1 |= USART_CR1_UE; // USART enable } вот весь мой юсарт. еще настройка выходов: GPIOA->CRH |= GPIO_CRH_MODE9_0 | GPIO_CRH_MODE9_1; GPIOA->CRH &= ~GPIO_CRH_CNF9_0; GPIOA->CRH |= GPIO_CRH_CNF9_1; причем альтернативную функцию я не настраивал, но все работает. надо даташит внимательнее поглядеть, может там по дефолту юсарт стоит или еще чего-то.