#include int main(void) { RCC->AHBENR |= RCC_AHBENR_GPIOAEN; RCC->APB2ENR |= RCC_APB2ENR_USART1EN; GPIOA->MODER |= (2 << GPIO_MODER_MODER9_Pos); GPIOA->AFR[1] = (7 << (9-8)*4); SystemCoreClockUpdate(); int apb2_clock = SystemCoreClock / APB2_PRESC; int baudrate = 115200; USART1->CR1 = USART_CR1_MME | USART_CR1_TE; USART1->BRR = (apb2_clock + baudrate/2) / baudrate; USART1->CR1 |= USART_CR1_UE; char s[12] = { '0', '0', '0', '0', '0', ' ', 'T', 'E', 'S', 'T', '\n', '\0'}; int line = 0; char *c = s; USART1->TDR = *(c++); /* Kick off transmission */ while (23) { if (USART1->ISR & USART_ISR_TXE) { for (int i=0; i<100; i++) asm volatile ("nop"); USART1->TDR = *(c++); if (!*c) { c = s; line++; int tmp = line; tmp %= 100000; s[0] = '0' + tmp/10000; tmp %= 10000; s[1] = '0' + tmp/1000; tmp %= 1000; s[2] = '0' + tmp/100; tmp %= 100; s[3] = '0' + tmp/10; tmp %= 10; s[4] = '0' + tmp; } } } } void __libc_init_array (void) __attribute__((weak)); void __libc_init_array () { }