summaryrefslogtreecommitdiffstats
path: root/radiator-plc/stm32/app/pins.h
blob: 657cbf9d3b32ed868dec9b5397f6049569f01064 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#ifndef _PINS_H_
#define _PINS_H_

/* st seem to change these with every chip revision */

#define MAP_AF(a) do {   \
    gpio_set_mode( a ## _PORT, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_ALTFN_PUSHPULL, a ); \
  } while (0)

/* STM32F1 doesn't have AF pull up, but also doesn't disconnect af inputs so just use regular pull up */
#define MAP_AF_PU(a) do {    \
    gpio_set_mode( a ## _PORT, GPIO_MODE_INPUT, GPIO_CNF_INPUT_PULL_UPDOWN, a); \
    gpio_set( a ## _PORT, a); \
  } while (0)

#define MAP_AF_OD(a) do {    \
    gpio_set_mode( a ## _PORT, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_ALTFN_OPENDRAIN, a ); \
  } while (0)


#define MAP_OUTPUT_PP(a)  do { \
    gpio_set_mode( a ## _PORT, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, a ); \
  } while (0)


#define MAP_OUTPUT_OD(a)  do { \
    gpio_set_mode( a ## _PORT, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_OPENDRAIN, a ); \
  } while (0)

#define MAP_OUTPUT_OD_SLOW(a)  do { \
    gpio_set_mode( a ## _PORT, GPIO_MODE_OUTPUT_2_MHZ, GPIO_CNF_OUTPUT_OPENDRAIN, a ); \
  } while (0)


/* STM32F1 madly uses the output register to drive the other end of the resistor, so pull up  */
/* requires us to write a 1 there */

#define MAP_INPUT_PU(a)   do { \
    gpio_set_mode( a ## _PORT, GPIO_MODE_INPUT, GPIO_CNF_INPUT_PULL_UPDOWN, a); \
    gpio_set( a ## _PORT, a); \
  } while (0)


#define MAP_INPUT(a)  do { \
    gpio_set_mode( a ## _PORT, GPIO_MODE_INPUT, GPIO_CNF_INPUT_FLOAT, a); \
  } while (0)


#define CLEAR(a) gpio_clear( a ## _PORT, a)
#define SET(a) gpio_set( a ## _PORT, a)
#define GET(a) gpio_get( a ## _PORT, a)

#endif