Paparazzi UAS  v5.10_stable-5-g83a0da5-dirty
Paparazzi is a free software Unmanned Aircraft System.
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
cc3d.h
Go to the documentation of this file.
1 #ifndef CONFIG_CC3D_H
2 #define CONFIG_CC3D_H
3 
4 /* CC3D has a 8MHz external clock and 72MHz internal. */
5 #define EXT_CLK 8000000
6 #define AHB_CLK 72000000
7 
8 /*
9  * Onboard LEDs
10  */
11 
12 /* blue status led, on PB3 */
13 #ifndef USE_LED_1
14 #define USE_LED_1 1
15 #endif
16 #define LED_1_GPIO GPIOB
17 #define LED_1_GPIO_PIN GPIO3
18 #define LED_1_GPIO_ON gpio_clear
19 #define LED_1_GPIO_OFF gpio_set
20 #define LED_1_AFIO_REMAP { \
21  rcc_periph_clock_enable(RCC_AFIO); \
22  AFIO_MAPR |= AFIO_MAPR_SWJ_CFG_JTAG_OFF_SW_ON; \
23  }
24 
25 
26 /* SPI slave mapping */
27 /* MPU600 on spi1 */
28 #define SPI_SELECT_SLAVE0_PORT GPIOA
29 #define SPI_SELECT_SLAVE0_PIN GPIO4
30 
31 /* 16Mbit flash on spi2 */
32 #define SPI_SELECT_SLAVE1_PORT GPIOB
33 #define SPI_SELECT_SLAVE1_PIN GPIO12
34 
35 /*
36  * UART pin configuration
37  *
38  * sets on which pins the UARTs are connected
39  */
40 /* UART1 on main port */
41 #define UART1_GPIO_AF 0
42 #define UART1_GPIO_PORT_RX GPIO_BANK_USART1_RX
43 #define UART1_GPIO_RX GPIO_USART1_RX
44 #define UART1_GPIO_PORT_TX GPIO_BANK_USART1_TX
45 #define UART1_GPIO_TX GPIO_USART1_TX
46 
47 /* UART3 on Flexi Port */
48 #define UART3_GPIO_AF AFIO_MAPR_USART3_REMAP_PARTIAL_REMAP
49 #define UART3_GPIO_PORT_RX GPIO_BANK_USART3_PR_RX
50 #define UART3_GPIO_RX GPIO_USART3_PR_RX
51 #define UART3_GPIO_PORT_TX GPIO_BANK_USART3_PR_TX
52 #define UART3_GPIO_TX GPIO_USART3_PR_TX
53 
54 /*
55  * Spektrum
56  */
57 /* The line that is pulled low at power up to initiate the bind process */
58 /* set to ppm/servo6 input pin on RC connector for now */
59 #define SPEKTRUM_BIND_PIN GPIO1
60 #define SPEKTRUM_BIND_PIN_PORT GPIOA
61 
62 #define SPEKTRUM_UART1_RCC RCC_USART1
63 #define SPEKTRUM_UART1_BANK GPIO_BANK_USART1_RX
64 #define SPEKTRUM_UART1_PIN GPIO_USART1_RX
65 #define SPEKTRUM_UART1_AF 0
66 #define SPEKTRUM_UART1_IRQ NVIC_USART1_IRQ
67 #define SPEKTRUM_UART1_ISR usart1_isr
68 #define SPEKTRUM_UART1_DEV USART1
69 
70 #define SPEKTRUM_UART3_RCC RCC_USART3
71 #define SPEKTRUM_UART3_BANK GPIO_BANK_USART3_PR_RX
72 #define SPEKTRUM_UART3_PIN GPIO_USART3_PR_RX
73 #define SPEKTRUM_UART3_AF AFIO_MAPR_USART3_REMAP_PARTIAL_REMAP
74 #define SPEKTRUM_UART3_IRQ NVIC_USART3_IRQ
75 #define SPEKTRUM_UART3_ISR usart3_isr
76 #define SPEKTRUM_UART3_DEV USART3
77 
78 
79 /* Pint to set Uart1 RX polarity, on PB2, output high inverts, low doesn't */
80 #define RC_POLARITY_GPIO_PORT GPIOB
81 #define RC_POLARITY_GPIO_PIN GPIO2
82 
83 
84 /* PPM
85  *
86  * Default is PPM config 2, input on GPIOA1: RC input pin 8 (S6_IN)
87  */
88 #ifndef PPM_CONFIG
89 #define PPM_CONFIG 2
90 #endif
91 
92 #if PPM_CONFIG == 1
93 /* input on PB6 (S1_IN) */
94 #define USE_PPM_TIM4 1
95 #define PPM_CHANNEL TIM_IC1
96 #define PPM_TIMER_INPUT TIM_IC_IN_TI1
97 #define PPM_IRQ NVIC_TIM4_UP_IRQ
98 // Capture/Compare InteruptEnable and InterruptFlag
99 #define PPM_CC_IE TIM_DIER_CC1IE
100 #define PPM_CC_IF TIM_SR_CC1IF
101 #define PPM_GPIO_PORT GPIOB
102 #define PPM_GPIO_PIN GPIO6
103 #define PPM_GPIO_AF 0
104 
105 #elif PPM_CONFIG == 2
106 /* input on PA1 (S6_IN) */
107 #define USE_PPM_TIM2 1
108 #define PPM_CHANNEL TIM_IC2
109 #define PPM_TIMER_INPUT TIM_IC_IN_TI2
110 #define PPM_IRQ NVIC_TIM2_IRQ
111 // Capture/Compare InteruptEnable and InterruptFlag
112 #define PPM_CC_IE TIM_DIER_CC2IE
113 #define PPM_CC_IF TIM_SR_CC2IF
114 #define PPM_GPIO_PORT GPIOA
115 #define PPM_GPIO_PIN GPIO1
116 #define PPM_GPIO_AF 0
117 
118 #else
119 #error "Unknown PPM config"
120 #endif // PPM_CONFIG
121 
122 
123 /*
124  * ADC
125  * noting yet, board doesn't seem to have voltage devider for bat measurement
126  */
127 
128 
129 /*
130  * I2C
131  */
132 /* flexi port */
133 #define I2C2_GPIO_PORT GPIOB
134 #define I2C2_GPIO_SCL GPIO10
135 #define I2C2_GPIO_SDA GPIO11
136 
137 
138 /*
139  * PWM
140  * only servos 1-4 enabled for now
141  */
142 /* servos 1-3 */
143 #define PWM_USE_TIM4 1
144 #define USE_PWM1 1
145 #define USE_PWM2 1
146 #define USE_PWM3 1
147 /* servo 4 */
148 #define PWM_USE_TIM1 1
149 #define USE_PWM4 1
150 
151 /* servo 5 */
152 #define PWM_USE_TIM3 0
153 #define USE_PWM5 0
154 /* servo 6 */
155 #define PWM_USE_TIM2 0
156 #define USE_PWM6 0
157 
158 #define ACTUATORS_PWM_NB 4
159 
160 // Servo output numbering on silkscreen starts with 1
161 
162 // PWM_SERVO_x is the index of the servo in the actuators_pwm_values array
163 #if USE_PWM1
164 #define PWM_SERVO_1 0
165 #define PWM_SERVO_1_TIMER TIM4
166 #define PWM_SERVO_1_GPIO GPIOB
167 #define PWM_SERVO_1_PIN GPIO9
168 #define PWM_SERVO_1_AF 0
169 #define PWM_SERVO_1_OC TIM_OC4
170 #define PWM_SERVO_1_OC_BIT (1<<3)
171 #else
172 #define PWM_SERVO_1_OC_BIT 0
173 #endif
174 
175 #if USE_PWM2
176 #define PWM_SERVO_2 1
177 #define PWM_SERVO_2_TIMER TIM4
178 #define PWM_SERVO_2_GPIO GPIOB
179 #define PWM_SERVO_2_PIN GPIO8
180 #define PWM_SERVO_2_AF 0
181 #define PWM_SERVO_2_OC TIM_OC3
182 #define PWM_SERVO_2_OC_BIT (1<<2)
183 #else
184 #define PWM_SERVO_2_OC_BIT 0
185 #endif
186 
187 #if USE_PWM3
188 #define PWM_SERVO_3 2
189 #define PWM_SERVO_3_TIMER TIM4
190 #define PWM_SERVO_3_GPIO GPIOB
191 #define PWM_SERVO_3_PIN GPIO7
192 #define PWM_SERVO_3_AF 0
193 #define PWM_SERVO_3_OC TIM_OC2
194 #define PWM_SERVO_3_OC_BIT (1<<1)
195 #else
196 #define PWM_SERVO_3_OC_BIT 0
197 #endif
198 
199 #if USE_PWM4
200 #define PWM_SERVO_4 3
201 #define PWM_SERVO_4_TIMER TIM1
202 #define PWM_SERVO_4_GPIO GPIOA
203 #define PWM_SERVO_4_PIN GPIO1
204 #define PWM_SERVO_4_AF 0
205 #define PWM_SERVO_4_OC TIM_OC1
206 #define PWM_SERVO_4_OC_BIT (1<<0)
207 #else
208 #define PWM_SERVO_4_OC_BIT 0
209 #endif
210 
211 #if USE_PWM5
212 #define PWM_SERVO_5 4
213 #define PWM_SERVO_5_TIMER TIM3
214 #define PWM_SERVO_5_GPIO GPIOB
215 #define PWM_SERVO_5_PIN GPIO4
216 #define PWM_SERVO_5_AF 0
217 #define PWM_SERVO_5_OC TIM_OC1
218 #define PWM_SERVO_5_OC_BIT (1<<0)
219 #else
220 #define PWM_SERVO_5_OC_BIT 0
221 #endif
222 
223 #if USE_PWM6
224 #define PWM_SERVO_6 5
225 #define PWM_SERVO_6_TIMER TIM2
226 #define PWM_SERVO_6_GPIO GPIOA
227 #define PWM_SERVO_6_PIN GPIO2
228 #define PWM_SERVO_6_AF 0
229 #define PWM_SERVO_6_OC TIM_OC3
230 #define PWM_SERVO_6_OC_BIT (1<<2)
231 #else
232 #define PWM_SERVO_6_OC_BIT 0
233 #endif
234 
235 /* servos 1-3 on TIM4 */
236 #define PWM_TIM4_CHAN_MASK (PWM_SERVO_1_OC_BIT|PWM_SERVO_2_OC_BIT|PWM_SERVO_3_OC_BIT)
237 /* servo 4 on TIM1 */
238 #define PWM_TIM1_CHAN_MASK PWM_SERVO_4_OC_BIT
239 /* servo 5 on TIM3 */
240 #define PWM_TIM3_CHAN_MASK PWM_SERVO_5_OC_BIT
241 /* servo 6 on TIM2 */
242 #define PWM_TIM2_CHAN_MASK PWM_SERVO_6_OC_BIT
243 
244 
245 /* Default actuators driver */
246 #define DEFAULT_ACTUATORS "subsystems/actuators/actuators_pwm.h"
247 #define ActuatorDefaultSet(_x,_y) ActuatorPwmSet(_x,_y)
248 #define ActuatorsDefaultInit() ActuatorsPwmInit()
249 #define ActuatorsDefaultCommit() ActuatorsPwmCommit()
250 
251 
252 /* simply always return 5V for now */
253 #define DefaultVoltageOfAdc(adc) (50)
254 
255 
256 #endif /* CONFIG_CC3D_H */