Как обычно включаем порты на которых висят светодиоды и УСАПП №1, а также Таймер и собственно сам УСАПП №1:
/* enable led & usart port*/
RCC->AHB1ENR |= RCC_AHB1ENR_GPIODEN | RCC_AHB1ENR_GPIOBEN;
/* enable tim4 */
RCC->APB1ENR |= RCC_APB1ENR_TIM4EN;
/* enable usart1 */
RCC->APB2ENR |= RCC_APB2ENR_USART1EN;
После этого инициализируем порты ввода-вывода, настроив один на вывод, а другой на работу с альтернативными функциями, не забыв при этом указать с какими альтернативными функциями он будет работать:
/* set red led pin to output state */
LED_PORT->MODER |= GPIO_MODER_MODER14_0;
/* setup usart1 pins to af mode */
GPIOB->MODER |= GPIO_MODER_MODER6_1;
/* select af block usart1..3(af7 function) to usart pins */
GPIOB->AFR[0] |= (GPIO_AF7_USART1_3 << GPIO_AFP6);
Настраиваем УСАПП задавая для него частоту передачи (остальные настройки трогать не надо т.к. они находятся в нужном состоянии по умолчанию:
/* usart1 setup baudrate */ /** 115200 baud 16MHz/16/115200 = 8.68 */
USART1->BRR = (8 << 4) + 5;
Включаем передатчик и собственно сам УСАПП №1:
/* usart1 enable block and enable tx line */
USART1->CR1 |= USART_CR1_TE;
USART1->CR1 |= USART_CR1_UE;
Настраиваем таймер и включаем для него прерывание:
/* tim4 setup presc */
TIM4->PSC = 16000 - 1;
/* tim4 setup preload reg */
TIM4->ARR = 500;
/* tim4 enable update interrupt */
TIM4->DIER |= TIM_DIER_UIE;
/* tim4 enable clock */
TIM4->CR1 |= TIM_CR1_CEN;
/* nvic enable tim4 irq */
NVIC_EnableIRQ(TIM4_IRQn);