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