]> mj.ucw.cz Git - home-hw.git/blob - protab/blink3/blink.c
Protab: blink 3
[home-hw.git] / protab / blink3 / blink.c
1 #include <libopencm3/cm3/systick.h>
2 #include <libopencm3/stm32/rcc.h>
3 #include <libopencm3/stm32/gpio.h>
4
5 static void delay_ms(unsigned int ms)
6 {
7         systick_clear();
8         for (unsigned int i=0; i<ms; i++)
9                 while (!systick_get_countflag())
10                         ;
11 }
12
13 int main(void)
14 {
15         rcc_clock_setup_in_hse_8mhz_out_72mhz();
16         rcc_periph_clock_enable(RCC_GPIOA);
17         rcc_periph_clock_enable(RCC_GPIOC);
18
19         // PC13 = BluePill LED
20         gpio_set_mode(GPIOC, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, GPIO13);
21
22         // PA0 ... PA2 = LEDs
23         gpio_set_mode(GPIOA, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, GPIO0);
24         gpio_set_mode(GPIOA, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, GPIO1);
25         gpio_set_mode(GPIOA, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, GPIO2);
26         gpio_clear(GPIOA, GPIO0);
27         gpio_clear(GPIOA, GPIO1);
28         gpio_clear(GPIOA, GPIO2);
29
30         systick_set_clocksource(STK_CSR_CLKSOURCE_AHB);
31         systick_set_reload(71999);
32         systick_counter_enable();
33
34         for (;;) {
35                 gpio_set(GPIOA, GPIO0);
36                 delay_ms(100);
37                 gpio_clear(GPIOA, GPIO0);
38
39                 gpio_set(GPIOA, GPIO1);
40                 delay_ms(100);
41                 gpio_clear(GPIOA, GPIO1);
42
43                 gpio_set(GPIOA, GPIO2);
44                 delay_ms(100);
45                 gpio_clear(GPIOA, GPIO2);
46
47                 gpio_clear(GPIOC, GPIO13);
48                 delay_ms(100);
49                 gpio_set(GPIOC, GPIO13);
50         }
51
52         return 0;
53 }