// vim: shiftwidth=4 tabstop=4 noexpandtab #include #include #include #include #include static void clock_init(void); static void gpio_init(void); void tim2_isr(void); static void nvic_init(void); static void timer_init(void); void main(void) { clock_init(); gpio_init(); nvic_init(); timer_init(); while(1); // wait forever } static void clock_init(void) { rcc_clock_setup_pll(&rcc_hse_configs[RCC_CLOCK_HSE8_72MHZ]); rcc_periph_clock_enable(RCC_GPIOC); // for PC13 blinking rcc_periph_clock_enable(RCC_TIM2); // for timer / counter 2 } static void gpio_init(void) { gpio_set_mode(GPIOC, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, GPIO13); } void tim2_isr(void) { gpio_toggle(GPIOC, GPIO13); TIM_SR(TIM2) &= ~TIM_SR_UIF; // clear interrrupt flag } static void nvic_init(void) { nvic_enable_irq(NVIC_TIM2_IRQ); nvic_set_priority(NVIC_TIM2_IRQ, 1); } static void timer_init(void) { gpio_set(GPIOC, GPIO13); TIM_CNT(TIM2) = 1; // set start value TIM_PSC(TIM2) = 1440; // set prescaler TIM_ARR(TIM2) = 50000; // interrupt value TIM_DIER(TIM2) |= TIM_DIER_UIE; // update interrupt enable TIM_CR1(TIM2) |= TIM_CR1_CEN; // enable timer }