Paparazzi UAS
v6.1.0_stable
Paparazzi is a free software Unmanned Aircraft System.
holybro_kakute_f7.h
Go to the documentation of this file.
1
#ifndef CONFIG_HOLYBRO_KAKUTE_F7_H
2
#define CONFIG_HOLYBRO_KAKUTE_F7_H
3
4
#define BOARD_HOLYBRO_KAKUTE_F7
5
9
#include "
board.h
"
10
15
/*
16
* AHB_CLK
17
*/
18
#define AHB_CLK STM32_HCLK
19
20
/*
21
* Concat macro
22
*/
23
#define _CONCAT_BOARD_PARAM(_s1, _s2) _s1 ## _s2
24
#define CONCAT_BOARD_PARAM(_s1, _s2) _CONCAT_BOARD_PARAM(_s1, _s2)
25
26
/*
27
* LEDs
28
*/
29
/* blue, 1 on LED_ON, 0 on LED_OFF */
30
#ifndef USE_LED_1
31
#define USE_LED_1 1
32
#endif
33
#define LED_1_GPIO PAL_PORT(LINE_LED1)
34
#define LED_1_GPIO_PIN PAL_PAD(LINE_LED1)
35
#define LED_1_GPIO_ON gpio_set
36
#define LED_1_GPIO_OFF gpio_clear
37
38
/*
39
* ADCs
40
*/
41
// RSSI
42
#if USE_ADC_1
43
#define AD1_1_CHANNEL CONCAT_BOARD_PARAM(ADC_CHANNEL_IN, RSSI_ADC_IN)
44
#define ADC_1 AD1_1
45
#define ADC_1_GPIO_PORT PAL_PORT(LINE_RSSI)
46
#define ADC_1_GPIO_PIN PAL_PAD(LINE_RSSI)
47
#endif
48
49
// VBAT enabled by default
50
#ifndef USE_ADC_2
51
#define USE_ADC_2 1
52
#endif
53
#if USE_ADC_2
54
#define AD1_2_CHANNEL CONCAT_BOARD_PARAM(ADC_CHANNEL_IN, VBAT_MEAS_ADC_IN)
55
#define ADC_2 AD1_2
56
#define ADC_2_GPIO_PORT PAL_PORT(LINE_VBAT_MEAS)
57
#define ADC_2_GPIO_PIN PAL_PAD(LINE_VBAT_MEAS)
58
#endif
59
60
// CURRENT
61
#if USE_ADC_3
62
#define AD1_3_CHANNEL CONCAT_BOARD_PARAM(ADC_CHANNEL_IN, CURRENT_MEAS_ADC_IN)
63
#define ADC_3 AD1_3
64
#define ADC_3_GPIO_PORT PAL_PORT(LINE_CURRENT_MEAS)
65
#define ADC_3_GPIO_PIN PAL_PAD(LINE_CURRENT_MEAS)
66
#endif
67
68
/* allow to define ADC_CHANNEL_VSUPPLY in the airframe file*/
69
#ifndef ADC_CHANNEL_VSUPPLY
70
#define ADC_CHANNEL_VSUPPLY ADC_2
71
#endif
72
73
/*
74
* R1 = 1k
75
* R2 = 10k
76
* adc * (3.3 / 2^12) * ((R1 + R2) / R1)
77
*/
78
#define VBAT_R1 1000.0f
79
#define VBAT_R2 10000.0f
80
#define DefaultVoltageOfAdc(adc) ((3.3f/4096.0f)*((VBAT_R1+VBAT_R2)/VBAT_R1)*adc)
81
82
/*
83
* current sensor: 132A, 3.3V 12bits ADC -> 40 A/V -> 40000 * 3.3/2^12 mA/ADC
84
*/
85
#define DefaultMilliAmpereOfAdc(adc) ((40000.f*3.3f/4096.f)*adc)
86
87
/*
88
* PWM defines
89
*/
90
91
#ifndef USE_PWM1
92
#define USE_PWM1 1
93
#endif
94
#if USE_PWM1
95
#define PWM_SERVO_1 1
96
#define PWM_SERVO_1_GPIO PAL_PORT(LINE_S1)
97
#define PWM_SERVO_1_PIN PAL_PAD(LINE_S1)
98
#define PWM_SERVO_1_AF AF_S1
99
#define PWM_SERVO_1_DRIVER CONCAT_BOARD_PARAM(PWMD, S1_TIM)
100
#define PWM_SERVO_1_CHANNEL (S1_TIM_CH-1)
101
#define PWM_SERVO_1_ACTIVE PWM_OUTPUT_ACTIVE_HIGH
102
#else
103
#define PWM_SERVO_1_ACTIVE PWM_OUTPUT_DISABLED
104
#endif
105
106
#ifndef USE_PWM2
107
#define USE_PWM2 1
108
#endif
109
#if USE_PWM2
110
#define PWM_SERVO_2 2
111
#define PWM_SERVO_2_GPIO PAL_PORT(LINE_S2)
112
#define PWM_SERVO_2_PIN PAL_PAD(LINE_S2)
113
#define PWM_SERVO_2_AF AF_S2
114
#define PWM_SERVO_2_DRIVER CONCAT_BOARD_PARAM(PWMD, S2_TIM)
115
#define PWM_SERVO_2_CHANNEL (S2_TIM_CH-1)
116
#define PWM_SERVO_2_ACTIVE PWM_OUTPUT_ACTIVE_HIGH
117
#else
118
#define PWM_SERVO_2_ACTIVE PWM_OUTPUT_DISABLED
119
#endif
120
121
#ifndef USE_PWM3
122
#define USE_PWM3 1
123
#endif
124
#if USE_PWM3
125
#define PWM_SERVO_3 3
126
#define PWM_SERVO_3_GPIO PAL_PORT(LINE_S3)
127
#define PWM_SERVO_3_PIN PAL_PAD(LINE_S3)
128
#define PWM_SERVO_3_AF AF_S3
129
#define PWM_SERVO_3_DRIVER CONCAT_BOARD_PARAM(PWMD, S3_TIM)
130
#define PWM_SERVO_3_CHANNEL (S3_TIM_CH-1)
131
#define PWM_SERVO_3_ACTIVE PWM_OUTPUT_ACTIVE_HIGH
132
#else
133
#define PWM_SERVO_3_ACTIVE PWM_OUTPUT_DISABLED
134
#endif
135
136
#ifndef USE_PWM4
137
#define USE_PWM4 1
138
#endif
139
#if USE_PWM4
140
#define PWM_SERVO_4 4
141
#define PWM_SERVO_4_GPIO PAL_PORT(LINE_S4)
142
#define PWM_SERVO_4_PIN PAL_PAD(LINE_S4)
143
#define PWM_SERVO_4_AF AF_S4
144
#define PWM_SERVO_4_DRIVER CONCAT_BOARD_PARAM(PWMD, S4_TIM)
145
#define PWM_SERVO_4_CHANNEL (S4_TIM_CH-1)
146
#define PWM_SERVO_4_ACTIVE PWM_OUTPUT_ACTIVE_HIGH
147
#else
148
#define PWM_SERVO_4_ACTIVE PWM_OUTPUT_DISABLED
149
#endif
150
151
#ifndef USE_PWM5
152
#define USE_PWM5 1
153
#endif
154
#if USE_PWM5
155
#define PWM_SERVO_5 5
156
#define PWM_SERVO_5_GPIO PAL_PORT(LINE_S5)
157
#define PWM_SERVO_5_PIN PAL_PAD(LINE_S5)
158
#define PWM_SERVO_5_AF AF_S5
159
#define PWM_SERVO_5_DRIVER CONCAT_BOARD_PARAM(PWMD, S5_TIM)
160
#define PWM_SERVO_5_CHANNEL (S5_TIM_CH-1)
161
#define PWM_SERVO_5_ACTIVE PWM_OUTPUT_ACTIVE_HIGH
162
#else
163
#define PWM_SERVO_5_ACTIVE PWM_OUTPUT_DISABLED
164
#endif
165
166
#ifndef USE_PWM6
167
#define USE_PWM6 1
168
#endif
169
#if USE_PWM6
170
#define PWM_SERVO_6 6
171
#define PWM_SERVO_6_GPIO PAL_PORT(LINE_S6)
172
#define PWM_SERVO_6_PIN PAL_PAD(LINE_S6)
173
#define PWM_SERVO_6_AF AF_S6
174
#define PWM_SERVO_6_DRIVER CONCAT_BOARD_PARAM(PWMD, S6_TIM)
175
#define PWM_SERVO_6_CHANNEL (S6_TIM_CH-1)
176
#define PWM_SERVO_6_ACTIVE PWM_OUTPUT_ACTIVE_HIGH
177
#else
178
#define PWM_SERVO_6_ACTIVE PWM_OUTPUT_DISABLED
179
#endif
180
181
// servo index starting at 1 + regular servos
182
// so NB = 1+6
183
#define ACTUATORS_PWM_NB 7
184
185
186
#ifdef STM32_PWM_USE_TIM1
187
#define PWM_CONF_TIM1 STM32_PWM_USE_TIM1
188
#else
189
#define PWM_CONF_TIM1 1
190
#endif
191
#define PWM_CONF1_DEF { \
192
PWM_FREQUENCY, \
193
PWM_FREQUENCY/TIM1_SERVO_HZ, \
194
NULL, \
195
{ \
196
{ PWM_SERVO_2_ACTIVE, NULL }, \
197
{ PWM_SERVO_3_ACTIVE, NULL }, \
198
{ PWM_SERVO_1_ACTIVE, NULL }, \
199
{ PWM_OUTPUT_DISABLED, NULL }, \
200
}, \
201
0, \
202
0 \
203
}
204
205
#ifdef STM32_PWM_USE_TIM3
206
#define PWM_CONF_TIM3 STM32_PWM_USE_TIM3
207
#else
208
#define PWM_CONF_TIM3 1
209
#endif
210
#define PWM_CONF3_DEF { \
211
PWM_FREQUENCY, \
212
PWM_FREQUENCY/TIM3_SERVO_HZ, \
213
NULL, \
214
{ \
215
{ PWM_OUTPUT_DISABLED, NULL }, \
216
{ PWM_OUTPUT_DISABLED, NULL }, \
217
{ PWM_SERVO_4_ACTIVE, NULL }, \
218
{ PWM_SERVO_5_ACTIVE, NULL }, \
219
}, \
220
0, \
221
0 \
222
}
223
224
#ifdef STM32_PWM_USE_TIM5
225
#define PWM_CONF_TIM5 STM32_PWM_USE_TIM5
226
#else
227
#define PWM_CONF_TIM5 1
228
#endif
229
#define PWM_CONF5_DEF { \
230
PWM_FREQUENCY, \
231
PWM_FREQUENCY/TIM5_SERVO_HZ, \
232
NULL, \
233
{ \
234
{ PWM_OUTPUT_DISABLED, NULL }, \
235
{ PWM_OUTPUT_DISABLED, NULL }, \
236
{ PWM_OUTPUT_DISABLED, NULL }, \
237
{ PWM_SERVO_6_ACTIVE, NULL }, \
238
}, \
239
0, \
240
0 \
241
}
242
246
#ifndef DSHOT_TELEMETRY_DEV
247
#define DSHOT_TELEMETRY_DEV NULL
248
#endif
249
250
#ifndef USE_DSHOT_TIM
251
#define USE_DSHOT_TIM 0
252
#endif
253
254
#if USE_DSHOT_TIM
255
256
#define DSHOT_SERVO_1 1
257
#define DSHOT_SERVO_1_GPIO PAL_PORT(LINE_S1)
258
#define DSHOT_SERVO_1_PIN PAL_PAD(LINE_S1)
259
#define DSHOT_SERVO_1_AF AF_S1
260
#define DSHOT_SERVO_1_DRIVER CONCAT_BOARD_PARAM(DSHOTD, S1_TIM)
261
#define DSHOT_SERVO_1_CHANNEL S1_TIM_CH
262
263
#define DSHOT_SERVO_2 2
264
#define DSHOT_SERVO_2_GPIO PAL_PORT(LINE_S2)
265
#define DSHOT_SERVO_2_PIN PAL_PAD(LINE_S2)
266
#define DSHOT_SERVO_2_AF AF_S2
267
#define DSHOT_SERVO_2_DRIVER CONCAT_BOARD_PARAM(DSHOTD, S2_TIM)
268
#define DSHOT_SERVO_2_CHANNEL S2_TIM_CH
269
270
#define DSHOT_SERVO_3 3
271
#define DSHOT_SERVO_3_GPIO PAL_PORT(LINE_S3)
272
#define DSHOT_SERVO_3_PIN PAL_PAD(LINE_S3)
273
#define DSHOT_SERVO_3_AF AF_S3
274
#define DSHOT_SERVO_3_DRIVER CONCAT_BOARD_PARAM(DSHOTD, S3_TIM)
275
#define DSHOT_SERVO_3_CHANNEL S3_TIM_CH
276
277
#define DSHOT_SERVO_4 4
278
#define DSHOT_SERVO_4_GPIO PAL_PORT(LINE_S4)
279
#define DSHOT_SERVO_4_PIN PAL_PAD(LINE_S4)
280
#define DSHOT_SERVO_4_AF AF_S4
281
#define DSHOT_SERVO_4_DRIVER CONCAT_BOARD_PARAM(DSHOTD, S4_TIM)
282
#define DSHOT_SERVO_4_CHANNEL S4_TIM_CH
283
284
#define DSHOT_CONF_TIM1 1
285
#define DSHOT_CONF4_DEF { \
286
.dma_stream = STM32_PWM1_UP_DMA_STREAM, \
287
.dma_channel = STM32_PWM1_UP_DMA_CHANNEL, \
288
.pwmp = &PWMD1, \
289
.tlm_sd = DSHOT_TELEMETRY_DEV, \
290
.dma_buf = &dshot4DmaBuffer, \
291
.dcache_memory_in_use = false \
292
}
293
294
#define DSHOT_CONF_TIM3 1
295
#define DSHOT_CONF3_DEF { \
296
.dma_stream = STM32_PWM3_UP_DMA_STREAM, \
297
.dma_channel = STM32_PWM3_UP_DMA_CHANNEL, \
298
.pwmp = &PWMD3, \
299
.tlm_sd = DSHOT_TELEMETRY_DEV, \
300
.dma_buf = &dshot4DmaBuffer, \
301
.dcache_memory_in_use = false \
302
}
303
304
#endif
305
309
#define UART1_GPIO_PORT_TX PAL_PORT(LINE_UART1_TX)
310
#define UART1_GPIO_TX PAL_PAD(LINE_UART1_TX)
311
#define UART1_GPIO_PORT_RX PAL_PORT(LINE_UART1_RX)
312
#define UART1_GPIO_RX PAL_PAD(LINE_UART1_RX)
313
#define UART1_GPIO_AF AF_UART1_TX
314
319
#define UART2_GPIO_PORT_TX PAL_PORT(LINE_UART2_TX)
320
#define UART2_GPIO_TX PAL_PAD(LINE_UART2_TX)
321
#define UART2_GPIO_PORT_RX PAL_PORT(LINE_UART2_RX)
322
#define UART2_GPIO_RX PAL_PAD(LINE_UART2_RX)
323
#define UART2_GPIO_AF AF_UART2_TX
324
328
#define UART3_GPIO_PORT_TX PAL_PORT(LINE_UART3_TX)
329
#define UART3_GPIO_TX PAL_PAD(LINE_UART3_TX)
330
#define UART3_GPIO_PORT_RX PAL_PORT(LINE_UART3_RX)
331
#define UART3_GPIO_RX PAL_PAD(LINE_UART3_RX)
332
#define UART3_GPIO_AF AF_UART3_TX
333
337
#define UART4_GPIO_PORT_TX PAL_PORT(LINE_UART4_TX)
338
#define UART4_GPIO_TX PAL_PAD(LINE_UART4_TX)
339
#define UART4_GPIO_PORT_RX PAL_PORT(LINE_UART4_RX)
340
#define UART4_GPIO_RX PAL_PAD(LINE_UART4_RX)
341
#define UART4_GPIO_AF AF_UART4_TX
342
347
#define USE_UART6_RX TRUE
348
#define USE_UART6_TX FALSE
349
#define UART6_GPIO_PORT_RX PAL_PORT(LINE_RC1)
350
#define UART6_GPIO_RX PAL_PAD(LINE_RC1)
351
#define UART6_GPIO_AF RC1_USART_AF
352
353
/* The line that is pulled low at power up to initiate the bind process
354
*/
355
#define SPEKTRUM_BIND_PIN PAL_PORT(LINE_XXX)
356
#define SPEKTRUM_BIND_PIN_PORT PAL_PAD(LINE_XXX)
357
358
// no wait with chibios as the RTC oscillator takes longer to stabilize
359
#define SPEKTRUM_BIND_WAIT 30000
360
366
#define RC_PPM_TICKS_PER_USEC 6
367
#define PPM_TIMER_FREQUENCY 6000000
368
#define PPM_CHANNEL CONCAT_BOARD_PARAM(ICU_CHANNEL_, RC2_TIM_CH)
369
#define PPM_TIMER CONCAT_BOARD_PARAM(ICUD, RC2_TIM)
370
374
// Digital noise filter: 0 disabled, [0x1 - 0xF] enable up to n t_I2CCLK
375
#define STM32_CR1_DNF(n) ((n & 0x0f) << 8)
376
// Timing register
377
#define I2C_FAST_400KHZ_DNF0_100NS_PCLK54MHZ_TIMINGR (STM32_TIMINGR_PRESC(0U) | \
378
STM32_TIMINGR_SCLDEL(10U) | STM32_TIMINGR_SDADEL(0U) | \
379
STM32_TIMINGR_SCLH(34U) | STM32_TIMINGR_SCLL(86U))
380
#define I2C_STD_100KHZ_DNF0_100NS_PCLK54MHZ_TIMINGR (STM32_TIMINGR_PRESC(1U) | \
381
STM32_TIMINGR_SCLDEL(9U) | STM32_TIMINGR_SDADEL(0U) | \
382
STM32_TIMINGR_SCLH(105U) | STM32_TIMINGR_SCLL(153U))
383
384
385
#ifndef I2C1_CLOCK_SPEED
386
#define I2C1_CLOCK_SPEED 400000
387
#endif
388
389
#if I2C1_CLOCK_SPEED == 400000
390
#define I2C1_CFG_DEF { \
391
.timingr = I2C_FAST_400KHZ_DNF0_100NS_PCLK54MHZ_TIMINGR, \
392
.cr1 = STM32_CR1_DNF(0), \
393
.cr2 = 0 \
394
}
395
#elif I2C1_CLOCK_SPEED == 100000
396
#define I2C1_CFG_DEF { \
397
.timingr = I2C_STD_100KHZ_DNF0_100NS_PCLK54MHZ_TIMINGR, \
398
.cr1 = STM32_CR1_DNF(0), \
399
.cr2 = 0 \
400
}
401
#else
402
#error "Unknown I2C1 clock speed"
403
#endif
404
409
// Internal SPI (SDCARD)
410
#define SPI1_GPIO_AF AF_SPI1_CLK
411
#define SPI1_GPIO_PORT_MISO PAL_PORT(LINE_SPI1_MISO)
412
#define SPI1_GPIO_MISO PAL_PAD(LINE_SPI1_MISO)
413
#define SPI1_GPIO_PORT_MOSI PAL_PORT(LINE_SPI1_MOSI)
414
#define SPI1_GPIO_MOSI PAL_PAD(LINE_SPI1_MOSI)
415
#define SPI1_GPIO_PORT_SCK PAL_PORT(LINE_SPI1_CLK)
416
#define SPI1_GPIO_SCK PAL_PAD(LINE_SPI1_CLK)
417
418
// Internal SPI (OSD)
419
#define SPI2_GPIO_AF AF_SPI2_CLK
420
#define SPI2_GPIO_PORT_MISO PAL_PORT(LINE_SPI2_MISO)
421
#define SPI2_GPIO_MISO PAL_PAD(LINE_SPI2_MISO)
422
#define SPI2_GPIO_PORT_MOSI PAL_PORT(LINE_SPI2_MOSI)
423
#define SPI2_GPIO_MOSI PAL_PAD(LINE_SPI2_MOSI)
424
#define SPI2_GPIO_PORT_SCK PAL_PORT(LINE_SPI2_CLK)
425
#define SPI2_GPIO_SCK PAL_PAD(LINE_SPI2_CLK)
426
427
// Internal SPI (IMU)
428
#define SPI4_GPIO_AF AF_SPI4_INTERNAL_CLK
429
#define SPI4_GPIO_PORT_MISO PAL_PORT(LINE_SPI4_INTERNAL_MISO)
430
#define SPI4_GPIO_MISO PAL_PAD(LINE_SPI4_INTERNAL_MISO)
431
#define SPI4_GPIO_PORT_MOSI PAL_PORT(LINE_SPI4_INTERNAL_MOSI)
432
#define SPI4_GPIO_MOSI PAL_PAD(LINE_SPI4_INTERNAL_MOSI)
433
#define SPI4_GPIO_PORT_SCK PAL_PORT(LINE_SPI4_INTERNAL_CLK)
434
#define SPI4_GPIO_SCK PAL_PAD(LINE_SPI4_INTERNAL_CLK)
435
436
// SLAVE0 on IMU1 (MPU6000)
437
#define SPI_SELECT_SLAVE0_PORT PAL_PORT(LINE_IMU_CS)
438
#define SPI_SELECT_SLAVE0_PIN PAL_PAD(LINE_IMU_CS)
439
// SLAVE1 on SDCARD
440
#define SPI_SELECT_SLAVE1_PORT PAL_PORT(LINE_SDCARD_CS)
441
#define SPI_SELECT_SLAVE1_PIN PAL_PAD(LINE_SDCARD_CS)
442
// SLAVE2 on OSD
443
#define SPI_SELECT_SLAVE2_PORT PAL_PORT(LINE_OSD_CS)
444
#define SPI_SELECT_SLAVE2_PIN PAL_PAD(LINE_OSD_CS)
445
452
#ifndef USE_BARO_BOARD
453
#define USE_BARO_BOARD 0
454
#endif
455
456
/*
457
* Actuators for fixedwing
458
*/
459
/* Default actuators driver */
460
#define DEFAULT_ACTUATORS "modules/actuators/actuators_pwm.h"
461
#define ActuatorDefaultSet(_x,_y) ActuatorPwmSet(_x,_y)
462
#define ActuatorsDefaultInit() ActuatorsPwmInit()
463
#define ActuatorsDefaultCommit() ActuatorsPwmCommit()
464
465
#endif
/* CONFIG_HOLYBRO_KAKUTE_F7_H */
466
board.h
sw
airborne
boards
holybro
kakute_f7
holybro_kakute_f7.h
Generated on Tue Feb 1 2022 13:08:43 for Paparazzi UAS by
1.8.17