Paparazzi UAS v7.0_unstable
Paparazzi is a free software Unmanned Aircraft System.
Loading...
Searching...
No Matches
chimera.h
Go to the documentation of this file.
1#ifndef CONFIG_CHIMERA_1_00_H
2#define CONFIG_CHIMERA_1_00_H
3
4#define BOARD_CHIMERA
5
10
15/*
16 * Concat macro
17 */
18#define _CONCAT_BOARD_PARAM(_s1, _s2) _s1 ## _s2
19#define CONCAT_BOARD_PARAM(_s1, _s2) _CONCAT_BOARD_PARAM(_s1, _s2)
20
21/*
22 * LEDs
23 */
24/* red, on PB12, 1 on LED_ON, 0 on LED_OFF */
25#ifndef USE_LED_1
26#define USE_LED_1 1
27#endif
28#define LED_1_GPIO GPIOB
29#define LED_1_GPIO_PIN GPIO12
30#define LED_1_GPIO_ON gpio_set
31#define LED_1_GPIO_OFF gpio_clear
32
33/* orange, on PB13, 1 on LED_ON, 0 on LED_OFF */
34#ifndef USE_LED_2
35#define USE_LED_2 1
36#endif
37#define LED_2_GPIO GPIOB
38#define LED_2_GPIO_PIN GPIO13
39#define LED_2_GPIO_ON gpio_set
40#define LED_2_GPIO_OFF gpio_clear
41
42/* green, on PD10, 1 on LED_ON, 0 on LED_OFF */
43#ifndef USE_LED_3
44#define USE_LED_3 1
45#endif
46#define LED_3_GPIO GPIOD
47#define LED_3_GPIO_PIN GPIO10
48#define LED_3_GPIO_ON gpio_set
49#define LED_3_GPIO_OFF gpio_clear
50
51/* yellow, on PD11, 1 on LED_ON, 0 on LED_OFF */
52#ifndef USE_LED_4
53#define USE_LED_4 1
54#endif
55#define LED_4_GPIO GPIOD
56#define LED_4_GPIO_PIN GPIO11
57#define LED_4_GPIO_ON gpio_set
58#define LED_4_GPIO_OFF gpio_clear
59
60/* AUX0, on PA5, 1 on LED_ON, 0 on LED_OFF */
61#ifndef USE_LED_5
62#define USE_LED_5 0
63#endif
64#define LED_5_GPIO GPIOA
65#define LED_5_GPIO_PIN GPIO5
66#define LED_5_GPIO_ON gpio_set
67#define LED_5_GPIO_OFF gpio_clear
68
69/* AUX1, on PA3, 1 on LED_ON, 0 on LED_OFF */
70#ifndef USE_LED_6
71#define USE_LED_6 0
72#endif
73#define LED_6_GPIO GPIOA
74#define LED_6_GPIO_PIN GPIO3
75#define LED_6_GPIO_ON gpio_set
76#define LED_6_GPIO_OFF gpio_clear
77
78/* AUX2, on PA2, 1 on LED_ON, 0 on LED_OFF */
79#ifndef USE_LED_7
80#define USE_LED_7 0
81#endif
82#define LED_7_GPIO GPIOA
83#define LED_7_GPIO_PIN GPIO2
84#define LED_7_GPIO_ON gpio_set
85#define LED_7_GPIO_OFF gpio_clear
86
87/* AUX3, on PA0, 1 on LED_ON, 0 on LED_OFF */
88#ifndef USE_LED_8
89#define USE_LED_8 0
90#endif
91#define LED_8_GPIO GPIOA
92#define LED_8_GPIO_PIN GPIO0
93#define LED_8_GPIO_ON gpio_set
94#define LED_8_GPIO_OFF gpio_clear
95
96/* AUX4, on PC3, 1 on LED_ON, 0 on LED_OFF */
97#ifndef USE_LED_9
98#define USE_LED_9 0
99#endif
100#define LED_9_GPIO GPIOC
101#define LED_9_GPIO_PIN GPIO3
102#define LED_9_GPIO_ON gpio_set
103#define LED_9_GPIO_OFF gpio_clear
104
105/* AUX5, on PC2, 1 on LED_ON, 0 on LED_OFF */
106#ifndef USE_LED_10
107#define USE_LED_10 0
108#endif
109#define LED_10_GPIO GPIOC
110#define LED_10_GPIO_PIN GPIO2
111#define LED_10_GPIO_ON gpio_set
112#define LED_10_GPIO_OFF gpio_clear
113
114/* AUX6, on PC6, 1 on LED_ON, 0 on LED_OFF */
115#ifndef USE_LED_11
116#define USE_LED_11 0
117#endif
118#define LED_11_GPIO GPIOC
119#define LED_11_GPIO_PIN GPIO6
120#define LED_11_GPIO_ON gpio_set
121#define LED_11_GPIO_OFF gpio_clear
122
123/* AUX7, on PC7, 1 on LED_ON, 0 on LED_OFF */
124#ifndef USE_LED_12
125#define USE_LED_12 0
126#endif
127#define LED_12_GPIO GPIOC
128#define LED_12_GPIO_PIN GPIO7
129#define LED_12_GPIO_ON gpio_set
130#define LED_12_GPIO_OFF gpio_clear
131
132/*
133 * ADCs
134 */
135// AUX0
136#if USE_ADC_1
137#define AD1_1_CHANNEL ADC_CHANNEL_IN5
138#define ADC_1 AD1_1
139#define ADC_1_GPIO_PORT GPIOA
140#define ADC_1_GPIO_PIN GPIO5
141#endif
142
143// AUX1
144#if USE_ADC_2
145#define AD1_2_CHANNEL ADC_CHANNEL_IN3
146#define ADC_2 AD1_2
147#define ADC_2_GPIO_PORT GPIOA
148#define ADC_2_GPIO_PIN GPIO3
149#endif
150
151// AUX2
152#if USE_ADC_3
153#define AD1_3_CHANNEL ADC_CHANNEL_IN2
154#define ADC_3 AD1_3
155#define ADC_3_GPIO_PORT GPIOA
156#define ADC_3_GPIO_PIN GPIO2
157#endif
158
159// AUX3
160#if USE_ADC_4
161#define AD1_4_CHANNEL ADC_CHANNEL_IN0
162#define ADC_4 AD1_4
163#define ADC_4_GPIO_PORT GPIOA
164#define ADC_4_GPIO_PIN GPIO0
165#endif
166
167// AUX4
168#if USE_ADC_5
169#define AD1_5_CHANNEL ADC_CHANNEL_IN13
170#define ADC_5 AD1_5
171#define ADC_5_GPIO_PORT GPIOC
172#define ADC_5_GPIO_PIN GPIO3
173#endif
174
175// AUX5
176#if USE_ADC_6
177#define AD1_6_CHANNEL ADC_CHANNEL_IN12
178#define ADC_6 AD1_6
179#define ADC_6_GPIO_PORT GPIOC
180#define ADC_6_GPIO_PIN GPIO2
181#endif
182
183// Internal ADC for battery enabled by default
184#ifndef USE_ADC_7
185#define USE_ADC_7 1
186#endif
187#if USE_ADC_7
188#define AD1_7_CHANNEL ADC_CHANNEL_IN4
189#define ADC_7 AD1_7
190#define ADC_7_GPIO_PORT GPIOA
191#define ADC_7_GPIO_PIN GPIO4
192#endif
193
194/* allow to define ADC_CHANNEL_VSUPPLY in the airframe file*/
195#ifndef ADC_CHANNEL_VSUPPLY
196#define ADC_CHANNEL_VSUPPLY ADC_7
197#endif
198
199/*
200 * R1 = 3.3k
201 * R2 = 22k
202 * adc * (3.3 / 2^12) * ((R1 + R2) / R1)
203 */
204#define VBAT_R1 3300.0f
205#define VBAT_R2 22000.0f
206#define DefaultVoltageOfAdc(adc) ((3.3f/4096.0f)*((VBAT_R1+VBAT_R2)/VBAT_R1)*adc)
207
208//TODO configure DAC (ADC_1)
209
210/*
211 * PWM TIM defines
212 * enable TIM3 and TIM4 by default
213 */
214#ifndef USE_PWM_TIM3
215#define USE_PWM_TIM3 1
216#endif
217
218#ifndef USE_PWM_TIM4
219#define USE_PWM_TIM4 1
220#endif
221
222/*
223 * PWM defines
224 */
225#if defined(LINE_SERVO0)
226#ifndef USE_PWM0
227#define USE_PWM0 1
228#endif
229#if USE_PWM0
230#define PWM_SERVO_0 0
231#define PWM_SERVO_0_GPIO PAL_PORT(LINE_SERVO0)
232#define PWM_SERVO_0_PIN PAL_PAD(LINE_SERVO0)
233#define PWM_SERVO_0_AF AF_LINE_SERVO0
234#define PWM_SERVO_0_DRIVER CONCAT_BOARD_PARAM(PWMD, SERVO0_TIM)
235#define PWM_SERVO_0_CHANNEL (SERVO0_TIM_CH-1)
236#define PWM_SERVO_0_CONF CONCAT_BOARD_PARAM(pwmcfg, SERVO0_TIM)
237#endif
238#endif
239
240#if defined(LINE_SERVO1)
241#ifndef USE_PWM1
242#define USE_PWM1 1
243#endif
244#if USE_PWM1
245#define PWM_SERVO_1 1
246#define PWM_SERVO_1_GPIO PAL_PORT(LINE_SERVO1)
247#define PWM_SERVO_1_PIN PAL_PAD(LINE_SERVO1)
248#define PWM_SERVO_1_AF AF_LINE_SERVO1
249#define PWM_SERVO_1_DRIVER CONCAT_BOARD_PARAM(PWMD, SERVO1_TIM)
250#define PWM_SERVO_1_CHANNEL (SERVO1_TIM_CH-1)
251#define PWM_SERVO_1_CONF CONCAT_BOARD_PARAM(pwmcfg, SERVO1_TIM)
252#endif
253#endif
254
255#if defined(LINE_SERVO2)
256#ifndef USE_PWM2
257#define USE_PWM2 1
258#endif
259#if USE_PWM2
260#define PWM_SERVO_2 2
261#define PWM_SERVO_2_GPIO PAL_PORT(LINE_SERVO2)
262#define PWM_SERVO_2_PIN PAL_PAD(LINE_SERVO2)
263#define PWM_SERVO_2_AF AF_LINE_SERVO2
264#define PWM_SERVO_2_DRIVER CONCAT_BOARD_PARAM(PWMD, SERVO2_TIM)
265#define PWM_SERVO_2_CHANNEL (SERVO2_TIM_CH-1)
266#define PWM_SERVO_2_CONF CONCAT_BOARD_PARAM(pwmcfg, SERVO2_TIM)
267#endif
268#endif
269
270#if defined(LINE_SERVO3)
271#ifndef USE_PWM3
272#define USE_PWM3 1
273#endif
274#if USE_PWM3
275#define PWM_SERVO_3 3
276#define PWM_SERVO_3_GPIO PAL_PORT(LINE_SERVO3)
277#define PWM_SERVO_3_PIN PAL_PAD(LINE_SERVO3)
278#define PWM_SERVO_3_AF AF_LINE_SERVO3
279#define PWM_SERVO_3_DRIVER CONCAT_BOARD_PARAM(PWMD, SERVO3_TIM)
280#define PWM_SERVO_3_CHANNEL (SERVO3_TIM_CH-1)
281#define PWM_SERVO_3_CONF CONCAT_BOARD_PARAM(pwmcfg, SERVO3_TIM)
282#endif
283#endif
284
285#if defined(LINE_SERVO4)
286#ifndef USE_PWM4
287#define USE_PWM4 1
288#endif
289#if USE_PWM4
290#define PWM_SERVO_4 4
291#define PWM_SERVO_4_GPIO PAL_PORT(LINE_SERVO4)
292#define PWM_SERVO_4_PIN PAL_PAD(LINE_SERVO4)
293#define PWM_SERVO_4_AF AF_LINE_SERVO4
294#define PWM_SERVO_4_DRIVER CONCAT_BOARD_PARAM(PWMD, SERVO4_TIM)
295#define PWM_SERVO_4_CHANNEL (SERVO4_TIM_CH-1)
296#define PWM_SERVO_4_CONF CONCAT_BOARD_PARAM(pwmcfg, SERVO4_TIM)
297#endif
298#endif
299
300#if defined(LINE_SERVO5)
301#ifndef USE_PWM5
302#define USE_PWM5 1
303#endif
304#if USE_PWM5
305#define PWM_SERVO_5 5
306#define PWM_SERVO_5_GPIO PAL_PORT(LINE_SERVO5)
307#define PWM_SERVO_5_PIN PAL_PAD(LINE_SERVO5)
308#define PWM_SERVO_5_AF AF_LINE_SERVO5
309#define PWM_SERVO_5_DRIVER CONCAT_BOARD_PARAM(PWMD, SERVO5_TIM)
310#define PWM_SERVO_5_CHANNEL (SERVO5_TIM_CH-1)
311#define PWM_SERVO_5_CONF CONCAT_BOARD_PARAM(pwmcfg, SERVO5_TIM)
312#endif
313#endif
314
315#if defined(LINE_SERVO6)
316#ifndef USE_PWM6
317#define USE_PWM6 1
318#endif
319#if USE_PWM6
320#define PWM_SERVO_6 6
321#define PWM_SERVO_6_GPIO PAL_PORT(LINE_SERVO6)
322#define PWM_SERVO_6_PIN PAL_PAD(LINE_SERVO6)
323#define PWM_SERVO_6_AF AF_LINE_SERVO6
324#define PWM_SERVO_6_DRIVER CONCAT_BOARD_PARAM(PWMD, SERVO6_TIM)
325#define PWM_SERVO_6_CHANNEL (SERVO6_TIM_CH-1)
326#define PWM_SERVO_6_CONF CONCAT_BOARD_PARAM(pwmcfg, SERVO6_TIM)
327#endif
328#endif
329
330#if defined(LINE_SERVO7)
331#ifndef USE_PWM7
332#define USE_PWM7 1
333#endif
334#if USE_PWM7
335#define PWM_SERVO_7 7
336#define PWM_SERVO_7_GPIO PAL_PORT(LINE_SERVO7)
337#define PWM_SERVO_7_PIN PAL_PAD(LINE_SERVO7)
338#define PWM_SERVO_7_AF AF_LINE_SERVO7
339#define PWM_SERVO_7_DRIVER CONCAT_BOARD_PARAM(PWMD, SERVO7_TIM)
340#define PWM_SERVO_7_CHANNEL (SERVO7_TIM_CH-1)
341#define PWM_SERVO_7_CONF CONCAT_BOARD_PARAM(pwmcfg, SERVO7_TIM)
342#endif
343#endif
344
345#if defined(LINE_SERVO8)
346#ifndef USE_PWM8
347#define USE_PWM8 1
348#endif
349#if USE_PWM8
350#define PWM_SERVO_8 8
351#define PWM_SERVO_8_GPIO PAL_PORT(LINE_SERVO8)
352#define PWM_SERVO_8_PIN PAL_PAD(LINE_SERVO8)
353#define PWM_SERVO_8_AF AF_LINE_SERVO8
354#define PWM_SERVO_8_DRIVER CONCAT_BOARD_PARAM(PWMD, SERVO8_TIM)
355#define PWM_SERVO_8_CHANNEL (SERVO8_TIM_CH-1)
356#define PWM_SERVO_8_CONF CONCAT_BOARD_PARAM(pwmcfg, SERVO8_TIM)
357#endif
358#endif
359
363#define UART2_GPIO_PORT_TX GPIOD
364#define UART2_GPIO_TX GPIO5
365#define UART2_GPIO_PORT_RX GPIOD
366#define UART2_GPIO_RX GPIO6
367#define UART2_GPIO_AF 7
368#ifndef UART2_HW_FLOW_CONTROL
369#define UART2_HW_FLOW_CONTROL TRUE
370#endif
371
377#define UART1_GPIO_PORT_TX GPIOB
378#define UART1_GPIO_TX GPIO6
379#define UART1_GPIO_PORT_RX GPIOB
380#define UART1_GPIO_RX GPIO7
381#define UART1_GPIO_AF 7
382
383#define UART3_GPIO_PORT_TX GPIOD
384#define UART3_GPIO_TX GPIO8
385#define UART3_GPIO_PORT_RX GPIOD
386#define UART3_GPIO_RX GPIO9
387#define UART3_GPIO_AF 7
388
389#define UART8_GPIO_PORT_TX GPIOE
390#define UART8_GPIO_TX GPIO0
391#define UART8_GPIO_PORT_RX GPIOE
392#define UART8_GPIO_RX GPIO1
393#define UART8_GPIO_AF 8
394
407// In case, do dynamic config of UARTs
408#define USE_UART7_RX TRUE
409#ifndef USE_UART7_TX // may be used in half duplex mode
410#define USE_UART7_TX FALSE
411#endif
412#define UART7_GPIO_PORT_RX GPIOE
413#define UART7_GPIO_RX GPIO7
414#define UART7_GPIO_AF 8
415
416#define USE_UART4_RX TRUE
417#define USE_UART4_TX FALSE
418#define UART4_GPIO_PORT_RX GPIOA
419#define UART4_GPIO_RX GPIO1
420#define UART4_GPIO_AF 8
421
422/* The line that is pulled low at power up to initiate the bind process
423 * PC7: AUX7
424 */
425#define SPEKTRUM_BIND_PIN GPIO7
426#define SPEKTRUM_BIND_PIN_PORT GPIOC
427
428// no wait with chibios as the RTC oscillator takes longer to stabilize
429#define SPEKTRUM_BIND_WAIT 30000
430
436#define RC_PPM_TICKS_PER_USEC 6
437#define PPM_TIMER_FREQUENCY 6000000
438#define PPM_CHANNEL ICU_CHANNEL_2
439#define PPM_TIMER ICUD5
440
441/*
442 * PWM input
443 */
444// PWM_INPUT 1 on PA0 (AUX3)
445#define PWM_INPUT1_ICU ICUD2
446#define PWM_INPUT1_CHANNEL ICU_CHANNEL_1
447#define PWM_INPUT1_GPIO_PORT GPIOA
448#define PWM_INPUT1_GPIO_PIN GPIO0
449#define PWM_INPUT1_GPIO_AF GPIO_AF1
450
451// PWM_INPUT 2 on PC7 (AUX7)
452#define PWM_INPUT2_ICU ICUD8
453#define PWM_INPUT2_CHANNEL ICU_CHANNEL_2
454#define PWM_INPUT2_GPIO_PORT GPIOC
455#define PWM_INPUT2_GPIO_PIN GPIO7
456#define PWM_INPUT2_GPIO_AF GPIO_AF3
457
461// Digital noise filter: 0 disabled, [0x1 - 0xF] enable up to n t_I2CCLK
462#define STM32_CR1_DNF(n) ((n & 0x0f) << 8)
463// Timing register
464#define I2C_FAST_400KHZ_DNF0_100NS_PCLK54MHZ_TIMINGR (STM32_TIMINGR_PRESC(0U) | \
465 STM32_TIMINGR_SCLDEL(10U) | STM32_TIMINGR_SDADEL(0U) | \
466 STM32_TIMINGR_SCLH(34U) | STM32_TIMINGR_SCLL(86U))
467#define I2C_STD_100KHZ_DNF0_100NS_PCLK54MHZ_TIMINGR (STM32_TIMINGR_PRESC(1U) | \
468 STM32_TIMINGR_SCLDEL(9U) | STM32_TIMINGR_SDADEL(0U) | \
469 STM32_TIMINGR_SCLH(105U) | STM32_TIMINGR_SCLL(153U))
470
471
472#ifndef I2C1_CLOCK_SPEED
473#define I2C1_CLOCK_SPEED 400000
474#endif
475
476#if I2C1_CLOCK_SPEED == 400000
477#define I2C1_CFG_DEF { \
478 .timingr = I2C_FAST_400KHZ_DNF0_100NS_PCLK54MHZ_TIMINGR, \
479 .cr1 = STM32_CR1_DNF(0), \
480 .cr2 = 0 \
481}
482#elif I2C1_CLOCK_SPEED == 100000
483#define I2C1_CFG_DEF { \
484 .timingr = I2C_STD_100KHZ_DNF0_100NS_PCLK54MHZ_TIMINGR, \
485 .cr1 = STM32_CR1_DNF(0), \
486 .cr2 = 0 \
487}
488#else
489#error "Unknown I2C1 clock speed"
490#endif
491
492
493#ifndef I2C2_CLOCK_SPEED
494#define I2C2_CLOCK_SPEED 400000
495#endif
496
497#if I2C2_CLOCK_SPEED == 400000
498#define I2C2_CFG_DEF { \
499 .timingr = I2C_FAST_400KHZ_DNF0_100NS_PCLK54MHZ_TIMINGR, \
500 .cr1 = STM32_CR1_DNF(0), \
501 .cr2 = 0 \
502}
503#elif I2C2_CLOCK_SPEED == 100000
504#define I2C2_CFG_DEF { \
505 .timingr = I2C_STD_100KHZ_DNF0_100NS_PCLK54MHZ_TIMINGR, \
506 .cr1 = STM32_CR1_DNF(0), \
507 .cr2 = 0 \
508}
509#else
510#error "Unknown I2C2 clock speed"
511#endif
512
516#define SPI1_GPIO_AF GPIO_AF5
517#define SPI1_GPIO_PORT_MISO GPIOB
518#define SPI1_GPIO_MISO GPIO4
519#define SPI1_GPIO_PORT_MOSI GPIOB
520#define SPI1_GPIO_MOSI GPIO5
521#define SPI1_GPIO_PORT_SCK GPIO3
522#define SPI1_GPIO_SCK GPIO3
523
524// SLAVE0 on SPI connector
525#define SPI_SELECT_SLAVE0_PORT GPIOA
526#define SPI_SELECT_SLAVE0_PIN GPIO15
527// SLAVE1 on AUX0
528#define SPI_SELECT_SLAVE1_PORT GPIOA
529#define SPI_SELECT_SLAVE1_PIN GPIO5
530// SLAVE2 on AUX1
531#define SPI_SELECT_SLAVE2_PORT GPIOA
532#define SPI_SELECT_SLAVE2_PIN GPIO3
533// SLAVE3 on AUX2
534#define SPI_SELECT_SLAVE3_PORT GPIOA
535#define SPI_SELECT_SLAVE3_PIN GPIO2
536// SLAVE4 on AUX3
537#define SPI_SELECT_SLAVE4_PORT GPIOA
538#define SPI_SELECT_SLAVE4_PIN GPIO0
539// SLAVE5 on AUX4
540#define SPI_SELECT_SLAVE5_PORT GPIOC
541#define SPI_SELECT_SLAVE5_PIN GPIO3
542
549#ifndef USE_BARO_BOARD
550#define USE_BARO_BOARD 1
551#endif
552
556#define SDIO_D0_PORT GPIOC
557#define SDIO_D0_PIN GPIO8
558#define SDIO_D1_PORT GPIOC
559#define SDIO_D1_PIN GPIO9
560#define SDIO_D2_PORT GPIOC
561#define SDIO_D2_PIN GPIO10
562#define SDIO_D3_PORT GPIOC
563#define SDIO_D3_PIN GPIO11
564#define SDIO_CK_PORT GPIOC
565#define SDIO_CK_PIN GPIO12
566#define SDIO_CMD_PORT GPIOD
567#define SDIO_CMD_PIN GPIO2
568#define SDIO_AF 12
569// bat monitoring for file closing
570#define SDLOG_BAT_ADC ADCD1
571#define SDLOG_BAT_CHAN AD1_7_CHANNEL
572// usb led status
573#define SDLOG_USB_LED 4
574#define SDLOG_USB_VBUS_PORT GPIOA
575#define SDLOG_USB_VBUS_PIN GPIO9
576
577
578/*
579 * Actuators for fixedwing
580 */
581 /* Default actuators driver */
582#define DEFAULT_ACTUATORS "modules/actuators/actuators_pwm.h"
583#define ActuatorDefaultSet(_x,_y) ActuatorPwmSet(_x,_y)
584#define ActuatorsDefaultInit() ActuatorsPwmInit()
585#define ActuatorsDefaultCommit() ActuatorsPwmCommit()
586
590#define WS2812D1_GPIO GPIOC
591#define WS2812D1_PIN GPIO6
592#define WS2812D1_AF 3
593#define WS2812D1_CFG_DEF { \
594 .dma_stream = STM32_PWM8_UP_DMA_STREAM, \
595 .dma_channel = STM32_PWM8_UP_DMA_CHANNEL, \
596 .dma_priority = STM32_PWM8_UP_DMA_PRIORITY, \
597 .pwm_channel = 0, \
598 .pwmp = &PWMD8 \
599}
600
601#endif /* CONFIG_CHIMERA_1_00_H */
602