Paparazzi UAS  v7.0_unstable
Paparazzi is a free software Unmanned Aircraft System.
board.h
Go to the documentation of this file.
1 /*
2  ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
3 
4  Licensed under the Apache License, Version 2.0 (the "License");
5  you may not use this file except in compliance with the License.
6  You may obtain a copy of the License at
7 
8  http://www.apache.org/licenses/LICENSE-2.0
9 
10  Unless required by applicable law or agreed to in writing, software
11  distributed under the License is distributed on an "AS IS" BASIS,
12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  See the License for the specific language governing permissions and
14  limitations under the License.
15 */
16 
17 #ifndef _BOARD_H_
18 #define _BOARD_H_
19 
20 /*
21  * Setup for Pixhawk PX4FMU_2.4 board
22  * Note the MCU used is STM32F427VIT6
23  */
24 
25 /*
26  * Board identifier.
27  */
28 #define BOARD_PX4FMU_v2
29 #define BOARD_NAME "Pixhawk PX4 FMU v 2.4"
30 
31 /*
32  * Board oscillators-related settings.
33  * NOTE: LSE NOT? fitted.
34  */
35 #if !defined(STM32_LSECLK)
36 #define STM32_LSECLK 0 // originally was 32000 ?
37 #endif
38 
39 #if !defined(STM32_HSECLK)
40 #define STM32_HSECLK 24000000
41 #endif
42 
43 
44 /*
45  * Board voltages.
46  * Required for performance limits calculation.
47  */
48 #define STM32_VDD 330
49 
50 /*
51  * MCU type as defined in the ST header file stm32f4xx.h.
52  */
53 #define STM32F407xx
54 
55 /*
56  * I/O ports initial setup, this configuration is established soon after reset
57  * in the initialization code.
58  * Please refer to the STM32 Reference Manual for details.
59  */
60 #define PIN_MODE_INPUT(n) (0U << ((n) * 2U))
61 #define PIN_MODE_OUTPUT(n) (1U << ((n) * 2U))
62 #define PIN_MODE_ALTERNATE(n) (2U << ((n) * 2U))
63 #define PIN_MODE_ANALOG(n) (3U << ((n) * 2U))
64 #define PIN_ODR_LOW(n) (0U << (n))
65 #define PIN_ODR_HIGH(n) (1U << (n))
66 #define PIN_OTYPE_PUSHPULL(n) (0U << (n))
67 #define PIN_OTYPE_OPENDRAIN(n) (1U << (n))
68 #define PIN_OSPEED_2M(n) (0U << ((n) * 2U))
69 #define PIN_OSPEED_25M(n) (1U << ((n) * 2U))
70 #define PIN_OSPEED_50M(n) (2U << ((n) * 2U))
71 #define PIN_OSPEED_100M(n) (3U << ((n) * 2U))
72 #define PIN_PUPDR_FLOATING(n) (0U << ((n) * 2U))
73 #define PIN_PUPDR_PULLUP(n) (1U << ((n) * 2U))
74 #define PIN_PUPDR_PULLDOWN(n) (2U << ((n) * 2U))
75 #define PIN_AFIO_AF(n, v) ((v) << (((n) % 8U) * 4U))
76 
77 /*
78  * Port A setup.
79  *
80  * PA0 - Alternate Push Pull output 50MHz (UART4_TX)
81  * PA1 - Alternate Digital input (UART4_RX)
82  * PA2 - Analog input (BATT VOLTAGE SENS - ADC in)
83  * PA3 - Analog input (BATT CURRENT SENS - ADC in)
84  * PA4 - Analog input (VDD 5V SENS - ADC in)
85  * PA5 - Alternate Push Pull output 50MHz (EXTSPI1_SCK)
86  * PA6 - Alternate Digital input. (EXTSPI1_MISO)
87  * PA7 - Alternate Push Pull output 50MHz (EXTSPI1_MOSI)
88  * PA8 - Digital input (!VDD_5V_PERIPH_EN)
89  * PA9 - Digital input. (USB_VBUS)
90  * PA10 - Alternate Digital input (UART1_Rx)
91  * PA11 - Alternate input (USB_DM)
92  * PA12 - Alternate input (USB_DP)
93  * PA13 - Alternate Digital input (SWDIO)
94  * PA14 - Alternate Digital input (SWCLCK)
95  * PA15 - Digital output (ALARM)
96  */
97 #define VAL_GPIOA_MODER (PIN_MODE_ALTERNATE(0)| \
98  PIN_MODE_ALTERNATE(1) | \
99  PIN_MODE_ANALOG(2) | \
100  PIN_MODE_ANALOG(3) | \
101  PIN_MODE_ANALOG(4) | \
102  PIN_MODE_ALTERNATE(5) | \
103  PIN_MODE_ALTERNATE(6) | \
104  PIN_MODE_ALTERNATE(7) | \
105  PIN_MODE_INPUT(8) | \
106  PIN_MODE_INPUT(9) | \
107  PIN_MODE_ALTERNATE(10) | \
108  PIN_MODE_ALTERNATE(11) | \
109  PIN_MODE_ALTERNATE(12) | \
110  PIN_MODE_ALTERNATE(13) | \
111  PIN_MODE_ALTERNATE(14) | \
112  PIN_MODE_OUTPUT(15))
113 #define VAL_GPIOA_OTYPER (PIN_OTYPE_PUSHPULL(0) | \
114  PIN_OTYPE_PUSHPULL(1) | \
115  PIN_OTYPE_PUSHPULL(2) | \
116  PIN_OTYPE_PUSHPULL(3) | \
117  PIN_OTYPE_PUSHPULL(4) | \
118  PIN_OTYPE_PUSHPULL(5) | \
119  PIN_OTYPE_PUSHPULL(6) | \
120  PIN_OTYPE_PUSHPULL(7) | \
121  PIN_OTYPE_PUSHPULL(8) | \
122  PIN_OTYPE_PUSHPULL(9) | \
123  PIN_OTYPE_PUSHPULL(10) | \
124  PIN_OTYPE_PUSHPULL(11) | \
125  PIN_OTYPE_PUSHPULL(12) | \
126  PIN_OTYPE_PUSHPULL(13) | \
127  PIN_OTYPE_PUSHPULL(14) | \
128  PIN_OTYPE_OPENDRAIN(15))
129 #define VAL_GPIOA_OSPEEDR (PIN_OSPEED_100M(0) | \
130  PIN_OSPEED_100M(1) | \
131  PIN_OSPEED_100M(2) | \
132  PIN_OSPEED_100M(3) | \
133  PIN_OSPEED_100M(4) | \
134  PIN_OSPEED_50M(5) | \
135  PIN_OSPEED_50M(6) | \
136  PIN_OSPEED_50M(7) | \
137  PIN_OSPEED_100M(8) | \
138  PIN_OSPEED_100M(9) | \
139  PIN_OSPEED_100M(10) | \
140  PIN_OSPEED_100M(11) | \
141  PIN_OSPEED_100M(12) | \
142  PIN_OSPEED_100M(13) | \
143  PIN_OSPEED_100M(14) | \
144  PIN_OSPEED_100M(15))
145 #define VAL_GPIOA_PUPDR (PIN_PUPDR_FLOATING(0) | \
146  PIN_PUPDR_FLOATING(1) | \
147  PIN_PUPDR_FLOATING(2) | \
148  PIN_PUPDR_FLOATING(3) | \
149  PIN_PUPDR_FLOATING(4) | \
150  PIN_PUPDR_FLOATING(5) | \
151  PIN_PUPDR_FLOATING(6) | \
152  PIN_PUPDR_FLOATING(7) | \
153  PIN_PUPDR_FLOATING(8) | \
154  PIN_PUPDR_FLOATING(9) | \
155  PIN_PUPDR_FLOATING(10) | \
156  PIN_PUPDR_FLOATING(11) | \
157  PIN_PUPDR_FLOATING(12) | \
158  PIN_PUPDR_FLOATING(13) | \
159  PIN_PUPDR_FLOATING(14) | \
160  PIN_PUPDR_FLOATING(15))
161 #define VAL_GPIOA_ODR (PIN_ODR_HIGH(0) | \
162  PIN_ODR_HIGH(1) | \
163  PIN_ODR_HIGH(2) | \
164  PIN_ODR_HIGH(3) | \
165  PIN_ODR_HIGH(4) | \
166  PIN_ODR_HIGH(5) | \
167  PIN_ODR_HIGH(6) | \
168  PIN_ODR_HIGH(7) | \
169  PIN_ODR_HIGH(8) | \
170  PIN_ODR_HIGH(9) | \
171  PIN_ODR_HIGH(10) | \
172  PIN_ODR_HIGH(11) | \
173  PIN_ODR_HIGH(12) | \
174  PIN_ODR_HIGH(13) | \
175  PIN_ODR_HIGH(14) | \
176  PIN_ODR_HIGH(15))
177 #define VAL_GPIOA_AFRL (PIN_AFIO_AF(0, 8) | \
178  PIN_AFIO_AF(1, 8) | \
179  PIN_AFIO_AF(2, 0) | \
180  PIN_AFIO_AF(3, 0) | \
181  PIN_AFIO_AF(4, 0) | \
182  PIN_AFIO_AF(5, 5) | \
183  PIN_AFIO_AF(6, 5) | \
184  PIN_AFIO_AF(7, 5))
185 #define VAL_GPIOA_AFRH (PIN_AFIO_AF(8, 0) | \
186  PIN_AFIO_AF(9, 0) | \
187  PIN_AFIO_AF(10, 7) | \
188  PIN_AFIO_AF(11, 10) | \
189  PIN_AFIO_AF(12, 10) | \
190  PIN_AFIO_AF(13, 0) | \
191  PIN_AFIO_AF(14, 0) | \
192  PIN_AFIO_AF(15, 0))
193 
194 /*
195  * Port B setup:
196  * PB0 - Digital input (GYRO_DRDY) #
197  * PB1 - Digital input (MAG_DRDY) #
198  * PB2 - Digital input (BOOT) # ?
199  * PB3 - Digital input (JTAG_TDO/SWD) #
200  * PB4 - Digital input (ACCEL_DRDY) #
201  * PB5 - Digital input (!VDD_BRICK_VALID) #
202  * PB6 - Alternate Push Pull output 50MHz (CAN2_TX)
203  * PB7 - Digital input (!VDD_SERVO_VALID)
204  * PB8 - Alternate Open Drain output 50MHz (I2C1_SCL)
205  * PB9 - Alternate Open Drain output 50MHz (I2C1_SDA)
206  * PB10 - Alternate Open Drain output 50MHz (I2C2_SCL)
207  * PB11 - Alternate Open Drain output 50MHz (I2C2_SDA)
208  * PB12 - Alternate Push Pull output 50MHz (CAN2_RX)
209  * PB13 - Alternate Push Pull output 50MHz (FRAM_SPI2_SCK) #
210  * PB14 - Alternate Digital input (FRAM_SPI2_MISO) #
211  * PB15 - Alternate Push Pull output 50MHz (FRAM_SPI2_MOSI) #
212  */
213 #define VAL_GPIOB_MODER (PIN_MODE_INPUT(0) | \
214  PIN_MODE_INPUT(1) | \
215  PIN_MODE_INPUT(2) | \
216  PIN_MODE_ALTERNATE(3) | \
217  PIN_MODE_INPUT(4) | \
218  PIN_MODE_INPUT(5) | \
219  PIN_MODE_ALTERNATE(6) | \
220  PIN_MODE_INPUT(7) | \
221  PIN_MODE_ALTERNATE(8) | \
222  PIN_MODE_ALTERNATE(9) | \
223  PIN_MODE_ALTERNATE(10) | \
224  PIN_MODE_ALTERNATE(11) | \
225  PIN_MODE_ALTERNATE(12) | \
226  PIN_MODE_ALTERNATE(13) | \
227  PIN_MODE_ALTERNATE(14) | \
228  PIN_MODE_ALTERNATE(15))
229 #define VAL_GPIOB_OTYPER (PIN_OTYPE_PUSHPULL(0) | \
230  PIN_OTYPE_PUSHPULL(1) | \
231  PIN_OTYPE_PUSHPULL(2) | \
232  PIN_OTYPE_PUSHPULL(3) | \
233  PIN_OTYPE_PUSHPULL(4) | \
234  PIN_OTYPE_PUSHPULL(5) | \
235  PIN_OTYPE_PUSHPULL(6) | \
236  PIN_OTYPE_PUSHPULL(7) | \
237  PIN_OTYPE_OPENDRAIN(8) | \
238  PIN_OTYPE_OPENDRAIN(9) | \
239  PIN_OTYPE_OPENDRAIN(10) | \
240  PIN_OTYPE_OPENDRAIN(11) | \
241  PIN_OTYPE_PUSHPULL(12) | \
242  PIN_OTYPE_PUSHPULL(13) | \
243  PIN_OTYPE_PUSHPULL(14) | \
244  PIN_OTYPE_PUSHPULL(15))
245 #define VAL_GPIOB_OSPEEDR (PIN_OSPEED_50M(0) | \
246  PIN_OSPEED_50M(1) | \
247  PIN_OSPEED_50M(2) | \
248  PIN_OSPEED_100M(3) | \
249  PIN_OSPEED_50M(4) | \
250  PIN_OSPEED_50M(5) | \
251  PIN_OSPEED_50M(6) | \
252  PIN_OSPEED_50M(7) | \
253  PIN_OSPEED_50M(8) | \
254  PIN_OSPEED_50M(9) | \
255  PIN_OSPEED_50M(10) | \
256  PIN_OSPEED_50M(11) | \
257  PIN_OSPEED_50M(12) | \
258  PIN_OSPEED_50M(13) | \
259  PIN_OSPEED_50M(14) | \
260  PIN_OSPEED_50M(15))
261 #define VAL_GPIOB_PUPDR (PIN_PUPDR_FLOATING(0) | \
262  PIN_PUPDR_FLOATING(1) | \
263  PIN_PUPDR_FLOATING(2) | \
264  PIN_PUPDR_FLOATING(3) | \
265  PIN_PUPDR_FLOATING(4) | \
266  PIN_PUPDR_FLOATING(5) | \
267  PIN_PUPDR_FLOATING(6) | \
268  PIN_PUPDR_FLOATING(7) | \
269  PIN_PUPDR_FLOATING(8) | \
270  PIN_PUPDR_FLOATING(9) | \
271  PIN_PUPDR_FLOATING(10) | \
272  PIN_PUPDR_FLOATING(11) | \
273  PIN_PUPDR_FLOATING(12) | \
274  PIN_PUPDR_FLOATING(13) | \
275  PIN_PUPDR_FLOATING(14) | \
276  PIN_PUPDR_FLOATING(15))
277 #define VAL_GPIOB_ODR (PIN_ODR_HIGH(0) | \
278  PIN_ODR_HIGH(1) | \
279  PIN_ODR_HIGH(2) | \
280  PIN_ODR_HIGH(3) | \
281  PIN_ODR_HIGH(4) | \
282  PIN_ODR_HIGH(5) | \
283  PIN_ODR_HIGH(6) | \
284  PIN_ODR_HIGH(7) | \
285  PIN_ODR_HIGH(8) | \
286  PIN_ODR_HIGH(9) | \
287  PIN_ODR_HIGH(10) | \
288  PIN_ODR_HIGH(11) | \
289  PIN_ODR_HIGH(12) | \
290  PIN_ODR_HIGH(13) | \
291  PIN_ODR_HIGH(14) | \
292  PIN_ODR_HIGH(15))
293 #define VAL_GPIOB_AFRL (PIN_AFIO_AF(0, 0) | \
294  PIN_AFIO_AF(1, 0) | \
295  PIN_AFIO_AF(2, 0) | \
296  PIN_AFIO_AF(3, 0) | \
297  PIN_AFIO_AF(4, 0) | \
298  PIN_AFIO_AF(5, 0) | \
299  PIN_AFIO_AF(6, 9) | \
300  PIN_AFIO_AF(7, 0))
301 #define VAL_GPIOB_AFRH (PIN_AFIO_AF(8, 4) | \
302  PIN_AFIO_AF(9, 4) | \
303  PIN_AFIO_AF(10, 4) | \
304  PIN_AFIO_AF(11, 4) | \
305  PIN_AFIO_AF(12, 9) | \
306  PIN_AFIO_AF(13, 5) | \
307  PIN_AFIO_AF(14, 5) | \
308  PIN_AFIO_AF(15, 5))
309 
310 /*
311  * Port C setup:
312  * PC0 - Digital input (!VBUS_VALID) #
313  * PC1 - Analog input (ADC3) #
314  * PC2 - Push Pull output 50MHz. (!MPU_CS) #
315  * PC3 - Analog input (ADC1) #
316  * PC4 - Analog input (ADC2) #
317  * PC5 - Analog input (PRESSURE_SENS - ADC) #
318  * PC6 - Alternate Push Pull output 50MHz (UART6-TX)
319  * PC7 - Alternate Digital intput (UART6_RX)
320  * PC8 - Alternate pullup 100MHz (SDIO_D0)
321  * PC9 - Alternate pullup 100MHz (SDIO_D1)
322  * PC10 - Alternate pullup 100MHz (SDIO_D2)
323  * PC11 - Alternate pullup 100MHz (SDIO_D3)
324  * PC12 - Alternate floating 100MHz (SDIO_CK)
325  * PC13 - Push Pull output 50MHz. (!GYRO_SS) #
326  * PC14 - Digital input (GPIO_EXT_1)
327  * PC15 - Push Pull output 50MHz. (!ACCEL_MAG_SS)
328  */
329 #define VAL_GPIOC_MODER (PIN_MODE_INPUT(0) |\
330  PIN_MODE_INPUT(1) | \
331  PIN_MODE_OUTPUT(2) | \
332  PIN_MODE_INPUT(3) | \
333  PIN_MODE_INPUT(4) | \
334  PIN_MODE_INPUT(5) | \
335  PIN_MODE_ALTERNATE(6) | \
336  PIN_MODE_ALTERNATE(7) | \
337  PIN_MODE_ALTERNATE(8) | \
338  PIN_MODE_ALTERNATE(9) | \
339  PIN_MODE_ALTERNATE(10) | \
340  PIN_MODE_ALTERNATE(11) | \
341  PIN_MODE_ALTERNATE(12) | \
342  PIN_MODE_OUTPUT(13) | \
343  PIN_MODE_INPUT(14) | \
344  PIN_MODE_OUTPUT(15))
345 #define VAL_GPIOC_OTYPER (PIN_OTYPE_PUSHPULL(0) |\
346  PIN_OTYPE_PUSHPULL(1) | \
347  PIN_OTYPE_PUSHPULL(2) | \
348  PIN_OTYPE_PUSHPULL(3) | \
349  PIN_OTYPE_PUSHPULL(4) | \
350  PIN_OTYPE_PUSHPULL(5) | \
351  PIN_OTYPE_PUSHPULL(6) | \
352  PIN_OTYPE_PUSHPULL(7) | \
353  PIN_OTYPE_PUSHPULL(8) | \
354  PIN_OTYPE_PUSHPULL(9) | \
355  PIN_OTYPE_PUSHPULL(10) | \
356  PIN_OTYPE_PUSHPULL(11) | \
357  PIN_OTYPE_PUSHPULL(12) | \
358  PIN_OTYPE_PUSHPULL(13) | \
359  PIN_OTYPE_PUSHPULL(14) | \
360  PIN_OTYPE_PUSHPULL(15))
361 #define VAL_GPIOC_OSPEEDR (PIN_OSPEED_50M(0) |\
362  PIN_OSPEED_50M(1) | \
363  PIN_OSPEED_50M(2) | \
364  PIN_OSPEED_50M(3) | \
365  PIN_OSPEED_50M(4) | \
366  PIN_OSPEED_50M(5) | \
367  PIN_OSPEED_50M(6) | \
368  PIN_OSPEED_50M(7) | \
369  PIN_OSPEED_50M(8) | \
370  PIN_OSPEED_50M(9) | \
371  PIN_OSPEED_50M(10) | \
372  PIN_OSPEED_50M(11) | \
373  PIN_OSPEED_50M(12) | \
374  PIN_OSPEED_2M(13) | \
375  PIN_OSPEED_50M(14) | \
376  PIN_OSPEED_2M(15))
377 #define VAL_GPIOC_PUPDR (PIN_PUPDR_FLOATING(0) |\
378  PIN_PUPDR_FLOATING(1) | \
379  PIN_PUPDR_FLOATING(2) | \
380  PIN_PUPDR_FLOATING(3) | \
381  PIN_PUPDR_FLOATING(4) | \
382  PIN_PUPDR_FLOATING(5) | \
383  PIN_PUPDR_FLOATING(6) | \
384  PIN_PUPDR_FLOATING(7) | \
385  PIN_PUPDR_PULLUP(8) | \
386  PIN_PUPDR_PULLUP(9) | \
387  PIN_PUPDR_PULLUP(10) | \
388  PIN_PUPDR_PULLUP(11) | \
389  PIN_PUPDR_FLOATING(12) | \
390  PIN_PUPDR_FLOATING(13) | \
391  PIN_PUPDR_FLOATING(14) | \
392  PIN_PUPDR_FLOATING(15))
393 #define VAL_GPIOC_ODR (PIN_ODR_HIGH(0) | \
394  PIN_ODR_HIGH(1) | \
395  PIN_ODR_HIGH(2) | \
396  PIN_ODR_HIGH(3) | \
397  PIN_ODR_HIGH(4) | \
398  PIN_ODR_HIGH(5) | \
399  PIN_ODR_HIGH(6) | \
400  PIN_ODR_HIGH(7) | \
401  PIN_ODR_HIGH(8) | \
402  PIN_ODR_HIGH(9) | \
403  PIN_ODR_HIGH(10) | \
404  PIN_ODR_HIGH(11) | \
405  PIN_ODR_HIGH(12) | \
406  PIN_ODR_HIGH(13) | \
407  PIN_ODR_HIGH(14) | \
408  PIN_ODR_HIGH(15))
409 #define VAL_GPIOC_AFRL (PIN_AFIO_AF(0, 0) |\
410  PIN_AFIO_AF(1, 0) | \
411  PIN_AFIO_AF(2, 0) | \
412  PIN_AFIO_AF(3, 0) | \
413  PIN_AFIO_AF(4, 0) | \
414  PIN_AFIO_AF(5, 0) | \
415  PIN_AFIO_AF(6, 8) | \
416  PIN_AFIO_AF(7, 8))
417 #define VAL_GPIOC_AFRH (PIN_AFIO_AF(8, 12) | \
418  PIN_AFIO_AF(9, 12) | \
419  PIN_AFIO_AF(10, 12) | \
420  PIN_AFIO_AF(11, 12) | \
421  PIN_AFIO_AF(12, 12) | \
422  PIN_AFIO_AF(13, 0) | \
423  PIN_AFIO_AF(14, 0) | \
424  PIN_AFIO_AF(15, 0))
425 
426 /*
427  * Port D setup:
428  * PD0 - CAN1_RX.
429  * PD1 - CAN1_TX
430  * PD2 - SDIO_CMD
431  * PD3 - UART2_CTS
432  * PD4 - UART2_RTS
433  * PD5 - UART2_TX
434  * PD6 - UART2_RX
435  * PD7 - !BARO_CS
436  * PD8 - UART3_TX
437  * PD9 - UART3_RX
438  * PD10 - !FRAM_CS
439  * PD11 - UART3_CTS
440  * PD12 - UART3_RTS
441  * PD13 - SERVO_5
442  * PD14 - SERVO_6
443  * PD15 - MPU_DRDY
444  */
445 #define VAL_GPIOD_MODER (PIN_MODE_ALTERNATE(0) | \
446  PIN_MODE_ALTERNATE(1) | \
447  PIN_MODE_ALTERNATE(2) | \
448  PIN_MODE_ALTERNATE(3) | \
449  PIN_MODE_ALTERNATE(4) | \
450  PIN_MODE_ALTERNATE(5) | \
451  PIN_MODE_ALTERNATE(6) | \
452  PIN_MODE_OUTPUT(7) | \
453  PIN_MODE_ALTERNATE(8) | \
454  PIN_MODE_ALTERNATE(9) | \
455  PIN_MODE_OUTPUT(10) | \
456  PIN_MODE_ALTERNATE(11) | \
457  PIN_MODE_ALTERNATE(12) | \
458  PIN_MODE_INPUT(13) | \
459  PIN_MODE_INPUT(14) | \
460  PIN_MODE_INPUT(15))
461 #define VAL_GPIOD_OTYPER (PIN_OTYPE_PUSHPULL(0) | \
462  PIN_OTYPE_PUSHPULL(1) | \
463  PIN_OTYPE_PUSHPULL(2) | \
464  PIN_OTYPE_PUSHPULL(3) | \
465  PIN_OTYPE_PUSHPULL(4) | \
466  PIN_OTYPE_PUSHPULL(5) |\
467  PIN_OTYPE_PUSHPULL(6) | \
468  PIN_OTYPE_PUSHPULL(7) | \
469  PIN_OTYPE_PUSHPULL(8) | \
470  PIN_OTYPE_PUSHPULL(9) | \
471  PIN_OTYPE_PUSHPULL(10) | \
472  PIN_OTYPE_PUSHPULL(11) | \
473  PIN_OTYPE_PUSHPULL(12) | \
474  PIN_OTYPE_PUSHPULL(13) | \
475  PIN_OTYPE_PUSHPULL(14) | \
476  PIN_OTYPE_PUSHPULL(15))
477 #define VAL_GPIOD_OSPEEDR (PIN_OSPEED_100M(0) | \
478  PIN_OSPEED_100M(1) | \
479  PIN_OSPEED_100M(2) | \
480  PIN_OSPEED_100M(3) | \
481  PIN_OSPEED_100M(4) | \
482  PIN_OSPEED_100M(5) | \
483  PIN_OSPEED_100M(6) | \
484  PIN_OSPEED_2M(7) | \
485  PIN_OSPEED_100M(8) | \
486  PIN_OSPEED_100M(9) | \
487  PIN_OSPEED_100M(10) | \
488  PIN_OSPEED_100M(11) | \
489  PIN_OSPEED_100M(12) | \
490  PIN_OSPEED_100M(13) | \
491  PIN_OSPEED_100M(14) | \
492  PIN_OSPEED_100M(15))
493 #define VAL_GPIOD_PUPDR (PIN_PUPDR_FLOATING(0) | \
494  PIN_PUPDR_FLOATING(1) | \
495  PIN_PUPDR_FLOATING(2) | \
496  PIN_PUPDR_FLOATING(3) | \
497  PIN_PUPDR_FLOATING(4) | \
498  PIN_PUPDR_FLOATING(5) |\
499  PIN_PUPDR_FLOATING(6) | \
500  PIN_PUPDR_FLOATING(7) | \
501  PIN_PUPDR_FLOATING(8) | \
502  PIN_PUPDR_FLOATING(9) | \
503  PIN_PUPDR_FLOATING(10) | \
504  PIN_PUPDR_FLOATING(11) | \
505  PIN_PUPDR_FLOATING(12) | \
506  PIN_PUPDR_FLOATING(13) | \
507  PIN_PUPDR_FLOATING(14) | \
508  PIN_PUPDR_FLOATING(15))
509 #define VAL_GPIOD_ODR (PIN_ODR_HIGH(0) | \
510  PIN_ODR_HIGH(1) | \
511  PIN_ODR_HIGH(2) | \
512  PIN_ODR_HIGH(3) | \
513  PIN_ODR_HIGH(4) | \
514  PIN_ODR_HIGH(5) | \
515  PIN_ODR_HIGH(6) | \
516  PIN_ODR_HIGH(7) | \
517  PIN_ODR_HIGH(8) | \
518  PIN_ODR_HIGH(9) | \
519  PIN_ODR_HIGH(10) | \
520  PIN_ODR_HIGH(11) | \
521  PIN_ODR_HIGH(12) | \
522  PIN_ODR_HIGH(13) | \
523  PIN_ODR_HIGH(14) | \
524  PIN_ODR_HIGH(15))
525 #define VAL_GPIOD_AFRL (PIN_AFIO_AF(0, 9) | \
526  PIN_AFIO_AF(1, 9) | \
527  PIN_AFIO_AF(2, 12) | \
528  PIN_AFIO_AF(3, 7) | \
529  PIN_AFIO_AF(4, 7) | \
530  PIN_AFIO_AF(5, 7) | \
531  PIN_AFIO_AF(6, 7) | \
532  PIN_AFIO_AF(7, 0))
533 #define VAL_GPIOD_AFRH (PIN_AFIO_AF(8, 7) | \
534  PIN_AFIO_AF(9, 7) | \
535  PIN_AFIO_AF(10, 0) | \
536  PIN_AFIO_AF(11, 7) | \
537  PIN_AFIO_AF(12, 7) | \
538  PIN_AFIO_AF(13, 0) | \
539  PIN_AFIO_AF(14, 0) | \
540  PIN_AFIO_AF(15, 0))
541 
542 /*
543  * Port E setup:
544  * PE0 - UART8_RX
545  * PE1 - UART8_TX
546  * PE2 - SPI4_EXT_SCK
547  * PE3 - VDD_3V3_SENSOR_EN
548  * PE4 - !SPI4_EXT_NSS
549  * PE5 - SPI4_EXT_MISO
550  * PE6 - SPI4_EXT_MOSI
551  * PE7 - UART7_RX
552  * PE8 - UART7_TX
553  * PE9 - SERVO_CH4
554  * PE10 - !VDD_HIPOWER_OC
555  * PE11 - SERVO_CH3
556  * PE12 - LED_AMBER
557  * PE13 - SERVO_CH2
558  * PE14 - SERVO_CH1
559  * PE15 - !VDD_5V_PERIPH_OC
560  */
561 #define VAL_GPIOE_MODER (PIN_MODE_ALTERNATE(0) | \
562  PIN_MODE_ALTERNATE(1) | \
563  PIN_MODE_ALTERNATE(2) | \
564  PIN_MODE_OUTPUT(3) | \
565  PIN_MODE_ALTERNATE(4) | \
566  PIN_MODE_ALTERNATE(5) | \
567  PIN_MODE_ALTERNATE(6) | \
568  PIN_MODE_ALTERNATE(7) | \
569  PIN_MODE_ALTERNATE(8) | \
570  PIN_MODE_INPUT(9) | \
571  PIN_MODE_INPUT(10) | \
572  PIN_MODE_INPUT(11) | \
573  PIN_MODE_OUTPUT(12) | \
574  PIN_MODE_INPUT(13) | \
575  PIN_MODE_INPUT(14) | \
576  PIN_MODE_INPUT(15))
577 #define VAL_GPIOE_OTYPER (PIN_OTYPE_PUSHPULL(0) | \
578  PIN_OTYPE_PUSHPULL(1) | \
579  PIN_OTYPE_PUSHPULL(2) | \
580  PIN_OTYPE_PUSHPULL(3) | \
581  PIN_OTYPE_PUSHPULL(4) | \
582  PIN_OTYPE_PUSHPULL(5) | \
583  PIN_OTYPE_PUSHPULL(6) | \
584  PIN_OTYPE_PUSHPULL(7) | \
585  PIN_OTYPE_PUSHPULL(8) | \
586  PIN_OTYPE_PUSHPULL(9) | \
587  PIN_OTYPE_PUSHPULL(10) | \
588  PIN_OTYPE_PUSHPULL(11) | \
589  PIN_OTYPE_OPENDRAIN(12) | \
590  PIN_OTYPE_PUSHPULL(13) | \
591  PIN_OTYPE_PUSHPULL(14) | \
592  PIN_OTYPE_PUSHPULL(15))
593 #define VAL_GPIOE_OSPEEDR (PIN_OSPEED_100M(0) | \
594  PIN_OSPEED_100M(1) | \
595  PIN_OSPEED_50M(2) | \
596  PIN_OSPEED_100M(3) | \
597  PIN_OSPEED_50M(4) | \
598  PIN_OSPEED_50M(5) | \
599  PIN_OSPEED_50M(6) | \
600  PIN_OSPEED_100M(7) | \
601  PIN_OSPEED_100M(8) | \
602  PIN_OSPEED_100M(9) | \
603  PIN_OSPEED_100M(10) | \
604  PIN_OSPEED_100M(11) | \
605  PIN_OSPEED_100M(12) | \
606  PIN_OSPEED_100M(13) | \
607  PIN_OSPEED_100M(14) | \
608  PIN_OSPEED_100M(15))
609 #define VAL_GPIOE_PUPDR (PIN_PUPDR_FLOATING(0) | \
610  PIN_PUPDR_FLOATING(1) | \
611  PIN_PUPDR_FLOATING(2) | \
612  PIN_PUPDR_FLOATING(3) | \
613  PIN_PUPDR_FLOATING(4) | \
614  PIN_PUPDR_FLOATING(5) | \
615  PIN_PUPDR_FLOATING(6) | \
616  PIN_PUPDR_FLOATING(7) | \
617  PIN_PUPDR_FLOATING(8) | \
618  PIN_PUPDR_FLOATING(9) | \
619  PIN_PUPDR_FLOATING(10) | \
620  PIN_PUPDR_FLOATING(11) | \
621  PIN_PUPDR_FLOATING(12) | \
622  PIN_PUPDR_FLOATING(13) | \
623  PIN_PUPDR_FLOATING(14) | \
624  PIN_PUPDR_FLOATING(15))
625 #define VAL_GPIOE_ODR (PIN_ODR_HIGH(0) | \
626  PIN_ODR_HIGH(1) | \
627  PIN_ODR_HIGH(2) | \
628  PIN_ODR_HIGH(3) | \
629  PIN_ODR_HIGH(4) | \
630  PIN_ODR_HIGH(5) | \
631  PIN_ODR_HIGH(6) | \
632  PIN_ODR_HIGH(7) | \
633  PIN_ODR_HIGH(8) | \
634  PIN_ODR_HIGH(9) | \
635  PIN_ODR_HIGH(10) | \
636  PIN_ODR_HIGH(11) | \
637  PIN_ODR_HIGH(12) | \
638  PIN_ODR_HIGH(13) | \
639  PIN_ODR_HIGH(14) | \
640  PIN_ODR_HIGH(15))
641 #define VAL_GPIOE_AFRL (PIN_AFIO_AF(0, 8) | \
642  PIN_AFIO_AF(1, 8) | \
643  PIN_AFIO_AF(2, 5) | \
644  PIN_AFIO_AF(3, 0) | \
645  PIN_AFIO_AF(4, 5) | \
646  PIN_AFIO_AF(5, 5) | \
647  PIN_AFIO_AF(6, 5) | \
648  PIN_AFIO_AF(7, 8))
649 #define VAL_GPIOE_AFRH (PIN_AFIO_AF(8, 8) | \
650  PIN_AFIO_AF(9, 0) | \
651  PIN_AFIO_AF(10, 0) | \
652  PIN_AFIO_AF(11, 0) | \
653  PIN_AFIO_AF(12, 0) | \
654  PIN_AFIO_AF(13, 0) | \
655  PIN_AFIO_AF(14, 0) | \
656  PIN_AFIO_AF(15, 0))
657 
658 /*
659  * GPIOF setup:
660  *
661 */
662 #define VAL_GPIOF_MODER 0x00000000
663 #define VAL_GPIOF_OTYPER 0x00000000
664 #define VAL_GPIOF_OSPEEDR 0x00000000
665 #define VAL_GPIOF_PUPDR 0x55555555 // all pullup
666 #define VAL_GPIOF_ODR 0xFFFFFFFF
667 #define VAL_GPIOF_AFRL 0x00000000
668 #define VAL_GPIOF_AFRH 0x00000000
669 
670 /*
671  * GPIOG setup:
672  *
673 */
674 #define VAL_GPIOG_MODER 0x00000000
675 #define VAL_GPIOG_OTYPER 0x00000000
676 #define VAL_GPIOG_OSPEEDR 0x00000000
677 #define VAL_GPIOG_PUPDR 0x55555555 // all pullup
678 #define VAL_GPIOG_ODR 0xFFFFFFFF
679 #define VAL_GPIOG_AFRL 0x00000000
680 #define VAL_GPIOG_AFRH 0x00000000
681 /*
682  * GPIOH setup:
683  *
684 */
685 #define VAL_GPIOH_MODER 0x00000000
686 #define VAL_GPIOH_OTYPER 0x00000000
687 #define VAL_GPIOH_OSPEEDR 0x00000000
688 #define VAL_GPIOH_PUPDR 0x55555555 // all pullup
689 #define VAL_GPIOH_ODR 0xFFFFFFFF
690 #define VAL_GPIOH_AFRL 0x00000000
691 #define VAL_GPIOH_AFRH 0x00000000
692 
693 /*
694  * GPIOI setup:
695  *
696 */
697 #define VAL_GPIOI_MODER 0x00000000
698 #define VAL_GPIOI_OTYPER 0x00000000
699 #define VAL_GPIOI_OSPEEDR 0x00000000
700 #define VAL_GPIOI_PUPDR 0x55555555 // all pullup
701 #define VAL_GPIOI_ODR 0xFFFFFFFF
702 #define VAL_GPIOI_AFRL 0x00000000
703 #define VAL_GPIOI_AFRH 0x00000000
704 
705 
706 
707 /*
708  * Concat macro
709  */
710 #define _CONCAT_BOARD_PARAM(_s1, _s2) _s1 ## _s2
711 #define CONCAT_BOARD_PARAM(_s1, _s2) _CONCAT_BOARD_PARAM(_s1, _s2)
712 
713 /*
714  * Onboard LEDs
715  */
716 /* red, on PE12 */
717 #ifndef USE_LED_1
718 #define USE_LED_1 1
719 #endif
720 #define LED_1_GPIO GPIOE
721 #define LED_1_GPIO_PIN GPIO12
722 #define LED_1_GPIO_ON gpio_clear
723 #define LED_1_GPIO_OFF gpio_set
724 #define LED_1_AFIO_REMAP ((void)0)
725 
726 /*
727  * ADCs TODO
728  */
729 // AUX 1
730 #if USE_ADC_1
731 #define AD1_1_CHANNEL ADC_CHANNEL_IN9
732 #define ADC_1 AD1_1
733 #define ADC_1_GPIO_PORT GPIOB
734 #define ADC_1_GPIO_PIN GPIO1
735 #endif
736 
737 // AUX 2
738 #if USE_ADC_2
739 #define AD1_2_CHANNEL ADC_CHANNEL_IN15
740 #define ADC_2 AD1_2
741 #define ADC_2_GPIO_PORT GPIOC
742 #define ADC_2_GPIO_PIN GPIO5
743 #endif
744 
745 // AUX 3
746 #if USE_ADC_3
747 #define AD1_3_CHANNEL ADC_CHANNEL_IN14
748 #define ADC_3 AD1_3
749 #define ADC_3_GPIO_PORT GPIOC
750 #define ADC_3_GPIO_PIN GPIO4
751 #endif
752 
753 // Internal ADC for battery enabled by default
754 #ifndef USE_ADC_4
755 #define USE_ADC_4 1
756 #endif
757 #if USE_ADC_4
758 #define AD1_4_CHANNEL ADC_CHANNEL_IN4
759 #define ADC_4 AD1_4
760 #define ADC_4_GPIO_PORT GPIOA
761 #define ADC_4_GPIO_PIN GPIO4
762 #endif
763 
764 /* allow to define ADC_CHANNEL_VSUPPLY in the airframe file*/
765 #ifndef ADC_CHANNEL_VSUPPLY
766 #define ADC_CHANNEL_VSUPPLY ADC_4
767 #endif
768 
769 #define DefaultVoltageOfAdc(adc) (0.006185*adc)
770 
771 /*
772  * PWM TIM defines
773  * enable TIM2 and TIM3 by default
774  */
775 #ifndef USE_PWM_TIM2
776 #define USE_PWM_TIM2 1
777 #endif
778 
779 #ifndef USE_PWM_TIM3
780 #define USE_PWM_TIM3 1
781 #endif
782 
783 /*
784  * PWM defines TODO
785  */
786 #ifndef USE_PWM0
787 #define USE_PWM0 1
788 #endif
789 #if USE_PWM0
790 #define PWM_SERVO_0 0
791 #define PWM_SERVO_0_GPIO GPIOB
792 #define PWM_SERVO_0_PIN GPIO0
793 #define PWM_SERVO_0_AF GPIO_AF2
794 #define PWM_SERVO_0_DRIVER PWMD3
795 #define PWM_SERVO_0_CHANNEL 2
796 #define PWM_SERVO_0_CONF pwmcfg3
797 #endif
798 
799 #ifndef USE_PWM1
800 #define USE_PWM1 1
801 #endif
802 #if USE_PWM1
803 #define PWM_SERVO_1 1
804 #define PWM_SERVO_1_GPIO GPIOA
805 #define PWM_SERVO_1_PIN GPIO2
806 #define PWM_SERVO_1_AF GPIO_AF1
807 #define PWM_SERVO_1_DRIVER PWMD2
808 #define PWM_SERVO_1_CHANNEL 2
809 #define PWM_SERVO_1_CONF pwmcfg2
810 #endif
811 
812 #ifndef USE_PWM2
813 #define USE_PWM2 1
814 #endif
815 #if USE_PWM2
816 #define PWM_SERVO_2 2
817 #define PWM_SERVO_2_GPIO GPIOB
818 #define PWM_SERVO_2_PIN GPIO5
819 #define PWM_SERVO_2_AF GPIO_AF2
820 #define PWM_SERVO_2_DRIVER PWMD3
821 #define PWM_SERVO_2_CHANNEL 1
822 #define PWM_SERVO_2_CONF pwmcfg3
823 #endif
824 
825 #ifndef USE_PWM3
826 #define USE_PWM3 1
827 #endif
828 #if USE_PWM3
829 #define PWM_SERVO_3 3
830 #define PWM_SERVO_3_GPIO GPIOB
831 #define PWM_SERVO_3_PIN GPIO4
832 #define PWM_SERVO_3_AF GPIO_AF2
833 #define PWM_SERVO_3_DRIVER PWMD3
834 #define PWM_SERVO_3_CHANNEL 0
835 #define PWM_SERVO_3_CONF pwmcfg3
836 #endif
837 
838 #ifndef USE_PWM4
839 #define USE_PWM4 1
840 #endif
841 #if USE_PWM4
842 #define PWM_SERVO_4 4
843 #define PWM_SERVO_4_GPIO GPIOB
844 #define PWM_SERVO_4_PIN GPIO3
845 #define PWM_SERVO_4_AF GPIO_AF1
846 #define PWM_SERVO_4_DRIVER PWMD2
847 #define PWM_SERVO_4_CHANNEL 1
848 #define PWM_SERVO_4_CONF pwmcfg2
849 #endif
850 
851 #ifndef USE_PWM5
852 #define USE_PWM5 1
853 #endif
854 #if USE_PWM5
855 #define PWM_SERVO_5 5
856 #define PWM_SERVO_5_GPIO GPIOA
857 #define PWM_SERVO_5_PIN GPIO15
858 #define PWM_SERVO_5_AF GPIO_AF1
859 #define PWM_SERVO_5_DRIVER PWMD2
860 #define PWM_SERVO_5_CHANNEL 0
861 #define PWM_SERVO_5_CONF pwmcfg2
862 #endif
863 
864 #if USE_PWM6
865 #define PWM_SERVO_6 6
866 #define PWM_SERVO_6_GPIO GPIOB
867 #define PWM_SERVO_6_PIN GPIO1
868 #define PWM_SERVO_6_AF GPIO_AF2
869 #define PWM_SERVO_6_DRIVER PWMD3
870 #define PWM_SERVO_6_CHANNEL 3
871 #define PWM_SERVO_6_CONF pwmcfg3
872 #endif
873 
877 #define RC_PPM_TICKS_PER_USEC 2
878 #define PPM_TIMER_FREQUENCY 2000000
879 #define PPM_CHANNEL ICU_CHANNEL_1
880 #define PPM_TIMER ICUD1
881 
882 /*
883  * PWM input TODO
884  */
885 // PWM_INPUT 1 on PA8 (also PPM IN)
886 #define PWM_INPUT1_ICU ICUD1
887 #define PWM_INPUT1_CHANNEL ICU_CHANNEL_1
888 // PPM in (aka PA8) is used: not compatible with PPM RC receiver
889 #define PWM_INPUT1_GPIO_PORT GPIOA
890 #define PWM_INPUT1_GPIO_PIN GPIO8
891 #define PWM_INPUT1_GPIO_AF GPIO_AF1
892 
893 // PWM_INPUT 2 on PA3 (also SERVO 1)
894 #if (USE_PWM1 && USE_PWM_INPUT2)
895 #error "PW1 and PWM_INPUT2 are not compatible"
896 #endif
897 #define PWM_INPUT2_ICU ICUD2
898 #define PWM_INPUT2_CHANNEL ICU_CHANNEL_1
899 #define PWM_INPUT2_GPIO_PORT GPIOA
900 #define PWM_INPUT2_GPIO_PIN GPIO2
901 #define PWM_INPUT2_GPIO_AF GPIO_AF3
902 
903 
907 #ifndef I2C1_CLOCK_SPEED
908 #define I2C1_CLOCK_SPEED 400000
909 #endif
910 #if I2C1_CLOCK_SPEED == 400000
911 #define I2C1_DUTY_CYCLE FAST_DUTY_CYCLE_2
912 #elif I2C1_CLOCK_SPEED == 100000
913 #define I2C1_DUTY_CYCLE STD_DUTY_CYCLE
914 #else
915 #error Invalid I2C1 clock speed
916 #endif
917 #define I2C1_CFG_DEF { \
918  OPMODE_I2C, \
919  I2C1_CLOCK_SPEED, \
920  I2C1_DUTY_CYCLE, \
921  }
922 
923 #ifndef I2C2_CLOCK_SPEED
924 #define I2C2_CLOCK_SPEED 400000
925 #endif
926 #if I2C2_CLOCK_SPEED == 400000
927 #define I2C2_DUTY_CYCLE FAST_DUTY_CYCLE_2
928 #elif I2C2_CLOCK_SPEED == 100000
929 #define I2C2_DUTY_CYCLE STD_DUTY_CYCLE
930 #else
931 #error Invalid I2C2 clock speed
932 #endif
933 #define I2C2_CFG_DEF { \
934  OPMODE_I2C, \
935  I2C2_CLOCK_SPEED, \
936  I2C2_DUTY_CYCLE, \
937  }
938 
946 // SPI1_SLAVE0 -> slave select pin for the L3GD20 (gyro)
947 #define SPI_SELECT_SLAVE0_PORT GPIOC
948 #define SPI_SELECT_SLAVE0_PIN GPIO13
949 // SPI1_SLAVE1 -> slave select pin for the LSM303D (accel/mag)
950 #define SPI_SELECT_SLAVE1_PORT GPIOC
951 #define SPI_SELECT_SLAVE1_PIN GPIO15
952 // SPI1_SLAVE3 -> slave select pin for the MS5611 baro
953 #define SPI_SELECT_SLAVE3_PORT GPIOD
954 #define SPI_SELECT_SLAVE3_PIN GPIO7
955 
962 #ifndef USE_BARO_BOARD
963 #define USE_BARO_BOARD 1
964 #endif
965 
970 #define GPIOA_OTG_FS_VBUS 9
971 
972 #define GPIOD_SDIO_CMD 2
973 #define GPIOC_SDIO_D0 8
974 #define GPIOC_SDIO_D1 9
975 #define GPIOC_SDIO_D2 10
976 #define GPIOC_SDIO_D3 11
977 #define GPIOC_SDIO_CK 12
978 
979 /*
980  * Actuators for fixedwing
981  */
982  /* Default actuators driver */
983 #define DEFAULT_ACTUATORS "modules/actuators/actuators_pwm.h"
984 #define ActuatorDefaultSet(_x,_y) ActuatorPwmSet(_x,_y)
985 #define ActuatorsDefaultInit() ActuatorsPwmInit()
986 #define ActuatorsDefaultCommit() ActuatorsPwmCommit()
987 
988 #if !defined(_FROM_ASM_)
989 #ifdef __cplusplus
990 extern "C" {
991 #endif
992  void boardInit(void);
993 #ifdef __cplusplus
994 }
995 #endif
996 #endif /* _FROM_ASM_ */
997 
998 #endif /* _BOARD_H_ */
void boardInit(void)
Board-specific initialization code.
Definition: board.c:312