Как обычно включаем порты на которых висят светодиоды и УСАПП №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);