Paparazzi UAS v7.0_unstable
Paparazzi is a free software Unmanned Aircraft System.
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
crazyflie.h
Go to the documentation of this file.
1#ifndef CONFIG_CRAZYFLIE_2_1_H
2#define CONFIG_CRAZYFLIE_2_1_H
3
4#define BOARD_CRAZYFLIE
5
10
15/*
16 * AHB_CLK
17 */
18#define AHB_CLK STM32_HCLK
19
20/*
21 * LEDs
22 */
23#ifndef USE_LED_1
24#define USE_LED_1 1
25#endif
26#define LED_1_GPIO PAL_PORT(LINE_LED_RED_R)
27#define LED_1_GPIO_PIN PAL_PAD(LINE_LED_RED_R)
28#define LED_1_GPIO_ON gpio_clear
29#define LED_1_GPIO_OFF gpio_set
30
31#ifndef USE_LED_2
32#define USE_LED_2 1
33#endif
34#define LED_2_GPIO PAL_PORT(LINE_LED_RED_L)
35#define LED_2_GPIO_PIN PAL_PAD(LINE_LED_RED_L)
36#define LED_2_GPIO_ON gpio_clear
37#define LED_2_GPIO_OFF gpio_set
38
39#ifndef USE_LED_3
40#define USE_LED_3 1
41#endif
42#define LED_3_GPIO PAL_PORT(LINE_LED_GREEN_R)
43#define LED_3_GPIO_PIN PAL_PAD(LINE_LED_GREEN_R)
44#define LED_3_GPIO_ON gpio_clear
45#define LED_3_GPIO_OFF gpio_set
46
47#ifndef USE_LED_4
48#define USE_LED_4 1
49#endif
50#define LED_4_GPIO PAL_PORT(LINE_LED_GREEN_L)
51#define LED_4_GPIO_PIN PAL_PAD(LINE_LED_GREEN_L)
52#define LED_4_GPIO_ON gpio_clear
53#define LED_4_GPIO_OFF gpio_set
54
55#ifndef USE_LED_5
56#define USE_LED_5 1
57#endif
58#define LED_5_GPIO PAL_PORT(LINE_LED_BLUE_L)
59#define LED_5_GPIO_PIN PAL_PAD(LINE_LED_BLUE_L)
60#define LED_5_GPIO_ON gpio_set
61#define LED_5_GPIO_OFF gpio_clear
62
63/*
64 * ADCs
65 */
66// TODO for AUX
67// No VBAT monitoring ?
68
69/*
70 * PWM TIM defines
71 * enable TIM2 and TIM4 by default
72 */
73#ifndef USE_PWM_TIM2
74#define USE_PWM_TIM2 1
75#endif
76
77#ifndef USE_PWM_TIM4
78#define USE_PWM_TIM4 1
79#endif
80
81/*
82 * PWM defines
83 */
84
85// SRVa connectors, activated in PWM mode by default
86
87#ifndef USE_PWM1
88#define USE_PWM1 1
89#endif
90#if USE_PWM1
91#define PWM_SERVO_1 1
92#define PWM_SERVO_1_GPIO PAL_PORT(LINE_MOTOR1)
93#define PWM_SERVO_1_PIN PAL_PAD(LINE_MOTOR1)
94#define PWM_SERVO_1_AF AF_MOTOR1
95#define PWM_SERVO_1_DRIVER PWMD2
96#define PWM_SERVO_1_CHANNEL 1
97#define PWM_SERVO_1_CONF pwmcfg2
98#endif
99
100#ifndef USE_PWM2
101#define USE_PWM2 1
102#endif
103#if USE_PWM2
104#define PWM_SERVO_2 2
105#define PWM_SERVO_2_GPIO PAL_PORT(LINE_MOTOR2)
106#define PWM_SERVO_2_PIN PAL_PAD(LINE_MOTOR2)
107#define PWM_SERVO_2_AF AF_MOTOR2
108#define PWM_SERVO_2_DRIVER PWMD2
109#define PWM_SERVO_2_CHANNEL 3
110#define PWM_SERVO_2_CONF pwmcfg2
111#endif
112
113#ifndef USE_PWM3
114#define USE_PWM3 1
115#endif
116#if USE_PWM3
117#define PWM_SERVO_3 3
118#define PWM_SERVO_3_GPIO PAL_PORT(LINE_MOTOR3)
119#define PWM_SERVO_3_PIN PAL_PAD(LINE_MOTOR3)
120#define PWM_SERVO_3_AF AF_MOTOR3
121#define PWM_SERVO_3_DRIVER PWMD2
122#define PWM_SERVO_3_CHANNEL 0
123#define PWM_SERVO_3_CONF pwmcfg2
124#endif
125
126#ifndef USE_PWM4
127#define USE_PWM4 1
128#endif
129#if USE_PWM4
130#define PWM_SERVO_4 4
131#define PWM_SERVO_4_GPIO PAL_PORT(LINE_MOTOR4)
132#define PWM_SERVO_4_PIN PAL_PAD(LINE_MOTOR4)
133#define PWM_SERVO_4_AF AF_MOTOR4
134#define PWM_SERVO_4_DRIVER PWMD4
135#define PWM_SERVO_4_CHANNEL 3
136#define PWM_SERVO_4_CONF pwmcfg4
137#endif
138
139// servo index starting at 1 + regular servos + aux servos
140// so NB = 1+4
141#define ACTUATORS_PWM_NB 5
142
143
144// PWM control of brushed motors
145// Freq = 84 MHz (corresponding to prescaler of 0)
146// Period = 256 (corresponding to 8bit resolution for command at ~328 kHz))
147// as indicated in Crazyflie source code, 328 kHz offers better natural filtering
148// than 128 kHz
149// It is also needed to redefined PWM_CMD_TO_US to get the proper converstion
150// from command to clock pulses number
151#define PWM_CMD_TO_US(_t) (_t)
152#define PWM_FREQUENCY 84000000
153#define SERVO_HZ (PWM_FREQUENCY / 256) // 328125
154
158#define UART2_GPIO_PORT_TX PAL_PORT(LINE_E_TX2)
159#define UART2_GPIO_TX PAL_PAD(LINE_E_TX2)
160#define UART2_GPIO_PORT_RX PAL_PORT(LINE_E_RX2)
161#define UART2_GPIO_RX PAL_PAD(LINE_E_RX2)
162#define UART2_GPIO_AF AF_E_RX2
163#ifndef UART2_HW_FLOW_CONTROL
164#define UART2_HW_FLOW_CONTROL FALSE
165#endif
166
170#define UART3_GPIO_PORT_TX PAL_PORT(LINE_E_TX1)
171#define UART3_GPIO_TX PAL_PAD(LINE_E_TX1)
172#define UART3_GPIO_PORT_RX PAL_PORT(LINE_E_RX1)
173#define UART3_GPIO_RX PAL_PAD(LINE_E_RX1)
174#define UART3_GPIO_AF AF_E_RX1
175
179#define UART6_GPIO_PORT_TX PAL_PORT(LINE_NRF_TX)
180#define UART6_GPIO_TX PAL_PAD(LINE_NRF_TX)
181#define UART6_GPIO_PORT_RX PAL_PORT(LINE_NRF_RX)
182#define UART6_GPIO_RX PAL_PAD(LINE_NRF_RX)
183#define UART6_GPIO_AF AF_NRF_RX
184#define UART6_GPIO_PORT_CTS PAL_PORT(LINE_NRF_FLOW_CTRL)
185#define UART6_GPIO_CTS NRF_FLOW_CTRL
186
191// Digital noise filter: 0 disabled, [0x1 - 0xF] enable up to n t_I2CCLK
192#define STM32_CR1_DNF(n) ((n & 0x0f) << 8)
193// Timing register
194#define I2C_FAST_400KHZ_DNF0_100NS_PCLK54MHZ_TIMINGR (STM32_TIMINGR_PRESC(0U) | \
195 STM32_TIMINGR_SCLDEL(10U) | STM32_TIMINGR_SDADEL(0U) | \
196 STM32_TIMINGR_SCLH(34U) | STM32_TIMINGR_SCLL(86U))
197#define I2C_STD_100KHZ_DNF0_100NS_PCLK54MHZ_TIMINGR (STM32_TIMINGR_PRESC(1U) | \
198 STM32_TIMINGR_SCLDEL(9U) | STM32_TIMINGR_SDADEL(0U) | \
199 STM32_TIMINGR_SCLH(105U) | STM32_TIMINGR_SCLL(153U))
200
201
202// Internal I2C (IMU, baro)
203
204#ifndef I2C3_CLOCK_SPEED
205#define I2C3_CLOCK_SPEED 400000
206#endif
207#if I2C3_CLOCK_SPEED == 400000
208#define I2C3_DUTY_CYCLE FAST_DUTY_CYCLE_2
209#elif I2C3_CLOCK_SPEED == 100000
210#define I2C3_DUTY_CYCLE STD_DUTY_CYCLE
211#else
212#error "Invalid I2C3 clock speed"
213#endif
214#define I2C3_CFG_DEF { \
215 OPMODE_I2C, \
216 I2C3_CLOCK_SPEED, \
217 I2C3_DUTY_CYCLE, \
218 }
219
220// External I2C
221
222#ifndef I2C1_CLOCK_SPEED
223#define I2C1_CLOCK_SPEED 400000
224#endif
225#if I2C1_CLOCK_SPEED == 400000
226#define I2C1_DUTY_CYCLE FAST_DUTY_CYCLE_2
227#elif I2C1_CLOCK_SPEED == 100000
228#define I2C1_DUTY_CYCLE STD_DUTY_CYCLE
229#else
230#error "Invalid I2C1 clock speed"
231#endif
232#define I2C1_CFG_DEF { \
233 OPMODE_I2C, \
234 I2C1_CLOCK_SPEED, \
235 I2C1_DUTY_CYCLE, \
236 }
237
238/*
239#ifndef I2C3_CLOCK_SPEED
240#define I2C3_CLOCK_SPEED 400000
241#endif
242
243#if I2C3_CLOCK_SPEED == 400000
244#define I2C3_CFG_DEF { \
245 .timingr = I2C_FAST_400KHZ_DNF0_100NS_PCLK54MHZ_TIMINGR, \
246 .cr1 = STM32_CR1_DNF(0), \
247 .cr2 = 0 \
248}
249#elif I2C3_CLOCK_SPEED == 100000
250#define I2C3_CFG_DEF { \
251 .timingr = I2C_STD_100KHZ_DNF0_100NS_PCLK54MHZ_TIMINGR, \
252 .cr1 = STM32_CR1_DNF(0), \
253 .cr2 = 0 \
254}
255#else
256#error "Unknown I2C3 clock speed"
257#endif
258
259// External I2C
260
261#ifndef I2C1_CLOCK_SPEED
262#define I2C1_CLOCK_SPEED 400000
263#endif
264
265#if I2C1_CLOCK_SPEED == 400000
266#define I2C1_CFG_DEF { \
267 .timingr = I2C_FAST_400KHZ_DNF0_100NS_PCLK54MHZ_TIMINGR, \
268 .cr1 = STM32_CR1_DNF(0), \
269 .cr2 = 0 \
270}
271#elif I2C1_CLOCK_SPEED == 100000
272#define I2C1_CFG_DEF { \
273 .timingr = I2C_STD_100KHZ_DNF0_100NS_PCLK54MHZ_TIMINGR, \
274 .cr1 = STM32_CR1_DNF(0), \
275 .cr2 = 0 \
276}
277#else
278#error "Unknown I2C2 clock speed"
279#endif
280*/
281
286// External SPI
287#define SPI1_GPIO_AF AF_E_SCK
288#define SPI1_GPIO_PORT_MISO PAL_PORT(LINE_E_MISO)
289#define SPI1_GPIO_MISO PAL_PAD(LINE_E_MISO)
290#define SPI1_GPIO_PORT_MOSI PAL_PORT(LINE_E_MOSI)
291#define SPI1_GPIO_MOSI PAL_PAD(LINE_E_MOSI)
292#define SPI1_GPIO_PORT_SCK PAL_PORT(LINE_E_SCK)
293#define SPI1_GPIO_SCK PAL_PAD(LINE_E_SCK)
294
295#define SPI_SELECT_SLAVE0_PORT PAL_PORT(LINE_E_CS0)
296#define SPI_SELECT_SLAVE0_PIN PAL_PAD(LINE_E_CS0)
297#define SPI_SELECT_SLAVE1_PORT PAL_PORT(LINE_E_CS1)
298#define SPI_SELECT_SLAVE1_PIN PAL_PAD(LINE_E_CS1)
299#define SPI_SELECT_SLAVE2_PORT PAL_PORT(LINE_E_CS2)
300#define SPI_SELECT_SLAVE2_PIN PAL_PAD(LINE_E_CS2)
301#define SPI_SELECT_SLAVE3_PORT PAL_PORT(LINE_E_CS3)
302#define SPI_SELECT_SLAVE3_PIN PAL_PAD(LINE_E_CS3)
303
310#ifndef USE_BARO_BOARD
311#define USE_BARO_BOARD 0
312#endif
313
314/*
315 * Actuators for fixedwing
316 */
317 /* Default actuators driver */
318#define DEFAULT_ACTUATORS "modules/actuators/actuators_pwm.h"
319#define ActuatorDefaultSet(_x,_y) ActuatorPwmSet(_x,_y)
320#define ActuatorsDefaultInit() ActuatorsPwmInit()
321#define ActuatorsDefaultCommit() ActuatorsPwmCommit()
322
323#endif /* CONFIG_TAWAKI_1_00_H */
324