Paparazzi UAS  v5.18.0_stable
Paparazzi is a free software Unmanned Aircraft System.
matek_f405_wing_v1.h
Go to the documentation of this file.
1 /*
2  * Chris Efstathiou hendrixgr@gmail.com
3  *
4  * This file is part of paparazzi.
5  *
6  * paparazzi is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2, or (at your option)
9  * any later version.
10  *
11  * paparazzi is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with paparazzi; see the file COPYING. If not, write to
18  * the Free Software Foundation, 59 Temple Place - Suite 330,
19  * Boston, MA 02111-1307, USA.
20  *
21  */
22 
23 #ifndef CONFIG_MATEK_F405_WING_1_0_H
24 #define CONFIG_MATEK_F405_WING_1_0_H
25 
26 #define BOARD_MATEK_F405_WING
27 
28 /* The Matek F405 Wing autopilot has a 8MHz external clock and 168MHz internal. */
29 #define EXT_CLK 8000000
30 #define AHB_CLK 168000000
31 
32 // Onboard LEDs
33 /* STAT blue, on PB5 */
34 #ifndef USE_LED_1
35 #define USE_LED_1 1
36 #endif
37 #define LED_1_GPIO GPIOA
38 #define LED_1_GPIO_PIN GPIO14
39 #define LED_1_GPIO_ON gpio_clear
40 #define LED_1_GPIO_OFF gpio_set
41 #define LED_1_AFIO_REMAP ((void)0)
42 
43 /* WARN red, on PB4 */
44 #ifndef USE_LED_2
45 #define USE_LED_2 1
46 #endif
47 #define LED_2_GPIO GPIOA
48 #define LED_2_GPIO_PIN GPIO13
49 #define LED_2_GPIO_ON gpio_clear
50 #define LED_2_GPIO_OFF gpio_set
51 #define LED_2_AFIO_REMAP ((void)0)
52 
53 // LED STRIP 2812
54 #ifndef USE_LED_3
55 #define USE_LED_3 1
56 #endif
57 #define LED_3_GPIO GPIOA
58 #define LED_3_GPIO_PIN GPIO15
59 #define LED_3_GPIO_ON gpio_clear
60 #define LED_3_GPIO_OFF gpio_set
61 #define LED_3_AFIO_REMAP ((void)0)
62 
63 // BEEPER
64 #ifndef USE_LED_4
65 #define USE_LED_4 1
66 #endif
67 #define LED_4_GPIO GPIOC
68 #define LED_4_GPIO_PIN GPIO15
69 #define LED_4_GPIO_ON gpio_clear
70 #define LED_4_GPIO_OFF gpio_set
71 #define LED_4_AFIO_REMAP ((void)0)
72 
73 
74 /* Default actuators driver */
75 #define DEFAULT_ACTUATORS "subsystems/actuators/actuators_pwm.h"
76 #define ActuatorDefaultSet(_x,_y) ActuatorPwmSet(_x,_y)
77 #define ActuatorsDefaultInit() ActuatorsPwmInit()
78 #define ActuatorsDefaultCommit() ActuatorsPwmCommit()
79 
80 
81 #define VBUS_GPIO GPIOC
82 #define VBUS_GPIO_PIN GPIO13
83 
84 /* UART */
85 //CAN BE USED AS GPS SERIAL PORT
86 #define UART1_GPIO_AF GPIO_AF7
87 #define UART1_GPIO_PORT_TX GPIOA
88 #define UART1_GPIO_TX GPIO9
89 #define UART1_GPIO_PORT_RX GPIOA
90 #define UART1_GPIO_RX GPIO10
91 
92 // UART 2 RX INPUT IS USED AS THE PPM INPUT THUS I WILL USE THE TX OUTPUT AS ADC INPUT
93 #define UART2_GPIO_AF GPIO_AF8
94 #define UART2_GPIO_PORT_TX GPIOA
95 #define UART2_GPIO_TX GPIO2
96 #define UART2_GPIO_PORT_RX GPIOA
97 #define UART2_GPIO_RX GPIO3
98 
99 #define UART3_GPIO_AF GPIO_AF8
100 #define UART3_GPIO_PORT_TX GPIOC
101 #define UART3_GPIO_TX GPIO10
102 #define UART3_GPIO_PORT_RX GPIOC
103 #define UART3_GPIO_RX GPIO11
104 
105 #define UART4_GPIO_AF GPIO_AF8
106 #define UART4_GPIO_PORT_TX GPIOA
107 #define UART4_GPIO_TX GPIO0
108 #define UART4_GPIO_PORT_RX GPIOA
109 #define UART4_GPIO_RX GPIO1
110 
111 #define UART5_GPIO_AF GPIO_AF8
112 #define UART5_GPIO_PORT_TX GPIOC
113 #define UART5_GPIO_TX GPIO12
114 #define UART5_GPIO_PORT_RX GPIOD
115 #define UART5_GPIO_RX GPIO2
116 
117 // CAN BE USED AS A MODEM SERIAL PORT
118 #define UART6_GPIO_AF GPIO_AF8
119 #define UART6_GPIO_PORT_TX GPIOC
120 #define UART6_GPIO_TX GPIO6
121 #define UART6_GPIO_PORT_RX GPIOC
122 #define UART6_GPIO_RX GPIO7
123 
124 // SPI1, MPU6000 ON SPI1
125 #define SPI1_GPIO_AF GPIO_AF5
126 
127 #define SPI1_GPIO_PORT_SCK GPIOA
128 #define SPI1_GPIO_SCK GPIO5
129 #define SPI1_GPIO_PORT_MISO GPIOA
130 #define SPI1_GPIO_MISO GPIO6
131 #define SPI1_GPIO_PORT_MOSI GPIOA
132 #define SPI1_GPIO_MOSI GPIO7
133 #define SPI1_GPIO_PORT_NSS GPIOA
134 #define SPI1_GPIO_NSS GPIO4
135 
136 #define SPI_SELECT_SLAVE0_PORT GPIOA
137 #define SPI_SELECT_SLAVE0_PIN GPIO4
138 
139 // SPI2 IS USED FOR THE MAX7456 OSD
140 #define SPI2_GPIO_AF GPIO_AF5
141 
142 #define SPI2_GPIO_PORT_SCK GPIOB
143 #define SPI2_GPIO_SCK GPIO13
144 #define SPI2_GPIO_PORT_MISO GPIOC
145 #define SPI2_GPIO_MISO GPIO2
146 #define SPI2_GPIO_PORT_MOSI GPIOC
147 #define SPI2_GPIO_MOSI GPIO3
148 #define SPI2_GPIO_PORT_NSS GPIOB
149 #define SPI2_GPIO_NSS GPIO12
150 
151 #define SPI_SELECT_SLAVE1_PORT GPIOB
152 #define SPI_SELECT_SLAVE1_PIN GPIO12
153 
154 // SDCARD ON SPI3
155 #define SPI3_GPIO_AF GPIO_AF5
156 
157 #define SPI3_GPIO_PORT_SCK GPIOB
158 #define SPI3_GPIO_SCK GPIO3
159 #define SPI3_GPIO_PORT_MISO GPIOB
160 #define SPI3_GPIO_MISO GPIO4
161 #define SPI3_GPIO_PORT_MOSI GPIOB
162 #define SPI3_GPIO_MOSI GPIO5
163 #define SPI3_GPIO_PORT_NSS GPIOC
164 #define SPI3_GPIO_NSS GPIO14
165 
166 #define SPI_SELECT_SLAVE2_PORT GPIOC
167 #define SPI_SELECT_SLAVE2_PIN GPIO14
168 
169 
170 /* I2C mapping */
171 /* HMC5883L mag on I2C1 with DRDY on PB7 */
172 /* MS5611 baro on I2C1 */
173 #define I2C1_GPIO_PORT GPIOB
174 #define I2C1_GPIO_SCL GPIO8
175 #define I2C1_GPIO_SDA GPIO9
176 
177 #define I2C2_GPIO_PORT GPIOB
178 #define I2C2_GPIO_SCL GPIO10
179 #define I2C2_GPIO_SDA GPIO11
180 
181 // ADC
182 
183 /* Onboard ADCs */
184 /*
185  ADC1 PC2/ADC1,2,3 channel 12 (Voltage input 3.3v max)
186  ADC2 PC1/ADC1,2,3 channel 11 (Current input 3.3v max)
187  ADC3 PA3/ADC1,2,3 channel 3
188  ADC4 PA2/ADC1,2,3 channel 2
189 */
190 
191 /* provide defines that can be used to access the ADC_x in the code or airframe file
192  * these directly map to the index number of the 4 adc channels defined above
193  * 4th (index 3) is used for bat monitoring by default
194  */
195 
196 #define USE_AD_TIM2 1
197 
198 #ifndef USE_ADC_1
199 #define USE_ADC_1 1
200 #endif
201 
202 #ifndef USE_ADC_2
203 #define USE_ADC_2 1
204 #endif
205 
206 #ifndef USE_ADC_3
207 #define USE_ADC_3 1
208 #endif
209 
210 #ifndef USE_ADC_4
211 #define USE_ADC_4 1
212 #endif
213 
214 // POWER SUPPLY VOLTAGE MEASUREMENT INPUT
215 #if USE_ADC_1
216 #define AD1_1_CHANNEL 10
217 #define ADC_1 AD1_1
218 #define ADC_1_GPIO_PORT GPIOC
219 #define ADC_1_GPIO_PIN GPIO0
220 #endif
221 
222 // CURRENT MEASUREMENT INPUT
223 #if USE_ADC_2
224 #define AD1_2_CHANNEL 11
225 #define ADC_2 AD1_2
226 #define ADC_2_GPIO_PORT GPIOC
227 #define ADC_2_GPIO_PIN GPIO1
228 #ifndef CURRENT_ADC_IN
229 #define CURRENT_ADC_IN ADC_2
230 #endif
231 #endif
232 
233 // RSSI MEASUREMENT INPUT
234 #if USE_ADC_3
235 #define AD1_3_CHANNEL 15
236 #define ADC_3 AD1_3
237 #define ADC_3_GPIO_PORT GPIOC
238 #define ADC_3_GPIO_PIN GPIO5
239 #endif
240 
241 // FREE, LABELED AS UART2 TX PIN
242 #if USE_ADC_4
243 #define AD1_4_CHANNEL 2
244 #define ADC_4 AD1_4
245 #define ADC_4_GPIO_PORT GPIOA
246 #define ADC_4_GPIO_PIN GPIO2
247 #endif
248 
249 /* allow to define ADC_CHANNEL_VSUPPLY in the airframe file*/
250 #ifndef ADC_CHANNEL_VSUPPLY
251 #define ADC_CHANNEL_VSUPPLY ADC_1
252 #endif
253 
254 #ifndef ADC_CHANNEL_CURRENT
255 #define ADC_CHANNEL_CURRENT ADC_2
256 #endif
257 
258 /* no voltage divider on board, adjust VoltageOfAdc in airframe file */
259 #define DefaultVoltageOfAdc(adc) (0.008830925*adc)
260 #define DefaultMilliAmpereOfAdc(adc) (25*adc)
261 
262 #define UART2_RX 1
263 #define SERVO9_PWM_OUT 2
264 
265 #if defined(RADIO_CONTROL_PPM_PIN) && RADIO_CONTROL_PPM_PIN == UART2_RX
266 
267 // THE PPM INPUT IS ALSO THE UART2 RX
268 #define USE_PPM_TIM9 1
269 #define PPM_CHANNEL TIM_IC2
270 #define PPM_TIMER_INPUT TIM_IC_IN_TI2
271 #define PPM_IRQ NVIC_TIM1_BRK_TIM9_IRQ
272 // Capture/Compare InteruptEnable and InterruptFlag
273 #define PPM_CC_IE TIM_DIER_CC2IE
274 #define PPM_CC_IF TIM_SR_CC2IF
275 #define PPM_GPIO_PORT GPIOA
276 #define PPM_GPIO_PIN GPIO3
277 #define PPM_GPIO_AF GPIO_AF3
278 
279 #else
280 
281 #define USE_PPM_TIM1 1
282 #define PPM_CHANNEL TIM_IC1
283 #define PPM_TIMER_INPUT TIM_IC_IN_TI1
284 #define PPM_IRQ NVIC_TIM1_CC_IRQ
285 // Capture/Compare InteruptEnable and InterruptFlag
286 #define PPM_CC_IE TIM_DIER_CC1IE
287 #define PPM_CC_IF TIM_SR_CC1IF
288 #define PPM_GPIO_PORT GPIOA
289 #define PPM_GPIO_PIN GPIO8
290 #define PPM_GPIO_AF GPIO_AF1
291 
292 #endif
293 
294 // SERVO DEFINITIONS
295 #define PWM_USE_TIM1 0
296 #define PWM_USE_TIM3 1
297 #define PWM_USE_TIM4 1
298 #define PWM_USE_TIM8 1
299 #define PWM_USE_TIM12 1
300 
301 #define USE_PWM1 1
302 #define USE_PWM2 1
303 #define USE_PWM3 1
304 #define USE_PWM4 1
305 #define USE_PWM5 1
306 #define USE_PWM6 1
307 #define USE_PWM7 1
308 #define USE_PWM8 1
309 #define USE_PWM9 0
310 
311 // PWM_SERVO_x is the index of the servo in the actuators_pwm_values array
312 #if USE_PWM1
313 #define PWM_SERVO_1 0
314 #define PWM_SERVO_1_TIMER TIM4
315 #define PWM_SERVO_1_GPIO GPIOB
316 #define PWM_SERVO_1_PIN GPIO7
317 #define PWM_SERVO_1_AF GPIO_AF2
318 #define PWM_SERVO_1_OC TIM_OC2
319 #define PWM_SERVO_1_OC_BIT (1<<1)
320 #else
321 #define PWM_SERVO_1_OC_BIT 0
322 #endif
323 
324 #if USE_PWM2
325 #define PWM_SERVO_2 1
326 #define PWM_SERVO_2_TIMER TIM4
327 #define PWM_SERVO_2_GPIO GPIOB
328 #define PWM_SERVO_2_PIN GPIO6
329 #define PWM_SERVO_2_AF GPIO_AF2
330 #define PWM_SERVO_2_OC TIM_OC1
331 #define PWM_SERVO_2_OC_BIT (1<<0)
332 #else
333 #define PWM_SERVO_2_OC_BIT 0
334 #endif
335 
336 #if USE_PWM3
337 #define PWM_SERVO_3 2
338 #define PWM_SERVO_3_TIMER TIM3
339 #define PWM_SERVO_3_GPIO GPIOB
340 #define PWM_SERVO_3_PIN GPIO0
341 #define PWM_SERVO_3_AF GPIO_AF2
342 #define PWM_SERVO_3_OC TIM_OC3
343 #define PWM_SERVO_3_OC_BIT (1<<2)
344 #else
345 #define PWM_SERVO_3_OC_BIT 0
346 #endif
347 
348 #if USE_PWM4
349 #define PWM_SERVO_4 3
350 #define PWM_SERVO_4_TIMER TIM3
351 #define PWM_SERVO_4_GPIO GPIOB
352 #define PWM_SERVO_4_PIN GPIO1
353 #define PWM_SERVO_4_AF GPIO_AF2
354 #define PWM_SERVO_4_OC TIM_OC4
355 #define PWM_SERVO_4_OC_BIT (1<<3)
356 #else
357 #define PWM_SERVO_4_OC_BIT 0
358 #endif
359 
360 #if USE_PWM5
361 #define PWM_SERVO_5 4
362 #define PWM_SERVO_5_TIMER TIM8
363 #define PWM_SERVO_5_GPIO GPIOC
364 #define PWM_SERVO_5_PIN GPIO8
365 #define PWM_SERVO_5_AF GPIO_AF3
366 #define PWM_SERVO_5_OC TIM_OC3
367 #define PWM_SERVO_5_OC_BIT (1<<2)
368 #else
369 #define PWM_SERVO_5_OC_BIT 0
370 #endif
371 
372 #if USE_PWM6
373 #define PWM_SERVO_6 5
374 #define PWM_SERVO_6_TIMER TIM8
375 #define PWM_SERVO_6_GPIO GPIOC
376 #define PWM_SERVO_6_PIN GPIO9
377 #define PWM_SERVO_6_AF GPIO_AF3
378 #define PWM_SERVO_6_OC TIM_OC4
379 #define PWM_SERVO_6_OC_BIT (1<<3)
380 #else
381 #define PWM_SERVO_6_OC_BIT 0
382 #endif
383 
384 #if USE_PWM7
385 #define PWM_SERVO_7 6
386 #define PWM_SERVO_7_TIMER TIM12
387 #define PWM_SERVO_7_GPIO GPIOB
388 #define PWM_SERVO_7_PIN GPIO14
389 #define PWM_SERVO_7_AF GPIO_AF9
390 #define PWM_SERVO_7_OC TIM_OC1
391 #define PWM_SERVO_7_OC_BIT (1<<0)
392 #else
393 #define PWM_SERVO_7_OC_BIT 0
394 #endif
395 
396 #if USE_PWM8
397 #define PWM_SERVO_8 7
398 #define PWM_SERVO_8_TIMER TIM12
399 #define PWM_SERVO_8_GPIO GPIOB
400 #define PWM_SERVO_8_PIN GPIO15
401 #define PWM_SERVO_8_AF GPIO_AF9
402 #define PWM_SERVO_8_OC TIM_OC2
403 #define PWM_SERVO_8_OC_BIT (1<<1)
404 #else
405 #define PWM_SERVO_8_OC_BIT 0
406 #endif
407 
408 #if USE_PWM9
409 #define PWM_SERVO_9 8
410 #define PWM_SERVO_9_TIMER TIM1
411 #define PWM_SERVO_9_GPIO GPIOA
412 #define PWM_SERVO_9_PIN GPIO8
413 #define PWM_SERVO_9_AF GPIO_AF1
414 #define PWM_SERVO_9_OC TIM_OC1
415 #define PWM_SERVO_9_OC_BIT (1<<0)
416 #else
417 #define PWM_SERVO_9_OC_BIT 0
418 #endif
419 
420 
421 // servos 1-2 on TIM4
422 #define PWM_TIM4_CHAN_MASK (PWM_SERVO_1_OC_BIT | PWM_SERVO_2_OC_BIT)
423 // servos 3-4 on TIM3
424 #define PWM_TIM3_CHAN_MASK (PWM_SERVO_3_OC_BIT | PWM_SERVO_4_OC_BIT)
425 // servos 5-6 on TIM8
426 #define PWM_TIM8_CHAN_MASK (PWM_SERVO_5_OC_BIT | PWM_SERVO_6_OC_BIT)
427 // servos 7-8 on TIM12
428 #define PWM_TIM12_CHAN_MASK (PWM_SERVO_7_OC_BIT | PWM_SERVO_8_OC_BIT)
429 // servo 9 on TIM1
430 #if USE_PWM9
431 #define PWM_TIM1_CHAN_MASK (PWM_SERVO_9_OC_BIT)
432 #endif
433 
434 
435 /*
436  * Spektrum
437  */
438 /* The line that is pulled low at power up to initiate the bind process */
439 #define SPEKTRUM_BIND_PIN GPIO0
440 #define SPEKTRUM_BIND_PIN_PORT GPIOB
441 
442 #define SPEKTRUM_UART1_RCC RCC_USART1
443 #define SPEKTRUM_UART1_BANK GPIOA
444 #define SPEKTRUM_UART1_PIN GPIO10
445 #define SPEKTRUM_UART1_AF GPIO_AF7
446 #define SPEKTRUM_UART1_IRQ NVIC_USART1_IRQ
447 #define SPEKTRUM_UART1_ISR usart1_isr
448 #define SPEKTRUM_UART1_DEV USART1
449 
450 #define SPEKTRUM_UART2_RCC RCC_USART2
451 #define SPEKTRUM_UART2_BANK GPIOA
452 #define SPEKTRUM_UART2_PIN GPIO3
453 #define SPEKTRUM_UART2_AF GPIO_AF8
454 #define SPEKTRUM_UART2_IRQ NVIC_USART2_IRQ
455 #define SPEKTRUM_UART2_ISR usart2_isr
456 #define SPEKTRUM_UART2_DEV USART2
457 
458 #define SPEKTRUM_UART5_RCC RCC_UART5
459 #define SPEKTRUM_UART5_BANK GPIOD
460 #define SPEKTRUM_UART5_PIN GPIO2
461 #define SPEKTRUM_UART5_AF GPIO_AF8
462 #define SPEKTRUM_UART5_IRQ NVIC_UART5_IRQ
463 #define SPEKTRUM_UART5_ISR uart5_isr
464 #define SPEKTRUM_UART5_DEV UART5
465 
466 
467 
468 #endif // CONFIG_MATEK_F405_WING_1_0_H