Cosmetics
[opentx.git] / radio / src / targets / taranis / hal.h
blob9e91b97e6df962db07c8c7559d5ef58b99d47254
1 /*
2 * Copyright (C) OpenTX
4 * Based on code named
5 * th9x - http://code.google.com/p/th9x
6 * er9x - http://code.google.com/p/er9x
7 * gruvin9x - http://code.google.com/p/gruvin9x
9 * License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License version 2 as
13 * published by the Free Software Foundation.
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
21 #ifndef _HAL_H_
22 #define _HAL_H_
24 // Keys
25 #if defined(PCBX9E)
26 #define KEYS_GPIO_REG_MENU GPIOD->IDR
27 #define KEYS_GPIO_PIN_MENU GPIO_Pin_7 // PD.07
28 #define KEYS_GPIO_REG_EXIT GPIOD->IDR
29 #define KEYS_GPIO_PIN_EXIT GPIO_Pin_2 // PD.02
30 #define KEYS_GPIO_REG_PAGE GPIOD->IDR
31 #define KEYS_GPIO_PIN_PAGE GPIO_Pin_3 // PD.03
32 #define KEYS_GPIO_REG_ENTER GPIOF->IDR
33 #define KEYS_GPIO_PIN_ENTER GPIO_Pin_0 // PF.00
34 #elif defined(PCBXLITE)
35 #define KEYS_GPIO_REG_SHIFT GPIOE->IDR
36 #define KEYS_GPIO_PIN_SHIFT GPIO_Pin_8 // PE.08
37 #define KEYS_GPIO_REG_EXIT GPIOE->IDR
38 #define KEYS_GPIO_PIN_EXIT GPIO_Pin_7 // PE.07
39 #define KEYS_GPIO_REG_ENTER GPIOE->IDR
40 #define KEYS_GPIO_PIN_ENTER GPIO_Pin_11 // PE.11
41 #define KEYS_GPIO_REG_UP GPIOE->IDR
42 #define KEYS_GPIO_PIN_UP GPIO_Pin_10 // PE.10
43 #define KEYS_GPIO_REG_DOWN GPIOE->IDR
44 #define KEYS_GPIO_PIN_DOWN GPIO_Pin_14 // PE.14
45 #define KEYS_GPIO_REG_LEFT GPIOE->IDR
46 #define KEYS_GPIO_PIN_LEFT GPIO_Pin_12 // PE.12
47 #define KEYS_GPIO_REG_RIGHT GPIOE->IDR
48 #define KEYS_GPIO_PIN_RIGHT GPIO_Pin_13 // PE.13
49 #elif defined(RADIO_T12)
50 #define KEYS_GPIO_REG_EXIT GPIOD->IDR
51 #define KEYS_GPIO_PIN_EXIT GPIO_Pin_2 // PD.02
52 #define KEYS_GPIO_REG_ENTER GPIOE->IDR
53 #define KEYS_GPIO_PIN_ENTER GPIO_Pin_10 // PE.10
54 #define KEYS_GPIO_REG_UP GPIOE->IDR
55 #define KEYS_GPIO_PIN_UP GPIO_Pin_9 // PE.09
56 #define KEYS_GPIO_REG_DOWN GPIOE->IDR
57 #define KEYS_GPIO_PIN_DOWN GPIO_Pin_11 // PE.11
58 #define KEYS_GPIO_REG_LEFT GPIOD->IDR
59 #define KEYS_GPIO_PIN_LEFT GPIO_Pin_7 // PD.07
60 #define KEYS_GPIO_REG_RIGHT GPIOD->IDR
61 #define KEYS_GPIO_PIN_RIGHT GPIO_Pin_3 // PD.03
62 #elif defined(PCBX7)
63 #define KEYS_GPIO_REG_PAGE GPIOD->IDR
64 #define KEYS_GPIO_PIN_PAGE GPIO_Pin_3 // PD.03
65 #define KEYS_GPIO_REG_MENU GPIOD->IDR
66 #define KEYS_GPIO_PIN_MENU GPIO_Pin_7 // PD.07
67 #define KEYS_GPIO_REG_EXIT GPIOD->IDR
68 #define KEYS_GPIO_PIN_EXIT GPIO_Pin_2 // PD.02
69 #define KEYS_GPIO_REG_ENTER GPIOE->IDR
70 #define KEYS_GPIO_PIN_ENTER GPIO_Pin_10 // PE.10
71 #elif defined(PCBX9LITE)
72 #define KEYS_GPIO_REG_PAGE GPIOE->IDR
73 #define KEYS_GPIO_PIN_PAGE GPIO_Pin_8 // PE.08
74 #define KEYS_GPIO_REG_MENU GPIOE->IDR
75 #define KEYS_GPIO_PIN_MENU GPIO_Pin_7 // PE.07
76 #define KEYS_GPIO_REG_EXIT GPIOE->IDR
77 #define KEYS_GPIO_PIN_EXIT GPIO_Pin_9 // PE.09
78 #define KEYS_GPIO_REG_ENTER GPIOE->IDR
79 #define KEYS_GPIO_PIN_ENTER GPIO_Pin_11 // PE.11
80 #elif defined(PCBX9DP) && PCBREV >= 2019
81 #define KEYS_GPIO_REG_MENU GPIOD->IDR
82 #define KEYS_GPIO_PIN_MENU GPIO_Pin_2 // PD.02
83 #define KEYS_GPIO_REG_EXIT GPIOD->IDR
84 #define KEYS_GPIO_PIN_EXIT GPIO_Pin_7 // PD.07
85 #define KEYS_GPIO_REG_PAGE GPIOD->IDR
86 #define KEYS_GPIO_PIN_PAGE GPIO_Pin_3 // PD.03
87 #define KEYS_GPIO_REG_ENTER GPIOE->IDR
88 #define KEYS_GPIO_PIN_ENTER GPIO_Pin_12 // PE.12
89 #else
90 #define KEYS_GPIO_REG_MENU GPIOD->IDR
91 #define KEYS_GPIO_PIN_MENU GPIO_Pin_7 // PD.07
92 #define KEYS_GPIO_REG_EXIT GPIOD->IDR
93 #define KEYS_GPIO_PIN_EXIT GPIO_Pin_2 // PD.02
94 #define KEYS_GPIO_REG_PAGE GPIOD->IDR
95 #define KEYS_GPIO_PIN_PAGE GPIO_Pin_3 // PD.03
96 #define KEYS_GPIO_REG_PLUS GPIOE->IDR
97 #define KEYS_GPIO_PIN_PLUS GPIO_Pin_10 // PE.10
98 #define KEYS_GPIO_REG_MINUS GPIOE->IDR
99 #define KEYS_GPIO_PIN_MINUS GPIO_Pin_11 // PE.11
100 #define KEYS_GPIO_REG_ENTER GPIOE->IDR
101 #define KEYS_GPIO_PIN_ENTER GPIO_Pin_12 // PE.12
102 #endif
104 // Rotary Encoder
105 #if defined(PCBX9E)
106 #define ROTARY_ENCODER_NAVIGATION
107 #define ROTARY_ENCODER_GPIO GPIOD
108 #define ROTARY_ENCODER_GPIO_PIN_A GPIO_Pin_12 // PD.12
109 #define ROTARY_ENCODER_GPIO_PIN_B GPIO_Pin_13 // PD.13
110 #define ROTARY_ENCODER_POSITION() (ROTARY_ENCODER_GPIO->IDR >> 12) & 0x03
111 #define ROTARY_ENCODER_EXTI_LINE1 EXTI_Line12
112 #define ROTARY_ENCODER_EXTI_LINE2 EXTI_Line13
113 #define ROTARY_ENCODER_EXTI_IRQn1 EXTI15_10_IRQn
114 #define ROTARY_ENCODER_EXTI_IRQHandler1 EXTI15_10_IRQHandler
115 #define ROTARY_ENCODER_EXTI_PortSource EXTI_PortSourceGPIOD
116 #define ROTARY_ENCODER_EXTI_PinSource1 EXTI_PinSource12
117 #define ROTARY_ENCODER_EXTI_PinSource2 EXTI_PinSource13
118 #elif defined(PCBX9DP) && PCBREV >= 2019
119 #define ROTARY_ENCODER_NAVIGATION
120 #define ROTARY_ENCODER_GPIO GPIOE
121 #define ROTARY_ENCODER_GPIO_PIN_A GPIO_Pin_10 // PE.10
122 #define ROTARY_ENCODER_GPIO_PIN_B GPIO_Pin_11 // PE.11
123 #define ROTARY_ENCODER_POSITION() (((ROTARY_ENCODER_GPIO->IDR >> 9) & 0x02) + ((ROTARY_ENCODER_GPIO->IDR >> 11) & 0x01))
124 #define ROTARY_ENCODER_EXTI_LINE1 EXTI_Line10
125 #define ROTARY_ENCODER_EXTI_LINE2 EXTI_Line11
126 #define ROTARY_ENCODER_EXTI_IRQn1 EXTI15_10_IRQn
127 #define ROTARY_ENCODER_EXTI_IRQHandler1 EXTI15_10_IRQHandler
128 #define ROTARY_ENCODER_EXTI_PortSource EXTI_PortSourceGPIOE
129 #define ROTARY_ENCODER_EXTI_PinSource1 EXTI_PinSource10
130 #define ROTARY_ENCODER_EXTI_PinSource2 EXTI_PinSource11
131 #elif defined(RADIO_X7) || defined(RADIO_X7ACCESS)
132 #define ROTARY_ENCODER_NAVIGATION
133 #define ROTARY_ENCODER_GPIO GPIOE
134 #define ROTARY_ENCODER_GPIO_PIN_A GPIO_Pin_9 // PE.09
135 #define ROTARY_ENCODER_GPIO_PIN_B GPIO_Pin_11 // PE.11
136 #define ROTARY_ENCODER_POSITION() (((ROTARY_ENCODER_GPIO->IDR >> 10) & 0x02) + ((ROTARY_ENCODER_GPIO->IDR >> 9) & 0x01))
137 #define ROTARY_ENCODER_EXTI_LINE1 EXTI_Line9
138 #define ROTARY_ENCODER_EXTI_LINE2 EXTI_Line11
139 #define ROTARY_ENCODER_EXTI_IRQn1 EXTI9_5_IRQn
140 #define ROTARY_ENCODER_EXTI_IRQHandler1 EXTI9_5_IRQHandler
141 #define ROTARY_ENCODER_EXTI_IRQn2 EXTI15_10_IRQn
142 #define ROTARY_ENCODER_EXTI_IRQHandler2 EXTI15_10_IRQHandler
143 #define ROTARY_ENCODER_EXTI_PortSource EXTI_PortSourceGPIOE
144 #define ROTARY_ENCODER_EXTI_PinSource1 EXTI_PinSource9
145 #define ROTARY_ENCODER_EXTI_PinSource2 EXTI_PinSource11
146 #elif defined(PCBX9LITE)
147 #define ROTARY_ENCODER_NAVIGATION
148 #define ROTARY_ENCODER_GPIO GPIOE
149 #define ROTARY_ENCODER_GPIO_PIN_A GPIO_Pin_10 // PE.10
150 #define ROTARY_ENCODER_GPIO_PIN_B GPIO_Pin_12 // PE.12
151 #define ROTARY_ENCODER_POSITION() (((ROTARY_ENCODER_GPIO->IDR >> 12) & 0x01) + ((ROTARY_ENCODER_GPIO->IDR >> 9) & 0x02))
152 #define ROTARY_ENCODER_EXTI_LINE1 EXTI_Line10
153 #define ROTARY_ENCODER_EXTI_LINE2 EXTI_Line12
154 #define ROTARY_ENCODER_EXTI_IRQn1 EXTI15_10_IRQn
155 #define ROTARY_ENCODER_EXTI_IRQHandler1 EXTI15_10_IRQHandler
156 #define ROTARY_ENCODER_EXTI_PortSource EXTI_PortSourceGPIOE
157 #define ROTARY_ENCODER_EXTI_PinSource1 EXTI_PinSource10
158 #define ROTARY_ENCODER_EXTI_PinSource2 EXTI_PinSource12
159 #endif
160 #if defined(ROTARY_ENCODER_NAVIGATION)
161 #define ROTARY_ENCODER_RCC_APB1Periph RCC_APB1Periph_TIM5
162 #define ROTARY_ENCODER_TIMER TIM5
163 #define ROTARY_ENCODER_TIMER_IRQn TIM5_IRQn
164 #define ROTARY_ENCODER_TIMER_IRQHandler TIM5_IRQHandler
165 #else
166 #define ROTARY_ENCODER_RCC_APB1Periph 0
167 #endif
169 // Trims
170 #if defined(PCBX9E)
171 #define TRIMS_GPIO_REG_LHL GPIOG->IDR
172 #define TRIMS_GPIO_PIN_LHL GPIO_Pin_1 // PG.01
173 #define TRIMS_GPIO_REG_LHR GPIOG->IDR
174 #define TRIMS_GPIO_PIN_LHR GPIO_Pin_0 // PG.00
175 #define TRIMS_GPIO_REG_LVD GPIOE->IDR
176 #define TRIMS_GPIO_PIN_LVD GPIO_Pin_4 // PE.04
177 #define TRIMS_GPIO_REG_LVU GPIOE->IDR
178 #define TRIMS_GPIO_PIN_LVU GPIO_Pin_3 // PE.03
179 #define TRIMS_GPIO_REG_RVD GPIOC->IDR
180 #define TRIMS_GPIO_PIN_RVD GPIO_Pin_3 // PC.03
181 #define TRIMS_GPIO_REG_RHL GPIOC->IDR
182 #define TRIMS_GPIO_PIN_RHL GPIO_Pin_1 // PC.01
183 #define TRIMS_GPIO_REG_RVU GPIOC->IDR
184 #define TRIMS_GPIO_PIN_RVU GPIO_Pin_2 // PC.02
185 #define TRIMS_GPIO_REG_RHR GPIOC->IDR
186 #define TRIMS_GPIO_PIN_RHR GPIO_Pin_13 // PC.13
187 #elif defined(PCBXLITE)
188 #define TRIMS_GPIO_REG_LHL GPIOC->IDR
189 #define TRIMS_GPIO_PIN_LHL GPIO_Pin_4 // PC.04
190 #define TRIMS_GPIO_REG_LHR GPIOC->IDR
191 #define TRIMS_GPIO_PIN_LHR GPIO_Pin_5 // PC.05
192 #define TRIMS_GPIO_REG_LVU GPIOB->IDR
193 #define TRIMS_GPIO_PIN_LVU GPIO_Pin_0 // PB.00
194 #define TRIMS_GPIO_REG_LVD GPIOB->IDR
195 #define TRIMS_GPIO_PIN_LVD GPIO_Pin_1 // PB.01
196 #elif defined(PCBX7ACCESS)
197 #define TRIMS_GPIO_REG_LHR GPIOD->IDR
198 #define TRIMS_GPIO_PIN_LHR GPIO_Pin_15 // PD.15
199 #define TRIMS_GPIO_REG_LHL GPIOC->IDR
200 #define TRIMS_GPIO_PIN_LHL GPIO_Pin_1 // PC.01
201 #define TRIMS_GPIO_REG_LVD GPIOE->IDR
202 #define TRIMS_GPIO_PIN_LVD GPIO_Pin_6 // PE.06
203 #define TRIMS_GPIO_REG_LVU GPIOE->IDR
204 #define TRIMS_GPIO_PIN_LVU GPIO_Pin_5 // PE.05
205 #define TRIMS_GPIO_REG_RVD GPIOC->IDR
206 #define TRIMS_GPIO_PIN_RVD GPIO_Pin_3 // PC.03
207 #define TRIMS_GPIO_REG_RHR GPIOE->IDR
208 #define TRIMS_GPIO_PIN_RHR GPIO_Pin_3 // PE.03
209 #define TRIMS_GPIO_REG_RVU GPIOC->IDR
210 #define TRIMS_GPIO_PIN_RVU GPIO_Pin_2 // PC.02
211 #define TRIMS_GPIO_REG_RHL GPIOE->IDR
212 #define TRIMS_GPIO_PIN_RHL GPIO_Pin_4 // PE.04
213 #elif defined(PCBX7)
214 #define TRIMS_GPIO_REG_LHL GPIOD->IDR
215 #define TRIMS_GPIO_PIN_LHL GPIO_Pin_15 // PD.15
216 #define TRIMS_GPIO_REG_LHR GPIOC->IDR
217 #define TRIMS_GPIO_PIN_LHR GPIO_Pin_1 // PC.01
218 #define TRIMS_GPIO_REG_LVD GPIOE->IDR
219 #define TRIMS_GPIO_PIN_LVD GPIO_Pin_6 // PE.06
220 #define TRIMS_GPIO_REG_LVU GPIOE->IDR
221 #define TRIMS_GPIO_PIN_LVU GPIO_Pin_5 // PE.05
222 #define TRIMS_GPIO_REG_RVD GPIOC->IDR
223 #define TRIMS_GPIO_PIN_RVD GPIO_Pin_3 // PC.03
224 #define TRIMS_GPIO_REG_RHL GPIOE->IDR
225 #define TRIMS_GPIO_PIN_RHL GPIO_Pin_3 // PE.03
226 #define TRIMS_GPIO_REG_RVU GPIOC->IDR
227 #define TRIMS_GPIO_PIN_RVU GPIO_Pin_2 // PC.02
228 #define TRIMS_GPIO_REG_RHR GPIOE->IDR
229 #define TRIMS_GPIO_PIN_RHR GPIO_Pin_4 // PE.04
230 #elif defined(PCBX9LITE)
231 #define TRIMS_GPIO_REG_LHR GPIOC->IDR
232 #define TRIMS_GPIO_PIN_LHR GPIO_Pin_4 // PC.04
233 #define TRIMS_GPIO_REG_LHL GPIOC->IDR
234 #define TRIMS_GPIO_PIN_LHL GPIO_Pin_5 // PC.05
235 #define TRIMS_GPIO_REG_LVU GPIOB->IDR
236 #define TRIMS_GPIO_PIN_LVU GPIO_Pin_0 // PB.00
237 #define TRIMS_GPIO_REG_LVD GPIOB->IDR
238 #define TRIMS_GPIO_PIN_LVD GPIO_Pin_1 // PB.01
239 #define TRIMS_GPIO_REG_RVU GPIOE->IDR
240 #define TRIMS_GPIO_PIN_RVU GPIO_Pin_13 // PE.13
241 #define TRIMS_GPIO_REG_RHR GPIOD->IDR
242 #define TRIMS_GPIO_PIN_RHR GPIO_Pin_8 // PD.08
243 #define TRIMS_GPIO_REG_RVD GPIOE->IDR
244 #define TRIMS_GPIO_PIN_RVD GPIO_Pin_14 // PE.14
245 #define TRIMS_GPIO_REG_RHL GPIOD->IDR
246 #define TRIMS_GPIO_PIN_RHL GPIO_Pin_9 // PD.09
247 #elif defined(PCBX9DP) && PCBREV >= 2019
248 #define TRIMS_GPIO_REG_LHL GPIOE->IDR
249 #define TRIMS_GPIO_PIN_LHL GPIO_Pin_3 // PE.03
250 #define TRIMS_GPIO_REG_LHR GPIOE->IDR
251 #define TRIMS_GPIO_PIN_LHR GPIO_Pin_4 // PE.04
252 #define TRIMS_GPIO_REG_LVD GPIOE->IDR
253 #define TRIMS_GPIO_PIN_LVD GPIO_Pin_6 // PE.06
254 #define TRIMS_GPIO_REG_LVU GPIOE->IDR
255 #define TRIMS_GPIO_PIN_LVU GPIO_Pin_5 // PE.05
256 #define TRIMS_GPIO_REG_RVD GPIOC->IDR
257 #define TRIMS_GPIO_PIN_RVD GPIO_Pin_3 // PC.03
258 #define TRIMS_GPIO_REG_RVU GPIOC->IDR
259 #define TRIMS_GPIO_PIN_RVU GPIO_Pin_2 // PC.02
260 #define TRIMS_GPIO_REG_RHL GPIOC->IDR
261 #define TRIMS_GPIO_PIN_RHL GPIO_Pin_13 // PC.13
262 #define TRIMS_GPIO_REG_RHR GPIOC->IDR
263 #define TRIMS_GPIO_PIN_RHR GPIO_Pin_1 // PC.01
264 #else
265 #define TRIMS_GPIO_REG_LHL GPIOE->IDR
266 #define TRIMS_GPIO_PIN_LHL GPIO_Pin_4 // PE.04
267 #define TRIMS_GPIO_REG_LHR GPIOE->IDR
268 #define TRIMS_GPIO_PIN_LHR GPIO_Pin_3 // PE.03
269 #define TRIMS_GPIO_REG_LVD GPIOE->IDR
270 #define TRIMS_GPIO_PIN_LVD GPIO_Pin_6 // PE.06
271 #define TRIMS_GPIO_REG_LVU GPIOE->IDR
272 #define TRIMS_GPIO_PIN_LVU GPIO_Pin_5 // PE.05
273 #define TRIMS_GPIO_REG_RVD GPIOC->IDR
274 #define TRIMS_GPIO_PIN_RVD GPIO_Pin_3 // PC.03
275 #define TRIMS_GPIO_REG_RHL GPIOC->IDR
276 #define TRIMS_GPIO_PIN_RHL GPIO_Pin_1 // PC.01
277 #define TRIMS_GPIO_REG_RVU GPIOC->IDR
278 #define TRIMS_GPIO_PIN_RVU GPIO_Pin_2 // PC.02
279 #define TRIMS_GPIO_REG_RHR GPIOC->IDR
280 #define TRIMS_GPIO_PIN_RHR GPIO_Pin_13 // PC.13
281 #endif
283 // Switches
284 #if defined(PCBX9E)
285 #define STORAGE_SWITCH_A
286 #define HARDWARE_SWITCH_A
287 #define HARDWARE_SWITCH_A
288 #define SWITCHES_GPIO_REG_A_H GPIOD->IDR
289 #define SWITCHES_GPIO_PIN_A_H GPIO_Pin_10 // PD.10
290 #define SWITCHES_GPIO_REG_A_L GPIOD->IDR
291 #define SWITCHES_GPIO_PIN_A_L GPIO_Pin_14 // PD.14
292 #elif defined(PCBXLITE) || defined(PCBX9LITE)
293 #define STORAGE_SWITCH_A
294 #define HARDWARE_SWITCH_A
295 #define SWITCHES_GPIO_REG_A_H GPIOE->IDR
296 #define SWITCHES_GPIO_PIN_A_H GPIO_Pin_1 // PE.01
297 #define SWITCHES_GPIO_REG_A_L GPIOE->IDR
298 #define SWITCHES_GPIO_PIN_A_L GPIO_Pin_0 // PE.00
299 #elif defined(PCBX7)
300 #define STORAGE_SWITCH_A
301 #define HARDWARE_SWITCH_A
302 #define SWITCHES_GPIO_REG_A_L GPIOE->IDR
303 #define SWITCHES_GPIO_PIN_A_L GPIO_Pin_7 // PE.07
304 #define SWITCHES_GPIO_REG_A_H GPIOE->IDR
305 #define SWITCHES_GPIO_PIN_A_H GPIO_Pin_13 // PE.13
306 #else
307 #define STORAGE_SWITCH_A
308 #define HARDWARE_SWITCH_A
309 #define SWITCHES_GPIO_REG_A_H GPIOB->IDR
310 #define SWITCHES_GPIO_PIN_A_H GPIO_Pin_5 // PB.05
311 #define SWITCHES_GPIO_REG_A_L GPIOE->IDR
312 #define SWITCHES_GPIO_PIN_A_L GPIO_Pin_0 // PE.00
313 #endif
315 #if defined(PCBX9E)
316 #define STORAGE_SWITCH_B
317 #define HARDWARE_SWITCH_B
318 #define SWITCHES_GPIO_REG_B_H GPIOG->IDR
319 #define SWITCHES_GPIO_PIN_B_H GPIO_Pin_11 // PG.11
320 #define SWITCHES_GPIO_REG_B_L GPIOG->IDR
321 #define SWITCHES_GPIO_PIN_B_L GPIO_Pin_10 // PG.10
322 #elif defined(PCBXLITE)
323 #define STORAGE_SWITCH_B
324 #define HARDWARE_SWITCH_B
325 #define SWITCHES_GPIO_REG_B_L GPIOA->IDR
326 #define SWITCHES_GPIO_PIN_B_L GPIO_Pin_6 // PA.06
327 #define SWITCHES_GPIO_REG_B_H GPIOA->IDR
328 #define SWITCHES_GPIO_PIN_B_H GPIO_Pin_5 // PA.05
329 #elif defined(PCBX7)
330 #define STORAGE_SWITCH_B
331 #define HARDWARE_SWITCH_B
332 #define SWITCHES_GPIO_REG_B_L GPIOE->IDR
333 #define SWITCHES_GPIO_PIN_B_L GPIO_Pin_15 // PE.15
334 #define SWITCHES_GPIO_REG_B_H GPIOA->IDR
335 #define SWITCHES_GPIO_PIN_B_H GPIO_Pin_5 // PA.05
336 #elif defined(PCBX9LITE)
337 #define STORAGE_SWITCH_B
338 #define HARDWARE_SWITCH_B
339 #define SWITCHES_GPIO_REG_B_L GPIOB->IDR
340 #define SWITCHES_GPIO_PIN_B_L GPIO_Pin_4 // PB.04
341 #define SWITCHES_GPIO_REG_B_H GPIOB->IDR
342 #define SWITCHES_GPIO_PIN_B_H GPIO_Pin_5 // PB.05
343 #else
344 #define STORAGE_SWITCH_B
345 #define HARDWARE_SWITCH_B
346 #define SWITCHES_GPIO_REG_B_H GPIOE->IDR
347 #define SWITCHES_GPIO_PIN_B_H GPIO_Pin_1 // PE.01
348 #define SWITCHES_GPIO_REG_B_L GPIOE->IDR
349 #define SWITCHES_GPIO_PIN_B_L GPIO_Pin_2 // PE.02
350 #endif
352 #if defined(PCBX9E)
353 #define STORAGE_SWITCH_C
354 #define HARDWARE_SWITCH_C
355 #define SWITCHES_GPIO_REG_C_H GPIOF->IDR
356 #define SWITCHES_GPIO_PIN_C_H GPIO_Pin_13 // PF.13
357 #define SWITCHES_GPIO_REG_C_L GPIOF->IDR
358 #define SWITCHES_GPIO_PIN_C_L GPIO_Pin_14 // PF.14
359 #elif defined(PCBXLITE) || defined(PCBX9LITE)
360 #define STORAGE_SWITCH_C
361 #define HARDWARE_SWITCH_C
362 #define SWITCHES_GPIO_REG_C_L GPIOE->IDR
363 #define SWITCHES_GPIO_PIN_C_L GPIO_Pin_2 // PE.02
364 #define SWITCHES_GPIO_REG_C_H GPIOE->IDR
365 #define SWITCHES_GPIO_PIN_C_H GPIO_Pin_3 // PE.03
366 #elif defined(PCBX7)
367 #define STORAGE_SWITCH_C
368 #define HARDWARE_SWITCH_C
369 #define SWITCHES_GPIO_REG_C_L GPIOD->IDR
370 #define SWITCHES_GPIO_PIN_C_L GPIO_Pin_11 // PD.11
371 #if defined(PCBX7ACCESS)
372 #define SWITCHES_GPIO_REG_C_H GPIOD->IDR
373 #define SWITCHES_GPIO_PIN_C_H GPIO_Pin_10 // PD.10
374 #else
375 #define SWITCHES_GPIO_REG_C_H GPIOE->IDR
376 #define SWITCHES_GPIO_PIN_C_H GPIO_Pin_0 // PE.00
377 #endif
378 #else
379 #define STORAGE_SWITCH_C
380 #define HARDWARE_SWITCH_C
381 #define SWITCHES_GPIO_REG_C_H GPIOE->IDR
382 #define SWITCHES_GPIO_PIN_C_H GPIO_Pin_15 // PE.15
383 #define SWITCHES_GPIO_REG_C_L GPIOA->IDR
384 #define SWITCHES_GPIO_PIN_C_L GPIO_Pin_5 // PA.05
385 #endif
387 #if defined(PCBX9E)
388 #define STORAGE_SWITCH_D
389 #define HARDWARE_SWITCH_D
390 #define SWITCHES_GPIO_REG_D_H GPIOE->IDR
391 #define SWITCHES_GPIO_PIN_D_H GPIO_Pin_1 // PE.01
392 #define SWITCHES_GPIO_REG_D_L GPIOE->IDR
393 #define SWITCHES_GPIO_PIN_D_L GPIO_Pin_2 // PE.02
394 #elif defined(PCBX9DP)
395 #define STORAGE_SWITCH_D
396 #define HARDWARE_SWITCH_D
397 #define SWITCHES_GPIO_REG_D_H GPIOE->IDR
398 #define SWITCHES_GPIO_PIN_D_H GPIO_Pin_7 // PE.07
399 #define SWITCHES_GPIO_REG_D_L GPIOE->IDR
400 #define SWITCHES_GPIO_PIN_D_L GPIO_Pin_13 // PE.13
401 #elif defined(PCBXLITE)
402 #define STORAGE_SWITCH_D
403 #define HARDWARE_SWITCH_D
404 #define SWITCHES_GPIO_REG_D_L GPIOB->IDR
405 #define SWITCHES_GPIO_PIN_D_L GPIO_Pin_4 // PB.04
406 #define SWITCHES_GPIO_REG_D_H GPIOB->IDR
407 #define SWITCHES_GPIO_PIN_D_H GPIO_Pin_5 // PB.05
408 #elif defined(PCBX7)
409 #define STORAGE_SWITCH_D
410 #define HARDWARE_SWITCH_D
411 #define SWITCHES_GPIO_REG_D_L GPIOE->IDR
412 #define SWITCHES_GPIO_PIN_D_L GPIO_Pin_1 // PE.01
413 #define SWITCHES_GPIO_REG_D_H GPIOE->IDR
414 #define SWITCHES_GPIO_PIN_D_H GPIO_Pin_2 // PE.02
415 #elif defined(PCBX9LITE)
416 #define STORAGE_SWITCH_D
417 #define HARDWARE_SWITCH_D
418 #define SWITCHES_GPIO_REG_D GPIOC->IDR
419 #define SWITCHES_GPIO_PIN_D GPIO_Pin_13 // PC.13
420 #else
421 #define STORAGE_SWITCH_D
422 #define HARDWARE_SWITCH_D
423 #define SWITCHES_GPIO_REG_D_H GPIOE->IDR
424 #define SWITCHES_GPIO_PIN_D_H GPIO_Pin_7 // PE.07
425 #define SWITCHES_GPIO_REG_D_L GPIOB->IDR
426 #define SWITCHES_GPIO_PIN_D_L GPIO_Pin_1 // PB.01
427 #endif
429 #if defined(PCBX9E)
430 #define STORAGE_SWITCH_E
431 #define HARDWARE_SWITCH_E
432 #define SWITCHES_GPIO_REG_E_H GPIOE->IDR
433 #define SWITCHES_GPIO_PIN_E_H GPIO_Pin_7 // PE.07
434 #define SWITCHES_GPIO_REG_E_L GPIOE->IDR
435 #define SWITCHES_GPIO_PIN_E_L GPIO_Pin_13 // PE.13
436 #elif defined(PCBXLITES)
437 #define STORAGE_SWITCH_E
438 #define HARDWARE_SWITCH_E
439 #define SWITCHES_GPIO_REG_E GPIOE->IDR
440 #define SWITCHES_GPIO_PIN_E GPIO_Pin_5 // PE.05
441 #elif defined(PCBXLITE)
442 // no SWE but we want to remain compatible with XLiteS
443 #define STORAGE_SWITCH_E
444 #elif defined(PCBX9LITE)
445 #define STORAGE_SWITCH_E
446 #define HARDWARE_SWITCH_E
447 #define SWITCHES_GPIO_REG_E GPIOA->IDR
448 #define SWITCHES_GPIO_PIN_E GPIO_Pin_5 // PA.05
449 #elif defined(PCBX7)
450 // no SWE
451 #else
452 #define STORAGE_SWITCH_E
453 #define HARDWARE_SWITCH_E
454 #define SWITCHES_GPIO_REG_E_H GPIOB->IDR
455 #define SWITCHES_GPIO_PIN_E_H GPIO_Pin_3 // PB.03
456 #define SWITCHES_GPIO_REG_E_L GPIOB->IDR
457 #define SWITCHES_GPIO_PIN_E_L GPIO_Pin_4 // PB.04
458 #endif
460 #if defined(PCBX9E)
461 #define STORAGE_SWITCH_F
462 #define HARDWARE_SWITCH_F
463 #define SWITCHES_GPIO_REG_F GPIOE->IDR
464 #define SWITCHES_GPIO_PIN_F GPIO_Pin_11 // PE.11
465 #elif defined(PCBXLITES)
466 #define STORAGE_SWITCH_F
467 #define HARDWARE_SWITCH_F
468 #define SWITCHES_GPIO_REG_F GPIOC->IDR
469 #define SWITCHES_GPIO_PIN_F GPIO_Pin_3 // PC.03
470 #elif defined(PCBXLITE)
471 // no SWF but we want to remain compatible with XLiteS
472 #define STORAGE_SWITCH_F
473 #elif defined(PCBX9LITES)
474 #define STORAGE_SWITCH_F
475 #define HARDWARE_SWITCH_F
476 #define SWITCHES_GPIO_REG_F GPIOC->IDR
477 #define SWITCHES_GPIO_PIN_F GPIO_Pin_3 // PC.03
478 #elif defined(PCBX9LITE)
479 // no SWF
480 #elif defined(PCBX7)
481 #define STORAGE_SWITCH_F
482 #define HARDWARE_SWITCH_F
483 #define SWITCHES_GPIO_REG_F GPIOE->IDR
484 #define SWITCHES_GPIO_PIN_F GPIO_Pin_14 // PE.14
485 #else
486 #define STORAGE_SWITCH_F
487 #define HARDWARE_SWITCH_F
488 #define SWITCHES_GPIO_REG_F GPIOE->IDR
489 #define SWITCHES_GPIO_PIN_F GPIO_Pin_14 // PE.14
490 #endif
492 #if defined(PCBX9E)
493 #define STORAGE_SWITCH_G
494 #define HARDWARE_SWITCH_G
495 #define SWITCHES_GPIO_REG_G_H GPIOF->IDR
496 #define SWITCHES_GPIO_PIN_G_H GPIO_Pin_3 // PF.03
497 #define SWITCHES_GPIO_REG_G_L GPIOF->IDR
498 #define SWITCHES_GPIO_PIN_G_L GPIO_Pin_4 // PF.04
499 #elif defined(PCBX9LITES)
500 #define STORAGE_SWITCH_G
501 #define HARDWARE_SWITCH_G
502 #define SWITCHES_GPIO_REG_G GPIOC->IDR
503 #define SWITCHES_GPIO_PIN_G GPIO_Pin_2 // PC.02
504 #elif defined(PCBX7) || defined(PCBXLITE) || defined(PCBX9LITE)
505 // no SWG
506 #else
507 #define STORAGE_SWITCH_G
508 #define HARDWARE_SWITCH_G
509 #define SWITCHES_GPIO_REG_G_H GPIOE->IDR
510 #define SWITCHES_GPIO_PIN_G_H GPIO_Pin_9 // PE.09
511 #define SWITCHES_GPIO_REG_G_L GPIOE->IDR
512 #define SWITCHES_GPIO_PIN_G_L GPIO_Pin_8 // PE.08
513 #endif
515 #if defined(PCBX9E)
516 #define STORAGE_SWITCH_H
517 #define HARDWARE_SWITCH_H
518 #define SWITCHES_GPIO_REG_H GPIOF->IDR
519 #define SWITCHES_GPIO_PIN_H GPIO_Pin_1 // PF.01
520 #elif defined(PCBX9DP)
521 #define STORAGE_SWITCH_H
522 #define HARDWARE_SWITCH_H
523 #define SWITCHES_GPIO_REG_H GPIOD->IDR
524 #define SWITCHES_GPIO_PIN_H GPIO_Pin_14 // PD.14
525 #elif defined(PCBXLITE) || defined(PCBX9LITE)
526 // no SWH
527 #elif defined(PCBX7)
528 #define STORAGE_SWITCH_H
529 #define HARDWARE_SWITCH_H
530 #define SWITCHES_GPIO_REG_H GPIOD->IDR
531 #define SWITCHES_GPIO_PIN_H GPIO_Pin_14 // PD.14
532 #else
533 #define STORAGE_SWITCH_H
534 #define HARDWARE_SWITCH_H
535 #define SWITCHES_GPIO_REG_H GPIOE->IDR
536 #define SWITCHES_GPIO_PIN_H GPIO_Pin_13 // PE.13
537 #endif
539 #if defined(PCBX9DP) && PCBREV >= 2019
540 #define STORAGE_SWITCH_I
541 #define HARDWARE_SWITCH_I
542 #define SWITCHES_GPIO_REG_I GPIOD->IDR
543 #define SWITCHES_GPIO_PIN_I GPIO_Pin_10 // PD.10
544 #elif defined(PCBX9D) || defined(PCBX9DP)
545 #define STORAGE_SWITCH_I
546 #endif
548 // X7 P400 P401 headers additionnal momentary switches
549 #if defined(PCBX7ACCESS)
550 #define STORAGE_SWITCH_I
551 #define HARDWARE_SWITCH_I
552 #define SWITCHES_GPIO_REG_I GPIOC->IDR
553 #define SWITCHES_GPIO_PIN_I GPIO_Pin_13 // PC.13
554 #define STORAGE_SWITCH_J
555 #elif defined(PCBX7)
556 #define STORAGE_SWITCH_I
557 #define HARDWARE_SWITCH_I
558 #define SWITCHES_GPIO_REG_I GPIOC->IDR
559 #define SWITCHES_GPIO_PIN_I GPIO_Pin_13 // PC.13
560 #define STORAGE_SWITCH_J
561 #define HARDWARE_SWITCH_J
562 #define SWITCHES_GPIO_REG_J GPIOD->IDR
563 #define SWITCHES_GPIO_PIN_J GPIO_Pin_10 // PD.10
564 #endif
566 #if defined(PCBX9E)
567 #define STORAGE_SWITCH_I
568 #define HARDWARE_SWITCH_I
569 #define SWITCHES_GPIO_REG_I_H GPIOF->IDR
570 #define SWITCHES_GPIO_PIN_I_H GPIO_Pin_15 // PF.15
571 #define SWITCHES_GPIO_REG_I_L GPIOE->IDR
572 #define SWITCHES_GPIO_PIN_I_L GPIO_Pin_14 // PE.14
573 #define STORAGE_SWITCH_J
574 #define HARDWARE_SWITCH_J
575 #define SWITCHES_GPIO_REG_J_H GPIOG->IDR
576 #define SWITCHES_GPIO_PIN_J_H GPIO_Pin_7 // PG.07
577 #define SWITCHES_GPIO_REG_J_L GPIOG->IDR
578 #define SWITCHES_GPIO_PIN_J_L GPIO_Pin_8 // PG.08
579 #define STORAGE_SWITCH_K
580 #define HARDWARE_SWITCH_K
581 #define SWITCHES_GPIO_REG_K_H GPIOG->IDR
582 #define SWITCHES_GPIO_PIN_K_H GPIO_Pin_13 // PG.13
583 #define SWITCHES_GPIO_REG_K_L GPIOG->IDR
584 #define SWITCHES_GPIO_PIN_K_L GPIO_Pin_12 // PG.12
585 #define STORAGE_SWITCH_L
586 #define HARDWARE_SWITCH_L
587 #define SWITCHES_GPIO_REG_L_H GPIOE->IDR
588 #define SWITCHES_GPIO_PIN_L_H GPIO_Pin_9 // PE.09
589 #define SWITCHES_GPIO_REG_L_L GPIOE->IDR
590 #define SWITCHES_GPIO_PIN_L_L GPIO_Pin_8 // PE.08
591 #define STORAGE_SWITCH_M
592 #define HARDWARE_SWITCH_M
593 #define SWITCHES_GPIO_REG_M_H GPIOE->IDR
594 #define SWITCHES_GPIO_PIN_M_H GPIO_Pin_15 // PE.15
595 #define SWITCHES_GPIO_REG_M_L GPIOA->IDR
596 #define SWITCHES_GPIO_PIN_M_L GPIO_Pin_5 // PA.05
597 #define STORAGE_SWITCH_N
598 #define HARDWARE_SWITCH_N
599 #define SWITCHES_GPIO_REG_N_H GPIOB->IDR
600 #define SWITCHES_GPIO_PIN_N_H GPIO_Pin_3 // PB.03
601 #define SWITCHES_GPIO_REG_N_L GPIOB->IDR
602 #define SWITCHES_GPIO_PIN_N_L GPIO_Pin_4 // PB.04
603 #define STORAGE_SWITCH_O
604 #define HARDWARE_SWITCH_O
605 #define SWITCHES_GPIO_REG_O_H GPIOF->IDR
606 #define SWITCHES_GPIO_PIN_O_H GPIO_Pin_7 // PF.07
607 #define SWITCHES_GPIO_REG_O_L GPIOE->IDR
608 #define SWITCHES_GPIO_PIN_O_L GPIO_Pin_10 // PE.10
609 #define STORAGE_SWITCH_P
610 #define HARDWARE_SWITCH_P
611 #define SWITCHES_GPIO_REG_P_H GPIOF->IDR
612 #define SWITCHES_GPIO_PIN_P_H GPIO_Pin_11 // PF.11
613 #define SWITCHES_GPIO_REG_P_L GPIOF->IDR
614 #define SWITCHES_GPIO_PIN_P_L GPIO_Pin_12 // PF.12
615 #define STORAGE_SWITCH_Q
616 #define HARDWARE_SWITCH_Q
617 #define SWITCHES_GPIO_REG_Q_H GPIOF->IDR
618 #define SWITCHES_GPIO_PIN_Q_H GPIO_Pin_5 // PF.05
619 #define SWITCHES_GPIO_REG_Q_L GPIOF->IDR
620 #define SWITCHES_GPIO_PIN_Q_L GPIO_Pin_6 // PF.06
621 #define STORAGE_SWITCH_R
622 #define HARDWARE_SWITCH_R
623 #define SWITCHES_GPIO_REG_R_H GPIOB->IDR
624 #define SWITCHES_GPIO_PIN_R_H GPIO_Pin_5 // PB.05
625 #define SWITCHES_GPIO_REG_R_L GPIOE->IDR
626 #define SWITCHES_GPIO_PIN_R_L GPIO_Pin_0 // PE.00
627 #endif
629 #if defined(PCBX9E)
630 #define KEYS_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB|RCC_AHB1Periph_GPIOC|RCC_AHB1Periph_GPIOD|RCC_AHB1Periph_GPIOE|RCC_AHB1Periph_GPIOF|RCC_AHB1Periph_GPIOG)
631 #define KEYS_GPIOA_PINS (SWITCHES_GPIO_PIN_M_L)
632 #define KEYS_GPIOB_PINS (SWITCHES_GPIO_PIN_N_H | SWITCHES_GPIO_PIN_N_L | SWITCHES_GPIO_PIN_R_H)
633 #define KEYS_GPIOC_PINS (TRIMS_GPIO_PIN_RVD | TRIMS_GPIO_PIN_RVU | TRIMS_GPIO_PIN_RHL | TRIMS_GPIO_PIN_RHR)
634 #define KEYS_GPIOD_PINS (KEYS_GPIO_PIN_MENU | KEYS_GPIO_PIN_EXIT | KEYS_GPIO_PIN_PAGE | SWITCHES_GPIO_PIN_A_H | SWITCHES_GPIO_PIN_A_L | ROTARY_ENCODER_GPIO_PIN_A | ROTARY_ENCODER_GPIO_PIN_B)
635 #define KEYS_GPIOE_PINS (TRIMS_GPIO_PIN_LVU | TRIMS_GPIO_PIN_LVD | SWITCHES_GPIO_PIN_D_H | SWITCHES_GPIO_PIN_D_L| SWITCHES_GPIO_PIN_E_H | SWITCHES_GPIO_PIN_E_L | SWITCHES_GPIO_PIN_F | SWITCHES_GPIO_PIN_I_L | SWITCHES_GPIO_PIN_L_H | SWITCHES_GPIO_PIN_L_L | SWITCHES_GPIO_PIN_M_H | SWITCHES_GPIO_PIN_O_L | SWITCHES_GPIO_PIN_R_L)
636 #define KEYS_GPIOF_PINS (KEYS_GPIO_PIN_ENTER | SWITCHES_GPIO_PIN_C_H | SWITCHES_GPIO_PIN_C_L | SWITCHES_GPIO_PIN_G_H | SWITCHES_GPIO_PIN_G_L | SWITCHES_GPIO_PIN_H | SWITCHES_GPIO_PIN_I_H | SWITCHES_GPIO_PIN_O_H | SWITCHES_GPIO_PIN_P_H | SWITCHES_GPIO_PIN_P_L | SWITCHES_GPIO_PIN_Q_H | SWITCHES_GPIO_PIN_Q_L)
637 #define KEYS_GPIOG_PINS (TRIMS_GPIO_PIN_LHL | TRIMS_GPIO_PIN_LHR| SWITCHES_GPIO_PIN_B_H | SWITCHES_GPIO_PIN_B_L | SWITCHES_GPIO_PIN_J_H | SWITCHES_GPIO_PIN_J_L | SWITCHES_GPIO_PIN_K_H | SWITCHES_GPIO_PIN_K_L)
638 #elif defined(PCBX9DP) && PCBREV >= 2019
639 #define KEYS_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE)
640 #define KEYS_GPIOA_PINS (GPIO_Pin_5)
641 #define KEYS_GPIOB_PINS (GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5)
642 #define KEYS_GPIOC_PINS (GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_13)
643 #define KEYS_GPIOD_PINS (GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_7 | GPIO_Pin_10 | GPIO_Pin_14)
644 #define KEYS_GPIOE_PINS (GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15)
645 #elif defined(PCBX9DP)
646 #define KEYS_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB|RCC_AHB1Periph_GPIOC|RCC_AHB1Periph_GPIOD|RCC_AHB1Periph_GPIOE)
647 #define KEYS_GPIOA_PINS (SWITCHES_GPIO_PIN_C_L)
648 #define KEYS_GPIOB_PINS (SWITCHES_GPIO_PIN_E_L | SWITCHES_GPIO_PIN_E_H | SWITCHES_GPIO_PIN_A_H)
649 #define KEYS_GPIOC_PINS (TRIMS_GPIO_PIN_RVD | TRIMS_GPIO_PIN_RVU | TRIMS_GPIO_PIN_RHL | TRIMS_GPIO_PIN_RHR)
650 #define KEYS_GPIOD_PINS (KEYS_GPIO_PIN_MENU | KEYS_GPIO_PIN_EXIT | KEYS_GPIO_PIN_PAGE | SWITCHES_GPIO_PIN_H)
651 #define KEYS_GPIOE_PINS (KEYS_GPIO_PIN_PLUS | KEYS_GPIO_PIN_ENTER | KEYS_GPIO_PIN_MINUS | TRIMS_GPIO_PIN_LHR | TRIMS_GPIO_PIN_LHL | TRIMS_GPIO_PIN_LVD | TRIMS_GPIO_PIN_LVU | SWITCHES_GPIO_PIN_F | SWITCHES_GPIO_PIN_A_L | SWITCHES_GPIO_PIN_B_H | SWITCHES_GPIO_PIN_B_L | SWITCHES_GPIO_PIN_C_H | SWITCHES_GPIO_PIN_D_H | SWITCHES_GPIO_PIN_D_L | SWITCHES_GPIO_PIN_G_H | SWITCHES_GPIO_PIN_G_L)
652 #elif defined(PCBXLITES)
653 #define KEYS_RCC_AHB1Periph (RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOE)
654 #define KEYS_GPIOA_PINS (GPIO_Pin_5 | GPIO_Pin_6)
655 #define KEYS_GPIOB_PINS (GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5)
656 #define KEYS_GPIOC_PINS (GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5)
657 #define KEYS_GPIOE_PINS (GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_5 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14)
658 #elif defined(PCBXLITE)
659 #define KEYS_RCC_AHB1Periph (RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOE)
660 #define KEYS_GPIOA_PINS (GPIO_Pin_5 | GPIO_Pin_6)
661 #define KEYS_GPIOB_PINS (GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5)
662 #define KEYS_GPIOC_PINS (GPIO_Pin_4 | GPIO_Pin_5)
663 #define KEYS_GPIOE_PINS (GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14)
664 #elif defined(RADIO_T12)
665 #define KEYS_RCC_AHB1Periph (RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE)
666 #define KEYS_GPIOA_PINS GPIO_Pin_5
667 #define KEYS_GPIOC_PINS (GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3)
668 #define KEYS_GPIOD_PINS (GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_7 | GPIO_Pin_11 | GPIO_Pin_14 | GPIO_Pin_15)
669 #define KEYS_GPIOE_PINS (GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15)
670 #elif defined(RADIO_X7ACCESS)
671 #define KEYS_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE)
672 #define KEYS_GPIOA_PINS GPIO_Pin_5
673 #define KEYS_GPIOC_PINS (GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_13)
674 #define KEYS_GPIOD_PINS (GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_7 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_14 | GPIO_Pin_15)
675 #define KEYS_GPIOE_PINS (GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15)
676 #elif defined(RADIO_X7)
677 #define KEYS_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE)
678 #define KEYS_GPIOA_PINS GPIO_Pin_5
679 #define KEYS_GPIOC_PINS (GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_13)
680 #define KEYS_GPIOD_PINS (GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_7 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_14 | GPIO_Pin_15)
681 #define KEYS_GPIOE_PINS (GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15)
682 #elif defined(PCBX9LITES)
683 #define KEYS_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE)
684 #define KEYS_GPIOA_PINS (GPIO_Pin_5)
685 #define KEYS_GPIOB_PINS (GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5)
686 #define KEYS_GPIOC_PINS (GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_13)
687 #define KEYS_GPIOD_PINS (GPIO_Pin_8 | GPIO_Pin_9)
688 #define KEYS_GPIOE_PINS (GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14)
689 #elif defined(PCBX9LITE)
690 #define KEYS_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE)
691 #define KEYS_GPIOA_PINS (GPIO_Pin_5)
692 #define KEYS_GPIOB_PINS (GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5)
693 #define KEYS_GPIOC_PINS (GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_13)
694 #define KEYS_GPIOD_PINS (GPIO_Pin_8 | GPIO_Pin_9)
695 #define KEYS_GPIOE_PINS (GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14)
696 #else
697 #define KEYS_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB|RCC_AHB1Periph_GPIOC|RCC_AHB1Periph_GPIOD|RCC_AHB1Periph_GPIOE)
698 #define KEYS_GPIOA_PINS (SWITCHES_GPIO_PIN_C_L)
699 #define KEYS_GPIOB_PINS (SWITCHES_GPIO_PIN_E_L | SWITCHES_GPIO_PIN_E_H | SWITCHES_GPIO_PIN_A_H | SWITCHES_GPIO_PIN_D_L)
700 #define KEYS_GPIOC_PINS (TRIMS_GPIO_PIN_RVD | TRIMS_GPIO_PIN_RVU | TRIMS_GPIO_PIN_RHL | TRIMS_GPIO_PIN_RHR)
701 #define KEYS_GPIOD_PINS (KEYS_GPIO_PIN_MENU | KEYS_GPIO_PIN_EXIT | KEYS_GPIO_PIN_PAGE)
702 #define KEYS_GPIOE_PINS (KEYS_GPIO_PIN_PLUS | KEYS_GPIO_PIN_ENTER | KEYS_GPIO_PIN_MINUS | TRIMS_GPIO_PIN_LHR | TRIMS_GPIO_PIN_LHL | TRIMS_GPIO_PIN_LVD | TRIMS_GPIO_PIN_LVU | SWITCHES_GPIO_PIN_F | SWITCHES_GPIO_PIN_A_L | SWITCHES_GPIO_PIN_B_H | SWITCHES_GPIO_PIN_B_L | SWITCHES_GPIO_PIN_C_H | SWITCHES_GPIO_PIN_D_H | SWITCHES_GPIO_PIN_G_H | SWITCHES_GPIO_PIN_G_L | SWITCHES_GPIO_PIN_H)
703 #endif
705 // ADC
706 #define ADC_MAIN ADC1
707 #define ADC_DMA DMA2
708 #define ADC_DMA_SxCR_CHSEL 0
709 #define ADC_DMA_Stream DMA2_Stream4
710 #define ADC_SET_DMA_FLAGS() ADC_DMA->HIFCR = (DMA_HIFCR_CTCIF4 | DMA_HIFCR_CHTIF4 | DMA_HIFCR_CTEIF4 | DMA_HIFCR_CDMEIF4 | DMA_HIFCR_CFEIF4)
711 #define ADC_TRANSFER_COMPLETE() (ADC_DMA->HISR & DMA_HISR_TCIF4)
712 #define ADC_SAMPTIME 2 // sample time = 28 cycles
713 #if defined(PCBX9E)
714 #define HARDWARE_POT1
715 #define HARDWARE_POT2
716 #define HARDWARE_POT3
717 #define HARDWARE_POT4
718 #define ADC_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOF | RCC_AHB1Periph_DMA2)
719 #define ADC_RCC_APB1Periph 0
720 #define ADC_RCC_APB2Periph (RCC_APB2Periph_ADC1 | RCC_APB2Periph_ADC3)
721 #define ADC_GPIO_PIN_STICK_RV GPIO_Pin_0 // PA.00
722 #define ADC_GPIO_PIN_STICK_RH GPIO_Pin_1 // PA.01
723 #define ADC_GPIO_PIN_STICK_LH GPIO_Pin_2 // PA.02
724 #define ADC_GPIO_PIN_STICK_LV GPIO_Pin_3 // PA.03
725 #define ADC_CHANNEL_STICK_RV ADC_Channel_0 // ADC1_IN0
726 #define ADC_CHANNEL_STICK_RH ADC_Channel_1 // ADC1_IN1
727 #define ADC_CHANNEL_STICK_LH ADC_Channel_2 // ADC1_IN2
728 #define ADC_CHANNEL_STICK_LV ADC_Channel_3 // ADC1_IN3
729 #define ADC_GPIO_PIN_POT1 GPIO_Pin_8 // PF.08
730 #define ADC_GPIO_PIN_POT2 GPIO_Pin_0 // PB.00
731 #define ADC_GPIO_PIN_POT3 GPIO_Pin_5 // PC.05
732 #define ADC_GPIO_PIN_POT4 GPIO_Pin_4 // PC.04
733 #define ADC_GPIO_PIN_SLIDER1 GPIO_Pin_10 // PF.10
734 #define ADC_GPIO_PIN_SLIDER2 GPIO_Pin_9 // PF.09
735 #define ADC_GPIO_PIN_SLIDER3 GPIO_Pin_6 // PA.06
736 #define ADC_GPIO_PIN_SLIDER4 GPIO_Pin_1 // PB.01
737 #define ADC_GPIO_PIN_BATT GPIO_Pin_0 // PC.00
738 #define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV | ADC_GPIO_PIN_SLIDER3)
739 #define ADC_GPIOB_PINS (ADC_GPIO_PIN_POT2 | ADC_GPIO_PIN_SLIDER4)
740 #define ADC_GPIOC_PINS (ADC_GPIO_PIN_POT3 | ADC_GPIO_PIN_POT4 | ADC_GPIO_PIN_SLIDER1 | ADC_GPIO_PIN_SLIDER2 | ADC_GPIO_PIN_BATT)
741 #define ADC_GPIOF_PINS (ADC_GPIO_PIN_POT1 | ADC_GPIO_PIN_SLIDER1 | ADC_GPIO_PIN_SLIDER2)
742 #define ADC_CHANNEL_POT1 ADC_Channel_6 // ADC3_IN6
743 #define ADC_CHANNEL_POT2 ADC_Channel_8 // ADC1_IN8
744 #define ADC_CHANNEL_POT3 ADC_Channel_15 // ADC1_IN15
745 #define ADC_CHANNEL_POT4 ADC_Channel_14 // ADC1_IN14
746 #define ADC_CHANNEL_SLIDER1 ADC_Channel_8 // ADC3_IN8
747 #define ADC_CHANNEL_SLIDER2 ADC_Channel_7 // ADC3_IN7
748 #define ADC_CHANNEL_SLIDER3 ADC_Channel_6 // ADC1_IN6
749 #define ADC_CHANNEL_SLIDER4 ADC_Channel_9 // ADC1_IN9
750 #define ADC_CHANNEL_BATT ADC_Channel_10 // ADC1_IN10
751 #define ADC_EXT ADC3
752 #define ADC_EXT_DMA DMA2
753 #define ADC_EXT_DMA_Stream DMA2_Stream0
754 #define ADC_EXT_SET_DMA_FLAGS() ADC_DMA->LIFCR = (DMA_LIFCR_CTCIF0 | DMA_LIFCR_CHTIF0 | DMA_LIFCR_CTEIF0 | DMA_LIFCR_CDMEIF0 | DMA_LIFCR_CFEIF0)
755 #define ADC_EXT_TRANSFER_COMPLETE() (ADC_DMA->LISR & DMA_LISR_TCIF0)
756 #define ADC_EXT_SAMPTIME 3 // sample time = 56 cycles
757 #define ADC_VREF_PREC2 200
758 #elif defined(PCBX9DP)
759 #define HARDWARE_POT1
760 #define HARDWARE_POT2
761 #define HARDWARE_POT3
762 #define ADC_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_DMA2)
763 #define ADC_RCC_APB1Periph 0
764 #define ADC_RCC_APB2Periph RCC_APB2Periph_ADC1
765 #define ADC_GPIO_PIN_STICK_RV GPIO_Pin_0 // PA.00
766 #define ADC_GPIO_PIN_STICK_RH GPIO_Pin_1 // PA.01
767 #define ADC_GPIO_PIN_STICK_LH GPIO_Pin_2 // PA.02
768 #define ADC_GPIO_PIN_STICK_LV GPIO_Pin_3 // PA.03
769 #define ADC_CHANNEL_STICK_RV ADC_Channel_0 // ADC1_IN0
770 #define ADC_CHANNEL_STICK_RH ADC_Channel_1 // ADC1_IN1
771 #define ADC_CHANNEL_STICK_LH ADC_Channel_2 // ADC1_IN2
772 #define ADC_CHANNEL_STICK_LV ADC_Channel_3 // ADC1_IN3
773 #define ADC_GPIO_PIN_POT1 GPIO_Pin_6 // PA.06
774 #define ADC_GPIO_PIN_POT2 GPIO_Pin_0 // PB.00
775 #if PCBREV < 2019
776 #define ADC_GPIO_PIN_POT3 GPIO_Pin_1 // PB.01
777 #define ADC_GPIOB_PINS (ADC_GPIO_PIN_POT2 | ADC_GPIO_PIN_POT3)
778 #define ADC_CHANNEL_POT3 ADC_Channel_9
779 #define ADC_VREF_PREC2 330
780 #else
781 #define ADC_GPIOB_PINS (ADC_GPIO_PIN_POT2)
782 #define ADC_CHANNEL_POT3 0
783 #define ADC_VREF_PREC2 300
784 #endif
785 #define ADC_GPIO_PIN_SLIDER1 GPIO_Pin_4 // PC.04
786 #define ADC_GPIO_PIN_SLIDER2 GPIO_Pin_5 // PC.05
787 #define ADC_GPIO_PIN_BATT GPIO_Pin_0 // PC.00
788 #define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV | ADC_GPIO_PIN_POT1)
789 #define ADC_GPIOC_PINS (ADC_GPIO_PIN_SLIDER1 | ADC_GPIO_PIN_SLIDER2 | ADC_GPIO_PIN_BATT)
790 #define ADC_CHANNEL_POT1 ADC_Channel_6
791 #define ADC_CHANNEL_POT2 ADC_Channel_8
792 #define ADC_CHANNEL_SLIDER1 ADC_Channel_14
793 #define ADC_CHANNEL_SLIDER2 ADC_Channel_15
794 #define ADC_CHANNEL_BATT ADC_Channel_10
795 #elif defined(PCBXLITE)
796 #define HARDWARE_POT1
797 #define HARDWARE_POT2
798 #define ADC_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_DMA2)
799 #define ADC_RCC_APB1Periph RCC_APB1Periph_TIM5
800 #define ADC_RCC_APB2Periph RCC_APB2Periph_ADC1
801 #define ADC_GPIO_PIN_STICK_RV GPIO_Pin_0 // PA.00
802 #define ADC_GPIO_PIN_STICK_RH GPIO_Pin_1 // PA.01
803 #define ADC_GPIO_PIN_STICK_LV GPIO_Pin_2 // PA.02
804 #define ADC_GPIO_PIN_STICK_LH GPIO_Pin_3 // PA.03
805 #define ADC_GPIO_PIN_POT1 GPIO_Pin_1 // PC.01
806 #define ADC_GPIO_PIN_POT2 GPIO_Pin_2 // PC.02
807 #define ADC_GPIO_PIN_BATT GPIO_Pin_0 // PC.00
808 #define PWM_TIMER TIM5
809 #define PWM_GPIO GPIOA
810 #define PWM_GPIO_AF GPIO_AF_TIM5
811 #define PWM_IRQHandler TIM5_IRQHandler
812 #define PWM_IRQn TIM5_IRQn
813 #define PWM_GPIOA_PINS (GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3)
814 #define ADC_GPIOA_PINS (STICKS_PWM_ENABLED() ? 0 : (GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3))
815 #define ADC_GPIOC_PINS (GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2)
816 #define ADC_CHANNEL_STICK_RV ADC_Channel_3 // ADC1_IN3
817 #define ADC_CHANNEL_STICK_RH ADC_Channel_2 // ADC1_IN2
818 #define ADC_CHANNEL_STICK_LV ADC_Channel_1 // ADC1_IN1
819 #define ADC_CHANNEL_STICK_LH ADC_Channel_0 // ADC1_IN0
820 #define ADC_CHANNEL_POT1 ADC_Channel_11 // ADC1_IN11
821 #define ADC_CHANNEL_POT2 ADC_Channel_12 // ADC1_IN12
822 #define ADC_CHANNEL_BATT ADC_Channel_10 // ADC1_IN10
823 #define ADC_VREF_PREC2 330
824 #elif defined(PCBX7)
825 #define HARDWARE_POT1
826 #define HARDWARE_POT2
827 #define ADC_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_DMA2)
828 #define ADC_RCC_APB1Periph 0
829 #define ADC_RCC_APB2Periph RCC_APB2Periph_ADC1
830 #define ADC_GPIO_PIN_STICK_RV GPIO_Pin_0 // PA.00
831 #define ADC_GPIO_PIN_STICK_RH GPIO_Pin_1 // PA.01
832 #define ADC_GPIO_PIN_STICK_LV GPIO_Pin_2 // PA.02
833 #define ADC_GPIO_PIN_STICK_LH GPIO_Pin_3 // PA.03
834 #define ADC_CHANNEL_STICK_RV ADC_Channel_0 // ADC1_IN0
835 #define ADC_CHANNEL_STICK_RH ADC_Channel_1 // ADC1_IN1
836 #define ADC_CHANNEL_STICK_LV ADC_Channel_2 // ADC1_IN2
837 #define ADC_CHANNEL_STICK_LH ADC_Channel_3 // ADC1_IN3
838 #define ADC_GPIO_PIN_POT1 GPIO_Pin_0 // PB.00
839 #define ADC_GPIO_PIN_POT2 GPIO_Pin_6 // PA.06
840 #define ADC_GPIO_PIN_BATT GPIO_Pin_0 // PC.00
841 #define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV | ADC_GPIO_PIN_POT2)
842 #define ADC_GPIOB_PINS ADC_GPIO_PIN_POT1
843 #define ADC_GPIOC_PINS ADC_GPIO_PIN_BATT
844 #define ADC_CHANNEL_POT1 ADC_Channel_8
845 #define ADC_CHANNEL_POT2 ADC_Channel_6
846 #define ADC_CHANNEL_BATT ADC_Channel_10
847 #define ADC_VREF_PREC2 330
848 #elif defined(PCBX9LITE)
849 #define HARDWARE_POT1
850 #define ADC_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_DMA2)
851 #define ADC_RCC_APB1Periph 0
852 #define ADC_RCC_APB2Periph RCC_APB2Periph_ADC1
853 #define ADC_GPIO_PIN_STICK_LH GPIO_Pin_0 // PA.00
854 #define ADC_GPIO_PIN_STICK_LV GPIO_Pin_1 // PA.01
855 #define ADC_GPIO_PIN_STICK_RV GPIO_Pin_2 // PA.02
856 #define ADC_GPIO_PIN_STICK_RH GPIO_Pin_3 // PA.03
857 #define ADC_CHANNEL_STICK_LH ADC_Channel_0 // ADC1_IN0
858 #define ADC_CHANNEL_STICK_LV ADC_Channel_1 // ADC1_IN1
859 #define ADC_CHANNEL_STICK_RV ADC_Channel_2 // ADC1_IN2
860 #define ADC_CHANNEL_STICK_RH ADC_Channel_3 // ADC1_IN3
861 #define ADC_GPIO_PIN_POT1 GPIO_Pin_1 // PC.01
862 #define ADC_GPIO_PIN_BATT GPIO_Pin_0 // PC.00
863 #define ADC_GPIOA_PINS (GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3)
864 #define ADC_GPIOC_PINS (GPIO_Pin_0 | GPIO_Pin_1)
865 #define ADC_CHANNEL_POT1 ADC_Channel_11 // ADC1_IN11
866 #define ADC_CHANNEL_BATT ADC_Channel_10 // ADC1_IN10
867 #define ADC_VREF_PREC2 300
868 #else
869 #define HARDWARE_POT1
870 #define HARDWARE_POT2
871 #define ADC_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_DMA2)
872 #define ADC_RCC_APB1Periph 0
873 #define ADC_RCC_APB2Periph RCC_APB2Periph_ADC1
874 #define ADC_GPIO_PIN_STICK_RV GPIO_Pin_0 // PA.00
875 #define ADC_GPIO_PIN_STICK_RH GPIO_Pin_1 // PA.01
876 #define ADC_GPIO_PIN_STICK_LH GPIO_Pin_2 // PA.02
877 #define ADC_GPIO_PIN_STICK_LV GPIO_Pin_3 // PA.03
878 #define ADC_CHANNEL_STICK_RV ADC_Channel_0 // ADC1_IN0
879 #define ADC_CHANNEL_STICK_RH ADC_Channel_1 // ADC1_IN1
880 #define ADC_CHANNEL_STICK_LH ADC_Channel_2 // ADC1_IN2
881 #define ADC_CHANNEL_STICK_LV ADC_Channel_3 // ADC1_IN3
882 #define ADC_GPIO_PIN_POT1 GPIO_Pin_6 // PA.06
883 #define ADC_GPIO_PIN_POT2 GPIO_Pin_0 // PB.00
884 #define ADC_GPIO_PIN_SLIDER1 GPIO_Pin_4 // PC.04
885 #define ADC_GPIO_PIN_SLIDER2 GPIO_Pin_5 // PC.05
886 #define ADC_GPIO_PIN_BATT GPIO_Pin_0 // PC.00
887 #define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV | ADC_GPIO_PIN_POT1)
888 #define ADC_GPIOB_PINS (ADC_GPIO_PIN_POT2)
889 #define ADC_GPIOC_PINS (ADC_GPIO_PIN_SLIDER1 | ADC_GPIO_PIN_SLIDER2 | ADC_GPIO_PIN_BATT)
890 #define ADC_CHANNEL_POT1 ADC_Channel_6
891 #define ADC_CHANNEL_POT2 ADC_Channel_8
892 #define ADC_CHANNEL_POT3 ADC_Channel_9
893 #define ADC_CHANNEL_SLIDER1 ADC_Channel_14
894 #define ADC_CHANNEL_SLIDER2 ADC_Channel_15
895 #define ADC_CHANNEL_BATT ADC_Channel_10
896 #define ADC_VREF_PREC2 330
897 #endif
899 // PWR and LED driver
900 #define PWR_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE)
902 #if defined(PCBX9LITE)
903 #define PWR_SWITCH_GPIO GPIOA
904 #define PWR_SWITCH_GPIO_PIN GPIO_Pin_7 // PA.07
905 #define PWR_ON_GPIO GPIOA
906 #define PWR_ON_GPIO_PIN GPIO_Pin_6 // PA.06
907 #elif defined(PCBXLITE)
908 #define PWR_SWITCH_GPIO GPIOA
909 #define PWR_SWITCH_GPIO_PIN GPIO_Pin_7 // PA.07
910 #define PWR_ON_GPIO GPIOE
911 #define PWR_ON_GPIO_PIN GPIO_Pin_9 // PE.09
912 #else
913 #define PWR_SWITCH_GPIO GPIOD
914 #define PWR_SWITCH_GPIO_PIN GPIO_Pin_1 // PD.01
915 #define PWR_ON_GPIO GPIOD
916 #define PWR_ON_GPIO_PIN GPIO_Pin_0 // PD.00
917 #endif
919 #if defined(PCBX9DP) && PCBREV >= 2019
920 #define STATUS_LEDS
921 #define GPIO_LED_GPIO_ON GPIO_ResetBits
922 #define GPIO_LED_GPIO_OFF GPIO_SetBits
923 #define LED_RED_GPIO GPIOA
924 #define LED_RED_GPIO_PIN GPIO_Pin_13 // PA.13
925 #elif defined(PCBXLITE)
926 #define STATUS_LEDS
927 #define GPIO_LED_GPIO_ON GPIO_ResetBits
928 #define GPIO_LED_GPIO_OFF GPIO_SetBits
929 #define LED_BLUE_GPIO GPIOE
930 #define LED_BLUE_GPIO_PIN GPIO_Pin_6 // PE.06
931 #define LED_RED_GPIO GPIOE
932 #define LED_RED_GPIO_PIN GPIO_Pin_4 // PE.04
933 #define LED_GREEN_GPIO GPIOE
934 #define LED_GREEN_GPIO_PIN GPIO_Pin_5 // PE.05
935 #elif defined(PCBX7ACCESS)
936 #define STATUS_LEDS
937 #define GPIO_LED_GPIO_ON GPIO_SetBits
938 #define GPIO_LED_GPIO_OFF GPIO_ResetBits
939 #define LED_BLUE_GPIO GPIOB
940 #define LED_BLUE_GPIO_PIN GPIO_Pin_1 // PB.01
941 #define LED_RED_GPIO GPIOC
942 #define LED_RED_GPIO_PIN GPIO_Pin_4 // PC.04
943 #elif defined(PCBX7)
944 #define STATUS_LEDS
945 #define GPIO_LED_GPIO_ON GPIO_SetBits
946 #define GPIO_LED_GPIO_OFF GPIO_ResetBits
947 #define LED_GREEN_GPIO GPIOC
948 #define LED_GREEN_GPIO_PIN GPIO_Pin_4 // PC.04
949 #define LED_RED_GPIO GPIOC
950 #define LED_RED_GPIO_PIN GPIO_Pin_5 // PC.05
951 #define LED_BLUE_GPIO GPIOB
952 #define LED_BLUE_GPIO_PIN GPIO_Pin_1 // PB.01
953 #elif defined(PCBX9LITES)
954 #define STATUS_LEDS
955 #define GPIO_LED_GPIO_ON GPIO_SetBits
956 #define GPIO_LED_GPIO_OFF GPIO_ResetBits
957 #define LED_RED_GPIO GPIOE
958 #define LED_RED_GPIO_PIN GPIO_Pin_5 // PE.05
959 #define LED_BLUE_GPIO GPIOE
960 #define LED_BLUE_GPIO_PIN GPIO_Pin_6 // PE.06
961 #elif defined(PCBX9LITE)
962 #define STATUS_LEDS
963 #define GPIO_LED_GPIO_ON GPIO_SetBits
964 #define GPIO_LED_GPIO_OFF GPIO_ResetBits
965 #define LED_RED_GPIO GPIOE
966 #define LED_RED_GPIO_PIN GPIO_Pin_5 // PE.05
967 #define LED_GREEN_GPIO GPIOE
968 #define LED_GREEN_GPIO_PIN GPIO_Pin_4 // PE.04
969 #define LED_BLUE_GPIO GPIOE
970 #define LED_BLUE_GPIO_PIN GPIO_Pin_6 // PE.06
971 #endif
973 // Internal Module
974 #if defined(PCBXLITE)
975 #define EXTERNAL_ANTENNA
976 #endif
977 #if defined(PCBXLITE) || defined(PCBX9LITE)
978 #define INTMODULE_RCC_APB1Periph 0
979 #define INTMODULE_RCC_APB2Periph RCC_APB2Periph_USART1
980 #if defined(PCBXLITES) || defined(PCBX9LITE)
981 #define INTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_DMA2)
982 #define INTMODULE_PWR_GPIO GPIOA
983 #define INTMODULE_PWR_GPIO_PIN GPIO_Pin_15 // PA.15
984 #else
985 #define INTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_DMA2)
986 #define INTMODULE_PWR_GPIO GPIOD
987 #define INTMODULE_PWR_GPIO_PIN GPIO_Pin_9 // PD.09
988 #endif
989 #define INTMODULE_GPIO GPIOB
990 #define INTMODULE_TX_GPIO_PIN GPIO_Pin_6 // PB.06
991 #define INTMODULE_RX_GPIO_PIN GPIO_Pin_7 // PB.07
992 #define INTMODULE_GPIO_PinSource_TX GPIO_PinSource6
993 #define INTMODULE_GPIO_PinSource_RX GPIO_PinSource7
994 #define INTMODULE_USART USART1
995 #define INTMODULE_GPIO_AF GPIO_AF_USART1
996 #define INTMODULE_USART_IRQHandler USART1_IRQHandler
997 #define INTMODULE_USART_IRQn USART1_IRQn
998 #define INTMODULE_DMA_STREAM DMA2_Stream7
999 #define INTMODULE_DMA_STREAM_IRQ DMA2_Stream7_IRQn
1000 #define INTMODULE_DMA_STREAM_IRQHandler DMA2_Stream7_IRQHandler
1001 #define INTMODULE_DMA_FLAG_TC DMA_IT_TCIF7
1002 #define INTMODULE_DMA_CHANNEL DMA_Channel_4
1003 #if defined(PCBXLITES)
1004 #define INTMODULE_BOOTCMD_GPIO GPIOC
1005 #define INTMODULE_BOOTCMD_GPIO_PIN GPIO_Pin_8 // PC.08
1006 #endif
1007 #elif defined(PCBX9DP) && PCBREV >= 2019
1008 #define INTMODULE_RCC_APB1Periph 0
1009 #define INTMODULE_RCC_APB2Periph RCC_APB2Periph_USART1
1010 #define INTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_DMA2)
1011 #define INTMODULE_PWR_GPIO GPIOA
1012 #define INTMODULE_PWR_GPIO_PIN GPIO_Pin_7 // PA.07
1013 #define INTMODULE_GPIO GPIOB
1014 #define INTMODULE_TX_GPIO_PIN GPIO_Pin_6 // PB.06
1015 #define INTMODULE_RX_GPIO_PIN GPIO_Pin_7 // PB.07
1016 #define INTMODULE_GPIO_PinSource_TX GPIO_PinSource6
1017 #define INTMODULE_GPIO_PinSource_RX GPIO_PinSource7
1018 #define INTMODULE_USART USART1
1019 #define INTMODULE_GPIO_AF GPIO_AF_USART1
1020 #define INTMODULE_USART_IRQHandler USART1_IRQHandler
1021 #define INTMODULE_USART_IRQn USART1_IRQn
1022 #define INTMODULE_DMA_STREAM DMA2_Stream7
1023 #define INTMODULE_DMA_STREAM_IRQ DMA2_Stream7_IRQn
1024 #define INTMODULE_DMA_STREAM_IRQHandler DMA2_Stream7_IRQHandler
1025 #define INTMODULE_DMA_FLAG_TC DMA_IT_TCIF7
1026 #define INTMODULE_DMA_CHANNEL DMA_Channel_4
1027 #elif defined(RADIO_X7ACCESS)
1028 #define INTMODULE_RCC_APB1Periph 0
1029 #define INTMODULE_RCC_APB2Periph RCC_APB2Periph_USART1
1030 #define INTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_DMA2)
1031 #define INTMODULE_PWR_GPIO GPIOC
1032 #define INTMODULE_PWR_GPIO_PIN GPIO_Pin_5 // PC.05
1033 #define INTMODULE_GPIO GPIOB
1034 #define INTMODULE_TX_GPIO_PIN GPIO_Pin_6 // PB.06
1035 #define INTMODULE_RX_GPIO_PIN GPIO_Pin_7 // PB.07
1036 #define INTMODULE_GPIO_PinSource_TX GPIO_PinSource6
1037 #define INTMODULE_GPIO_PinSource_RX GPIO_PinSource7
1038 #define INTMODULE_USART USART1
1039 #define INTMODULE_GPIO_AF GPIO_AF_USART1
1040 #define INTMODULE_USART_IRQHandler USART1_IRQHandler
1041 #define INTMODULE_USART_IRQn USART1_IRQn
1042 #define INTMODULE_DMA_STREAM DMA2_Stream7
1043 #define INTMODULE_DMA_STREAM_IRQ DMA2_Stream7_IRQn
1044 #define INTMODULE_DMA_STREAM_IRQHandler DMA2_Stream7_IRQHandler
1045 #define INTMODULE_DMA_FLAG_TC DMA_IT_TCIF7
1046 #define INTMODULE_DMA_CHANNEL DMA_Channel_4
1047 #elif defined(PCBX9E) || defined(PCBX9DP) || defined(RADIO_X7)
1048 #define INTMODULE_PULSES
1049 #define INTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_DMA2)
1050 #define INTMODULE_RCC_APB1Periph 0
1051 #define INTMODULE_RCC_APB2Periph RCC_APB2Periph_TIM1
1052 #define INTMODULE_PWR_GPIO GPIOC
1053 #define INTMODULE_PWR_GPIO_PIN GPIO_Pin_6 // PC.06
1054 #define INTMODULE_TX_GPIO GPIOA
1055 #define INTMODULE_TX_GPIO_PIN GPIO_Pin_10 // PA.10
1056 #define INTMODULE_TX_GPIO_PinSource GPIO_PinSource10
1057 #define INTMODULE_TIMER TIM1
1058 #define INTMODULE_TIMER_CC_IRQn TIM1_CC_IRQn
1059 #define INTMODULE_TIMER_CC_IRQHandler TIM1_CC_IRQHandler
1060 #define INTMODULE_TX_GPIO_AF GPIO_AF_TIM1
1061 #define INTMODULE_DMA_CHANNEL DMA_Channel_6
1062 #define INTMODULE_DMA_STREAM DMA2_Stream5
1063 #define INTMODULE_DMA_STREAM_IRQn DMA2_Stream5_IRQn
1064 #define INTMODULE_DMA_STREAM_IRQHandler DMA2_Stream5_IRQHandler
1065 #define INTMODULE_DMA_FLAG_TC DMA_IT_TCIF5
1066 #define INTMODULE_TIMER_FREQ (PERI2_FREQUENCY * TIMER_MULT_APB2)
1067 #elif defined(RADIO_T12)
1068 #define INTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_DMA1)
1069 #define INTMODULE_PWR_GPIO GPIOC
1070 #define INTMODULE_PWR_GPIO_PIN GPIO_Pin_6 // PC.06
1071 #define INTMODULE_GPIO GPIOB
1072 #define INTMODULE_TX_GPIO_PIN GPIO_Pin_10 // PB.10
1073 #define INTMODULE_RX_GPIO_PIN GPIO_Pin_11 // PB.11
1074 #define INTMODULE_GPIO_PinSource_TX GPIO_PinSource10
1075 #define INTMODULE_GPIO_PinSource_RX GPIO_PinSource11
1076 #define INTMODULE_USART USART3
1077 #define INTMODULE_GPIO_AF GPIO_AF_USART3
1078 #define INTMODULE_USART_IRQn USART3_IRQn
1079 #define INTMODULE_USART_IRQHandler USART3_IRQHandler
1080 #define INTMODULE_DMA_STREAM DMA1_Stream3
1081 #define INTMODULE_DMA_STREAM_IRQ DMA1_Stream3_IRQn
1082 #define INTMODULE_DMA_STREAM_IRQHandler DMA1_Stream3_IRQHandler
1083 #define INTMODULE_DMA_FLAG_TC DMA_IT_TCIF3
1084 #define INTMODULE_DMA_CHANNEL DMA_Channel_4
1085 #define INTMODULE_RCC_APB1Periph RCC_APB1Periph_TIM2
1086 #define INTMODULE_RCC_APB2Periph RCC_APB1Periph_USART3
1087 #define INTMODULE_TIMER TIM2
1088 #define INTMODULE_TIMER_IRQn TIM2_IRQn
1089 #define INTMODULE_TIMER_IRQHandler TIM2_IRQHandler
1090 #define INTMODULE_TIMER_CC_IRQn TIM2_CC_IRQn
1091 #define INTMODULE_TIMER_CC_IRQHandler TIM2_CC_IRQHandler
1092 #define INTMODULE_TIMER_FREQ (PERI2_FREQUENCY * TIMER_MULT_APB2)
1093 #else
1094 #define INTMODULE_PULSES
1095 #define INTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_DMA2)
1096 #define INTMODULE_RCC_APB1Periph 0
1097 #define INTMODULE_RCC_APB2Periph RCC_APB2Periph_TIM1
1098 #define INTMODULE_PWR_GPIO GPIOD
1099 #define INTMODULE_PWR_GPIO_PIN GPIO_Pin_15 // PD.15
1100 #define INTMODULE_TX_GPIO GPIOA
1101 #define INTMODULE_TX_GPIO_PIN GPIO_Pin_10 // PA.10
1102 #define INTMODULE_TX_GPIO_PinSource GPIO_PinSource10
1103 #define INTMODULE_TIMER TIM1
1104 #define INTMODULE_TIMER_CC_IRQn TIM1_CC_IRQn
1105 #define INTMODULE_TIMER_CC_IRQHandler TIM1_CC_IRQHandler
1106 #define INTMODULE_TX_GPIO_AF GPIO_AF_TIM1
1107 #define INTMODULE_DMA_CHANNEL DMA_Channel_6
1108 #define INTMODULE_DMA_STREAM DMA2_Stream5
1109 #define INTMODULE_DMA_STREAM_IRQn DMA2_Stream5_IRQn
1110 #define INTMODULE_DMA_STREAM_IRQHandler DMA2_Stream5_IRQHandler
1111 #define INTMODULE_DMA_FLAG_TC DMA_IT_TCIF5
1112 #define INTMODULE_TIMER_FREQ (PERI2_FREQUENCY * TIMER_MULT_APB2)
1113 #endif
1115 // External Module
1116 #if defined(PCBXLITE) || defined(PCBX9LITE) || (defined(PCBX9DP) && PCBREV >= 2019) || defined(PCBX7ACCESS)
1117 #define EXTMODULE_RCC_APB2Periph (RCC_APB2Periph_TIM8 | RCC_APB2Periph_USART6)
1118 #if (defined(PCBX9DP) && PCBREV >= 2019) || defined(PCBX7ACCESS)
1119 #define EXTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_DMA2)
1120 #define EXTMODULE_PWR_GPIO GPIOD
1121 #define EXTMODULE_PWR_GPIO_PIN GPIO_Pin_8 // PD.08
1122 #elif defined(PCBX9LITE)
1123 #define HARDWARE_EXTERNAL_MODULE_SIZE_SML
1124 #define EXTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_DMA2)
1125 #define EXTMODULE_PWR_GPIO GPIOA
1126 #define EXTMODULE_PWR_GPIO_PIN GPIO_Pin_8 // PA.08
1127 #else
1128 #define HARDWARE_EXTERNAL_MODULE_SIZE_SML
1129 #define EXTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_DMA2)
1130 #define EXTMODULE_PWR_GPIO GPIOD
1131 #define EXTMODULE_PWR_GPIO_PIN GPIO_Pin_11 // PD.11
1132 #endif
1133 #define EXTERNAL_MODULE_PWR_ON() GPIO_SetBits(EXTMODULE_PWR_GPIO, EXTMODULE_PWR_GPIO_PIN)
1134 #define EXTERNAL_MODULE_PWR_OFF() GPIO_ResetBits(EXTMODULE_PWR_GPIO, EXTMODULE_PWR_GPIO_PIN)
1135 #define IS_EXTERNAL_MODULE_ON() (GPIO_ReadInputDataBit(EXTMODULE_PWR_GPIO, EXTMODULE_PWR_GPIO_PIN) == Bit_SET)
1136 #define EXTMODULE_TX_GPIO GPIOC
1137 #define EXTMODULE_USART_GPIO EXTMODULE_TX_GPIO
1138 #define EXTMODULE_TX_GPIO_PIN GPIO_Pin_6 // PC.06
1139 #define EXTMODULE_TX_GPIO_PinSource GPIO_PinSource6
1140 #define EXTMODULE_RX_GPIO_PIN GPIO_Pin_7 // PC.07
1141 #define EXTMODULE_RX_GPIO_PinSource GPIO_PinSource7
1142 #define EXTMODULE_TIMER TIM8
1143 #define EXTMODULE_TIMER_FREQ (PERI2_FREQUENCY * TIMER_MULT_APB2)
1144 #define EXTMODULE_TIMER_CC_IRQn TIM8_CC_IRQn
1145 #define EXTMODULE_TIMER_CC_IRQHandler TIM8_CC_IRQHandler
1146 #define EXTMODULE_TIMER_TX_GPIO_AF GPIO_AF_TIM8 // TIM8_CH1
1147 #define EXTMODULE_TIMER_DMA_CHANNEL DMA_Channel_7
1148 #define EXTMODULE_TIMER_DMA_STREAM DMA2_Stream1
1149 #define EXTMODULE_TIMER_DMA_STREAM_IRQn DMA2_Stream1_IRQn
1150 #define EXTMODULE_TIMER_DMA_STREAM_IRQHandler DMA2_Stream1_IRQHandler
1151 #define EXTMODULE_TIMER_DMA_FLAG_TC DMA_IT_TCIF1
1152 #define EXTMODULE_TIMER_OUTPUT_ENABLE TIM_CCER_CC1E
1153 #define EXTMODULE_TIMER_OUTPUT_POLARITY TIM_CCER_CC1P
1154 #define EXTMODULE_USART_GPIO_AF GPIO_AF_USART6
1155 #define EXTMODULE_USART USART6
1156 #define EXTMODULE_USART_IRQn USART6_IRQn
1157 #define EXTMODULE_USART_IRQHandler USART6_IRQHandler
1158 #define EXTMODULE_USART_TX_DMA_CHANNEL DMA_Channel_5
1159 #define EXTMODULE_USART_TX_DMA_STREAM DMA2_Stream6
1160 #define EXTMODULE_USART_RX_DMA_CHANNEL DMA_Channel_5
1161 #define EXTMODULE_USART_RX_DMA_STREAM DMA2_Stream1
1162 #elif defined(RADIO_T12)
1163 //Jumper T12v2 external module configured
1164 #define EXTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_DMA2)
1165 #define EXTMODULE_RCC_APB2Periph RCC_APB2Periph_TIM8
1166 #define EXTMODULE_PWR_GPIO GPIOD
1167 #define EXTMODULE_PWR_GPIO_PIN GPIO_Pin_8 // JUMPER EXT PD.08 // X7 EXT is PD.08
1168 #define EXTERNAL_MODULE_PWR_ON() GPIO_SetBits(EXTMODULE_PWR_GPIO, EXTMODULE_PWR_GPIO_PIN)
1169 #define EXTERNAL_MODULE_PWR_OFF() GPIO_ResetBits(EXTMODULE_PWR_GPIO, EXTMODULE_PWR_GPIO_PIN)
1170 #define IS_EXTERNAL_MODULE_ON() (GPIO_ReadInputDataBit(EXTMODULE_PWR_GPIO, EXTMODULE_PWR_GPIO_PIN) == Bit_SET)
1171 #define EXTMODULE_TX_GPIO GPIOA
1172 #define EXTMODULE_TX_GPIO_PIN GPIO_Pin_7 // JUMPER EXT PA.07 // X7 EXT is PA.07
1173 #define EXTMODULE_TX_GPIO_PinSource GPIO_PinSource7
1174 #define EXTMODULE_TIMER TIM8
1175 #define EXTMODULE_TIMER_TX_GPIO_AF GPIO_AF_TIM8 // TIM8_CH1N
1176 #define EXTMODULE_TIMER_CC_IRQn TIM8_CC_IRQn
1177 #define EXTMODULE_TIMER_CC_IRQHandler TIM8_CC_IRQHandler
1178 #define EXTMODULE_TIMER_DMA_CHANNEL DMA_Channel_7
1179 #define EXTMODULE_TIMER_DMA_STREAM DMA2_Stream1
1180 #define EXTMODULE_TIMER_DMA_STREAM_IRQn DMA2_Stream1_IRQn
1181 #define EXTMODULE_TIMER_DMA_STREAM_IRQHandler DMA2_Stream1_IRQHandler
1182 #define EXTMODULE_TIMER_DMA_FLAG_TC DMA_IT_TCIF1
1183 #define EXTMODULE_TIMER_OUTPUT_ENABLE TIM_CCER_CC1NE
1184 #define EXTMODULE_TIMER_OUTPUT_POLARITY TIM_CCER_CC1NP
1185 #define EXTMODULE_TIMER_FREQ (PERI2_FREQUENCY * TIMER_MULT_APB2)
1186 #elif defined(PCBX9DP) && PCBREV >= 2019
1187 #define EXTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_DMA2)
1188 #define EXTMODULE_RCC_APB2Periph (RCC_APB2Periph_TIM8 | RCC_APB2Periph_USART6)
1189 #define EXTMODULE_PWR_GPIO GPIOD
1190 #define EXTMODULE_PWR_GPIO_PIN GPIO_Pin_8 // PD.08
1191 #define EXTERNAL_MODULE_PWR_ON() GPIO_SetBits(EXTMODULE_PWR_GPIO, EXTMODULE_PWR_GPIO_PIN)
1192 #define EXTERNAL_MODULE_PWR_OFF() GPIO_ResetBits(EXTMODULE_PWR_GPIO, EXTMODULE_PWR_GPIO_PIN)
1193 #define IS_EXTERNAL_MODULE_ON() (GPIO_ReadInputDataBit(EXTMODULE_PWR_GPIO, EXTMODULE_PWR_GPIO_PIN) == Bit_SET)
1194 #define EXTMODULE_TX_GPIO GPIOC
1195 #define EXTMODULE_TX_GPIO_PIN GPIO_Pin_7 // PC.07
1196 #define EXTMODULE_TX_GPIO_PinSource GPIO_PinSource7
1197 #define EXTMODULE_TIMER TIM8
1198 #define EXTMODULE_TIMER_TX_GPIO_AF GPIO_AF_TIM8 // TIM8_CH2
1199 #define EXTMODULE_TIMER_CC_IRQn TIM8_CC_IRQn
1200 #define EXTMODULE_TIMER_CC_IRQHandler TIM8_CC_IRQHandler
1201 #define EXTMODULE_TIMER_DMA_CHANNEL DMA_Channel_7 // TIM8_UP
1202 #define EXTMODULE_TIMER_DMA_STREAM DMA2_Stream1 // TIM8_UP
1203 #define EXTMODULE_TIMER_DMA_STREAM_IRQn DMA2_Stream1_IRQn
1204 #define EXTMODULE_TIMER_DMA_STREAM_IRQHandler DMA2_Stream1_IRQHandler
1205 #define EXTMODULE_TIMER_DMA_FLAG_TC DMA_IT_TCIF1
1206 #define EXTMODULE_TIMER_OUTPUT_ENABLE TIM_CCER_CC2E
1207 #define EXTMODULE_TIMER_OUTPUT_POLARITY TIM_CCER_CC2NP
1208 #define EXTMODULE_TIMER_FREQ (PERI2_FREQUENCY * TIMER_MULT_APB2)
1209 #else
1210 #define EXTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_DMA2)
1211 #define EXTMODULE_RCC_APB2Periph RCC_APB2Periph_TIM8
1212 #define EXTMODULE_PWR_GPIO GPIOD
1213 #define EXTMODULE_PWR_GPIO_PIN GPIO_Pin_8 // PD.08
1214 #define EXTERNAL_MODULE_PWR_ON() GPIO_SetBits(EXTMODULE_PWR_GPIO, EXTMODULE_PWR_GPIO_PIN)
1215 #define EXTERNAL_MODULE_PWR_OFF() GPIO_ResetBits(EXTMODULE_PWR_GPIO, EXTMODULE_PWR_GPIO_PIN)
1216 #define IS_EXTERNAL_MODULE_ON() (GPIO_ReadInputDataBit(EXTMODULE_PWR_GPIO, EXTMODULE_PWR_GPIO_PIN) == Bit_SET)
1217 #define EXTMODULE_TX_GPIO GPIOA
1218 #define EXTMODULE_TX_GPIO_PIN GPIO_Pin_7 // PA.07
1219 #define EXTMODULE_TX_GPIO_PinSource GPIO_PinSource7
1220 #define EXTMODULE_TIMER TIM8
1221 #define EXTMODULE_TIMER_TX_GPIO_AF GPIO_AF_TIM8 // TIM8_CH1N
1222 #define EXTMODULE_TIMER_CC_IRQn TIM8_CC_IRQn
1223 #define EXTMODULE_TIMER_CC_IRQHandler TIM8_CC_IRQHandler
1224 #define EXTMODULE_TIMER_DMA_CHANNEL DMA_Channel_7 // TIM8_UP
1225 #define EXTMODULE_TIMER_DMA_STREAM DMA2_Stream1 // TIM8_UP
1226 #define EXTMODULE_TIMER_DMA_STREAM_IRQn DMA2_Stream1_IRQn
1227 #define EXTMODULE_TIMER_DMA_STREAM_IRQHandler DMA2_Stream1_IRQHandler
1228 #define EXTMODULE_TIMER_DMA_FLAG_TC DMA_IT_TCIF1
1229 #define EXTMODULE_TIMER_OUTPUT_ENABLE TIM_CCER_CC1NE
1230 #define EXTMODULE_TIMER_OUTPUT_POLARITY TIM_CCER_CC1NP
1231 #define EXTMODULE_TIMER_FREQ (PERI2_FREQUENCY * TIMER_MULT_APB2)
1232 #endif
1234 // Trainer Port
1235 #if defined(PCBXLITES) || defined(PCBX9LITE)
1236 // on these 2 radios the trainer port already uses DMA1_Stream6, we won't use the DMA
1237 #define TRAINER_RCC_AHB1Periph RCC_AHB1Periph_GPIOD
1238 #define TRAINER_RCC_APB1Periph RCC_APB1Periph_TIM4
1239 #define TRAINER_GPIO GPIOD
1240 #define TRAINER_IN_GPIO_PIN GPIO_Pin_13 // PD.13
1241 #define TRAINER_IN_GPIO_PinSource GPIO_PinSource13
1242 #define TRAINER_OUT_GPIO_PIN GPIO_Pin_12 // PD.12
1243 #define TRAINER_OUT_GPIO_PinSource GPIO_PinSource12
1244 #if defined(PCBX9LITE)
1245 #define TRAINER_DETECT_GPIO GPIOD
1246 #define TRAINER_DETECT_GPIO_PIN GPIO_Pin_11 // PD.11
1247 #endif
1248 #define TRAINER_TIMER TIM4
1249 #define TRAINER_GPIO_AF GPIO_AF_TIM4 // TIM4_CH1 (Out) + TIM4_CH2 (In)
1250 #define TRAINER_TIMER_IRQn TIM4_IRQn
1251 #define TRAINER_TIMER_IRQHandler TIM4_IRQHandler
1252 #define TRAINER_TIMER_FREQ (PERI1_FREQUENCY * TIMER_MULT_APB1)
1253 #define TRAINER_OUT_CCMR1 TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1PE;
1254 #define TRAINER_IN_CCMR1 TIM_CCMR1_IC2F_0 | TIM_CCMR1_IC2F_1 | TIM_CCMR1_CC2S_0;
1255 #define TRAINER_OUT_COUNTER_REGISTER TRAINER_TIMER->CCR1
1256 #define TRAINER_IN_COUNTER_REGISTER TRAINER_TIMER->CCR2
1257 #define TRAINER_SETUP_REGISTER TRAINER_TIMER->CCR3
1258 #define TRAINER_OUT_INTERRUPT_FLAG TIM_SR_CC3IF
1259 #define TRAINER_OUT_INTERRUPT_ENABLE TIM_DIER_CC3IE
1260 #define TRAINER_IN_INTERRUPT_ENABLE TIM_DIER_CC2IE
1261 #define TRAINER_IN_INTERRUPT_FLAG TIM_SR_CC2IF
1262 #define TRAINER_OUT_CCER TIM_CCER_CC1E
1263 #define TRAINER_CCER_POLARYTY TIM_CCER_CC1P
1264 #define TRAINER_IN_CCER TIM_CCER_CC2E
1265 #elif defined(PCBXLITE)
1266 #define TRAINER_TIMER TIM4
1267 #define TRAINER_RCC_AHB1Periph 0
1268 #define TRAINER_RCC_APB1Periph RCC_APB1Periph_TIM4
1269 #define TRAINER_TIMER_IRQn TIM4_IRQn
1270 #define TRAINER_TIMER_IRQHandler TIM4_IRQHandler
1271 #else
1272 #define TRAINER_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_DMA1)
1273 #define TRAINER_RCC_APB1Periph RCC_APB1Periph_TIM3
1274 #define TRAINER_GPIO GPIOC
1275 #define TRAINER_IN_GPIO_PIN GPIO_Pin_8 // PC.08
1276 #define TRAINER_IN_GPIO_PinSource GPIO_PinSource8
1277 #define TRAINER_OUT_GPIO_PIN GPIO_Pin_9 // PC.09
1278 #define TRAINER_OUT_GPIO_PinSource GPIO_PinSource9
1279 #define TRAINER_DETECT_GPIO GPIOA
1280 #define TRAINER_DETECT_GPIO_PIN GPIO_Pin_8 // PA.08
1281 #define TRAINER_TIMER TIM3
1282 #define TRAINER_TIMER_IRQn TIM3_IRQn
1283 #define TRAINER_GPIO_AF GPIO_AF_TIM3
1284 #define TRAINER_DMA DMA1
1285 #define TRAINER_DMA_CHANNEL DMA_Channel_5
1286 #define TRAINER_DMA_STREAM DMA1_Stream2
1287 #define TRAINER_DMA_IRQn DMA1_Stream2_IRQn
1288 #define TRAINER_DMA_IRQHandler DMA1_Stream2_IRQHandler
1289 #define TRAINER_DMA_FLAG_TC DMA_IT_TCIF2
1290 #define TRAINER_TIMER_IRQn TIM3_IRQn
1291 #define TRAINER_TIMER_IRQHandler TIM3_IRQHandler
1292 #define TRAINER_TIMER_FREQ (PERI1_FREQUENCY * TIMER_MULT_APB1)
1293 #define TRAINER_OUT_CCMR2 TIM_CCMR2_OC4M_1 | TIM_CCMR2_OC4M_2 | TIM_CCMR2_OC4PE;
1294 #define TRAINER_IN_CCMR2 TIM_CCMR2_IC3F_0 | TIM_CCMR2_IC3F_1 | TIM_CCMR2_CC3S_0;
1295 #define TRAINER_OUT_COUNTER_REGISTER TRAINER_TIMER->CCR4
1296 #define TRAINER_IN_COUNTER_REGISTER TRAINER_TIMER->CCR3
1297 #define TRAINER_SETUP_REGISTER TRAINER_TIMER->CCR1
1298 #define TRAINER_OUT_INTERRUPT_FLAG TIM_SR_CC1IF
1299 #define TRAINER_OUT_INTERRUPT_ENABLE TIM_DIER_CC1IE
1300 #define TRAINER_IN_INTERRUPT_ENABLE TIM_DIER_CC3IE
1301 #define TRAINER_IN_INTERRUPT_FLAG TIM_SR_CC3IF
1302 #define TRAINER_OUT_CCER TIM_CCER_CC4E
1303 #define TRAINER_IN_CCER TIM_CCER_CC3E
1304 #define TRAINER_CCER_POLARYTY TIM_CCER_CC4P
1305 #endif
1307 // Serial Port
1308 #if defined(PCBX7) || defined(PCBXLITE) || defined(PCBX9LITE) || (defined(PCBX9DP) && PCBREV >= 2019)
1309 #define AUX_SERIAL_RCC_AHB1Periph 0
1310 #define AUX_SERIAL_RCC_APB1Periph 0
1311 #else
1312 #define TRAINER_BATTERY_COMPARTMENT
1313 #define AUX_SERIAL_RCC_AHB1Periph (RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_DMA1)
1314 #define AUX_SERIAL_RCC_APB1Periph RCC_APB1Periph_USART3
1315 #define AUX_SERIAL_GPIO GPIOB
1316 #define AUX_SERIAL_GPIO_PIN_TX GPIO_Pin_10 // PB.10
1317 #define AUX_SERIAL_GPIO_PIN_RX GPIO_Pin_11 // PB.11
1318 #define AUX_SERIAL_GPIO_PinSource_TX GPIO_PinSource10
1319 #define AUX_SERIAL_GPIO_PinSource_RX GPIO_PinSource11
1320 #define AUX_SERIAL_GPIO_AF GPIO_AF_USART3
1321 #define AUX_SERIAL_USART USART3
1322 #define AUX_SERIAL_USART_IRQHandler USART3_IRQHandler
1323 #define AUX_SERIAL_USART_IRQn USART3_IRQn
1324 #define AUX_SERIAL_DMA_Stream_RX DMA1_Stream1
1325 #define AUX_SERIAL_DMA_Channel_RX DMA_Channel_4
1326 #endif
1328 // Telemetry
1329 #define TELEMETRY_RCC_AHB1Periph (RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_DMA1)
1330 #define TELEMETRY_RCC_APB1Periph RCC_APB1Periph_USART2
1331 #define TELEMETRY_DIR_GPIO GPIOD
1332 #define TELEMETRY_DIR_GPIO_PIN GPIO_Pin_4 // PD.04
1333 #if defined(PCBXLITE) || defined(PCBX9LITE) || (defined(PCBX9DP) && PCBREV >= 2019) || defined(PCBX7ACCESS)
1334 #define TELEMETRY_DIR_OUTPUT() TELEMETRY_DIR_GPIO->BSRRH = TELEMETRY_DIR_GPIO_PIN
1335 #define TELEMETRY_DIR_INPUT() TELEMETRY_DIR_GPIO->BSRRL = TELEMETRY_DIR_GPIO_PIN
1336 #else
1337 #define TELEMETRY_DIR_OUTPUT() TELEMETRY_DIR_GPIO->BSRRL = TELEMETRY_DIR_GPIO_PIN
1338 #define TELEMETRY_DIR_INPUT() TELEMETRY_DIR_GPIO->BSRRH = TELEMETRY_DIR_GPIO_PIN
1339 #endif
1340 #define TELEMETRY_GPIO GPIOD
1341 #define TELEMETRY_TX_GPIO_PIN GPIO_Pin_5 // PD.05
1342 #define TELEMETRY_RX_GPIO_PIN GPIO_Pin_6 // PD.06
1343 #define TELEMETRY_GPIO_PinSource_TX GPIO_PinSource5
1344 #define TELEMETRY_GPIO_PinSource_RX GPIO_PinSource6
1345 #define TELEMETRY_GPIO_AF GPIO_AF_USART2
1346 #define TELEMETRY_USART USART2
1347 #define TELEMETRY_DMA_Stream_TX DMA1_Stream6
1348 #define TELEMETRY_DMA_Channel_TX DMA_Channel_4
1349 #define TELEMETRY_DMA_TX_Stream_IRQ DMA1_Stream6_IRQn
1350 #define TELEMETRY_DMA_TX_IRQHandler DMA1_Stream6_IRQHandler
1351 #define TELEMETRY_DMA_TX_FLAG_TC DMA_IT_TCIF6
1352 #define TELEMETRY_USART_IRQHandler USART2_IRQHandler
1353 #define TELEMETRY_USART_IRQn USART2_IRQn
1354 #define TELEMETRY_EXTI_PortSource EXTI_PortSourceGPIOD
1355 #define TELEMETRY_EXTI_PinSource EXTI_PinSource6
1356 #define TELEMETRY_EXTI_LINE EXTI_Line6
1357 #define TELEMETRY_EXTI_IRQn EXTI9_5_IRQn
1358 #define TELEMETRY_EXTI_TRIGGER EXTI_Trigger_Rising
1360 #if defined(RADIO_X7) || defined(RADIO_X7ACCESS)
1361 #define TELEMETRY_EXTI_REUSE_INTERRUPT_ROTARY_ENCODER
1362 #elif defined(PCBXLITE) || defined(PCBX9LITE) || (defined(PCBX9DP) && PCBREV >= 2019)
1363 #define TELEMETRY_EXTI_IRQHandler EXTI9_5_IRQHandler
1364 #else
1365 #define TELEMETRY_EXTI_REUSE_INTERRUPT_INTMODULE_HEARTBEAT
1366 #endif
1368 #define TELEMETRY_TIMER TIM11
1369 #define TELEMETRY_TIMER_IRQn TIM1_TRG_COM_TIM11_IRQn
1370 #define TELEMETRY_TIMER_IRQHandler TIM1_TRG_COM_TIM11_IRQHandler
1372 // PCBREV
1373 #if defined(PCBX7)
1374 #define PCBREV_RCC_AHB1Periph RCC_AHB1Periph_GPIOA
1375 #define PCBREV_GPIO GPIOA
1376 #define PCBREV_GPIO_PIN GPIO_Pin_14 // PA.14
1377 #else
1378 #define PCBREV_RCC_AHB1Periph 0
1379 #endif
1381 // S.Port update connector
1382 #if defined(PCBXLITE)
1383 #define SPORT_MAX_BAUDRATE 250000 // not tested
1384 #define SPORT_UPDATE_RCC_AHB1Periph RCC_AHB1Periph_GPIOD
1385 #define SPORT_UPDATE_PWR_GPIO GPIOD
1386 #define SPORT_UPDATE_PWR_GPIO_PIN GPIO_Pin_8 // PD.08
1387 #define GPIO_SPORT_UPDATE_PWR_GPIO_ON GPIO_SetBits
1388 #define GPIO_SPORT_UPDATE_PWR_GPIO_OFF GPIO_ResetBits
1389 #elif defined(PCBX7ACCESS)
1390 #define SPORT_MAX_BAUDRATE 400000
1391 #define SPORT_UPDATE_RCC_AHB1Periph RCC_AHB1Periph_GPIOB
1392 #define SPORT_UPDATE_PWR_GPIO GPIOB
1393 #define SPORT_UPDATE_PWR_GPIO_PIN GPIO_Pin_3 // PB.03
1394 #define GPIO_SPORT_UPDATE_PWR_GPIO_ON GPIO_SetBits
1395 #define GPIO_SPORT_UPDATE_PWR_GPIO_OFF GPIO_ResetBits
1396 #elif defined(PCBX7)
1397 #define SPORT_MAX_BAUDRATE 250000 // < 400000
1398 #define SPORT_UPDATE_RCC_AHB1Periph RCC_AHB1Periph_GPIOB
1399 #define SPORT_UPDATE_PWR_GPIO GPIOB
1400 #define SPORT_UPDATE_PWR_GPIO_PIN GPIO_Pin_2 // PB.02
1401 #define GPIO_SPORT_UPDATE_PWR_GPIO_ON GPIO_SetBits
1402 #define GPIO_SPORT_UPDATE_PWR_GPIO_OFF GPIO_ResetBits
1403 #elif defined(PCBX9LITE)
1404 #define SPORT_MAX_BAUDRATE 250000 // not tested
1405 #define SPORT_UPDATE_RCC_AHB1Periph RCC_AHB1Periph_GPIOE
1406 #define SPORT_UPDATE_PWR_GPIO GPIOE
1407 #define SPORT_UPDATE_PWR_GPIO_PIN GPIO_Pin_15 // PE.15
1408 #define GPIO_SPORT_UPDATE_PWR_GPIO_ON GPIO_SetBits
1409 #define GPIO_SPORT_UPDATE_PWR_GPIO_OFF GPIO_ResetBits
1410 #elif defined(PCBX9DP) && PCBREV >= 2019
1411 #define SPORT_MAX_BAUDRATE 400000
1412 #define SPORT_UPDATE_RCC_AHB1Periph RCC_AHB1Periph_GPIOA
1413 #define SPORT_UPDATE_PWR_GPIO GPIOA
1414 #define SPORT_UPDATE_PWR_GPIO_PIN GPIO_Pin_14 // PA.14
1415 #define GPIO_SPORT_UPDATE_PWR_GPIO_ON GPIO_SetBits
1416 #define GPIO_SPORT_UPDATE_PWR_GPIO_OFF GPIO_ResetBits
1417 #else
1418 #define SPORT_MAX_BAUDRATE 400000
1419 #define SPORT_UPDATE_RCC_AHB1Periph 0
1420 #endif
1422 // Heartbeat for iXJT / ISRM synchro
1423 #define INTMODULE_HEARTBEAT_TRIGGER EXTI_Trigger_Falling
1424 #if defined(PCBXLITE)
1425 #define INTMODULE_HEARTBEAT
1426 #define INTMODULE_HEARTBEAT_RCC_AHB1Periph RCC_AHB1Periph_GPIOD
1427 #define INTMODULE_HEARTBEAT_GPIO GPIOD
1428 #define INTMODULE_HEARTBEAT_GPIO_PIN GPIO_Pin_15
1429 #define INTMODULE_HEARTBEAT_EXTI_PortSource EXTI_PortSourceGPIOD
1430 #define INTMODULE_HEARTBEAT_EXTI_PinSource GPIO_PinSource15
1431 #define INTMODULE_HEARTBEAT_EXTI_LINE EXTI_Line15
1432 #define INTMODULE_HEARTBEAT_EXTI_IRQn EXTI15_10_IRQn
1433 #define INTMODULE_HEARTBEAT_EXTI_IRQHandler EXTI15_10_IRQHandler
1434 #elif defined(PCBX9LITE)
1435 // #define INTMODULE_HEARTBEAT
1436 #define INTMODULE_HEARTBEAT_RCC_AHB1Periph 0 // RCC_AHB1Periph_GPIOC
1437 // #define INTMODULE_HEARTBEAT_GPIO GPIOC
1438 // #define INTMODULE_HEARTBEAT_GPIO_PIN GPIO_Pin_9
1439 // #define INTMODULE_HEARTBEAT_EXTI_PortSource EXTI_PortSourceGPIOC
1440 // #define INTMODULE_HEARTBEAT_EXTI_PinSource GPIO_PinSource9
1441 // #define INTMODULE_HEARTBEAT_EXTI_LINE EXTI_Line9
1442 // #define INTMODULE_HEARTBEAT_EXTI_IRQn EXTI9_5_IRQn
1443 // #define INTMODULE_HEARTBEAT_EXTI_IRQHandler EXTI9_5_IRQHandler
1444 #elif defined(RADIO_X7ACCESS)
1445 #define INTMODULE_HEARTBEAT
1446 #define INTMODULE_HEARTBEAT_REUSE_INTERRUPT_ROTARY_ENCODER
1447 #define INTMODULE_HEARTBEAT_RCC_AHB1Periph RCC_AHB1Periph_GPIOA
1448 #define INTMODULE_HEARTBEAT_GPIO GPIOA
1449 #define INTMODULE_HEARTBEAT_GPIO_PIN GPIO_Pin_7 // PA.07
1450 #define INTMODULE_HEARTBEAT_EXTI_PortSource EXTI_PortSourceGPIOA
1451 #define INTMODULE_HEARTBEAT_EXTI_PinSource GPIO_PinSource7
1452 #define INTMODULE_HEARTBEAT_EXTI_LINE EXTI_Line7
1453 #define INTMODULE_HEARTBEAT_EXTI_IRQn EXTI9_5_IRQn
1454 #elif defined(RADIO_X7)
1455 #define INTMODULE_HEARTBEAT
1456 #define INTMODULE_HEARTBEAT_REUSE_INTERRUPT_ROTARY_ENCODER
1457 #define INTMODULE_HEARTBEAT_RCC_AHB1Periph RCC_AHB1Periph_GPIOC
1458 #define INTMODULE_HEARTBEAT_GPIO GPIOC
1459 #define INTMODULE_HEARTBEAT_GPIO_PIN GPIO_Pin_7 // PC.07
1460 #define INTMODULE_HEARTBEAT_EXTI_PortSource EXTI_PortSourceGPIOC
1461 #define INTMODULE_HEARTBEAT_EXTI_PinSource GPIO_PinSource7
1462 #define INTMODULE_HEARTBEAT_EXTI_LINE EXTI_Line7
1463 #define INTMODULE_HEARTBEAT_EXTI_IRQn EXTI9_5_IRQn
1464 #elif defined(PCBX9DP) && PCBREV >= 2019
1465 #define INTMODULE_HEARTBEAT
1466 #define INTMODULE_HEARTBEAT_RCC_AHB1Periph RCC_AHB1Periph_GPIOB
1467 #define INTMODULE_HEARTBEAT_GPIO GPIOB
1468 #define INTMODULE_HEARTBEAT_GPIO_PIN GPIO_Pin_1 // PB.01
1469 #define INTMODULE_HEARTBEAT_EXTI_PortSource EXTI_PortSourceGPIOB
1470 #define INTMODULE_HEARTBEAT_EXTI_PinSource GPIO_PinSource1
1471 #define INTMODULE_HEARTBEAT_EXTI_LINE EXTI_Line1
1472 #define INTMODULE_HEARTBEAT_EXTI_IRQn EXTI1_IRQn
1473 #define INTMODULE_HEARTBEAT_EXTI_IRQHandler EXTI1_IRQHandler
1474 #else
1475 #define INTMODULE_HEARTBEAT
1476 #define INTMODULE_HEARTBEAT_RCC_AHB1Periph RCC_AHB1Periph_GPIOC
1477 #define INTMODULE_HEARTBEAT_GPIO GPIOC
1478 #define INTMODULE_HEARTBEAT_GPIO_PIN GPIO_Pin_7
1479 #define INTMODULE_HEARTBEAT_EXTI_PortSource EXTI_PortSourceGPIOC
1480 #define INTMODULE_HEARTBEAT_EXTI_PinSource GPIO_PinSource7
1481 #define INTMODULE_HEARTBEAT_EXTI_LINE EXTI_Line7
1482 #define INTMODULE_HEARTBEAT_EXTI_IRQn EXTI9_5_IRQn
1483 #define INTMODULE_HEARTBEAT_EXTI_IRQHandler EXTI9_5_IRQHandler
1484 #endif
1486 #if defined(PCBX9LITE)
1487 #define EXTMODULE_HEARTBEAT_RCC_AHB1Periph RCC_AHB1Periph_GPIOD
1488 #define EXTMODULE_HEARTBEAT_GPIO GPIOD
1489 #define EXTMODULE_HEARTBEAT_GPIO_PIN GPIO_Pin_15
1490 #define EXTMODULE_HEARTBEAT_EXTI_PortSource EXTI_PortSourceGPIOD
1491 #define EXTMODULE_HEARTBEAT_EXTI_PinSource GPIO_PinSource15
1492 #define EXTMODULE_HEARTBEAT_EXTI_LINE EXTI_Line15
1493 #define EXTMODULE_HEARTBEAT_EXTI_IRQn EXTI15_10_IRQn
1494 #define EXTMODULE_HEARTBEAT_EXTI_IRQHandler EXTI15_10_IRQHandler
1495 #endif
1497 // Trainer / Trainee from the module bay
1498 #if defined(PCBX9LITE) || defined(PCBXLITE)
1499 #define TRAINER_MODULE_CPPM
1500 #define TRAINER_MODULE_SBUS
1501 #define TRAINER_MODULE_RCC_AHB1Periph 0
1502 #define TRAINER_MODULE_RCC_APB1Periph RCC_APB1Periph_TIM3
1503 #define TRAINER_MODULE_RCC_APB2Periph 0
1504 #define TRAINER_MODULE_CPPM_GPIO EXTMODULE_USART_GPIO
1505 #define TRAINER_MODULE_CPPM_GPIO_PIN EXTMODULE_RX_GPIO_PIN
1506 #define TRAINER_MODULE_CPPM_GPIO_PinSource EXTMODULE_RX_GPIO_PinSource
1507 #define TRAINER_MODULE_CPPM_GPIO_AF GPIO_AF_TIM3
1508 #define TRAINER_MODULE_CPPM_TIMER TIM3
1509 #define TRAINER_MODULE_CPPM_COUNTER_REGISTER TRAINER_MODULE_CPPM_TIMER->CCR2
1510 #define TRAINER_MODULE_CPPM_INTERRUPT_ENABLE TIM_DIER_CC2IE
1511 #define TRAINER_MODULE_CPPM_INTERRUPT_FLAG TIM_SR_CC2IF
1512 #define TRAINER_MODULE_CPPM_CCMR1 (TIM_CCMR1_IC2F_0 | TIM_CCMR1_IC2F_1 | TIM_CCMR1_CC2S_0)
1513 #define TRAINER_MODULE_CPPM_CCER TIM_CCER_CC2E
1514 #define TRAINER_MODULE_CPPM_TIMER_IRQn TIM3_IRQn
1515 #define TRAINER_MODULE_CPPM_TIMER_IRQHandler TIM3_IRQHandler
1516 #define TRAINER_MODULE_SBUS_GPIO EXTMODULE_USART_GPIO
1517 #define TRAINER_MODULE_SBUS_GPIO_PIN EXTMODULE_RX_GPIO_PIN
1518 #define TRAINER_MODULE_SBUS_GPIO_AF EXTMODULE_USART_GPIO_AF
1519 #define TRAINER_MODULE_SBUS_USART EXTMODULE_USART
1520 #define TRAINER_MODULE_SBUS_GPIO_PinSource EXTMODULE_RX_GPIO_PinSource
1521 #define TRAINER_MODULE_SBUS_DMA_STREAM EXTMODULE_USART_RX_DMA_STREAM
1522 #define TRAINER_MODULE_SBUS_DMA_CHANNEL EXTMODULE_USART_RX_DMA_CHANNEL
1523 #else
1524 #define TRAINER_MODULE_CPPM
1525 #define TRAINER_MODULE_SBUS
1526 #define TRAINER_MODULE_RCC_AHB1Periph RCC_AHB1Periph_GPIOC
1527 #define TRAINER_MODULE_RCC_APB2Periph RCC_APB2Periph_USART6
1528 #define TRAINER_MODULE_RCC_APB1Periph RCC_APB1Periph_TIM3
1529 #define TRAINER_MODULE_CPPM_TIMER TRAINER_TIMER
1530 #define TRAINER_MODULE_CPPM_GPIO INTMODULE_HEARTBEAT_GPIO
1531 #define TRAINER_MODULE_CPPM_GPIO_PIN INTMODULE_HEARTBEAT_GPIO_PIN
1532 #define TRAINER_MODULE_CPPM_GPIO_PinSource INTMODULE_HEARTBEAT_EXTI_PinSource
1533 #define TRAINER_MODULE_CPPM_INTERRUPT_ENABLE TIM_DIER_CC2IE
1534 #define TRAINER_MODULE_CPPM_INTERRUPT_FLAG TIM_SR_CC2IF
1535 #define TRAINER_MODULE_CPPM_CCMR1 (TIM_CCMR1_IC2F_0 | TIM_CCMR1_IC2F_1 | TIM_CCMR1_CC2S_0)
1536 #define TRAINER_MODULE_CPPM_CCER TIM_CCER_CC2E
1537 #define TRAINER_MODULE_CPPM_COUNTER_REGISTER TRAINER_TIMER->CCR2
1538 #define TRAINER_MODULE_CPPM_TIMER_IRQn TRAINER_TIMER_IRQn
1539 #define TRAINER_MODULE_CPPM_GPIO_AF GPIO_AF_TIM3
1540 #define TRAINER_MODULE_SBUS_GPIO_AF GPIO_AF_USART6
1541 #define TRAINER_MODULE_SBUS_USART USART6
1542 #define TRAINER_MODULE_SBUS_GPIO INTMODULE_HEARTBEAT_GPIO
1543 #define TRAINER_MODULE_SBUS_GPIO_PIN INTMODULE_HEARTBEAT_GPIO_PIN
1544 #define TRAINER_MODULE_SBUS_GPIO_PinSource INTMODULE_HEARTBEAT_EXTI_PinSource
1545 #define TRAINER_MODULE_SBUS_DMA_STREAM DMA2_Stream1
1546 #define TRAINER_MODULE_SBUS_DMA_CHANNEL DMA_Channel_5
1547 #endif
1549 // USB
1550 #define USB_RCC_AHB1Periph_GPIO RCC_AHB1Periph_GPIOA
1551 #define USB_GPIO GPIOA
1552 #define USB_GPIO_PIN_VBUS GPIO_Pin_9 // PA.09
1553 #define USB_GPIO_PIN_DM GPIO_Pin_11 // PA.11
1554 #define USB_GPIO_PIN_DP GPIO_Pin_12 // PA.12
1555 #define USB_GPIO_PinSource_DM GPIO_PinSource11
1556 #define USB_GPIO_PinSource_DP GPIO_PinSource12
1557 #define USB_GPIO_AF GPIO_AF_OTG1_FS
1559 // BackLight
1560 #if defined(PCBX9E)
1561 #define BACKLIGHT_RCC_AHB1Periph RCC_AHB1Periph_GPIOE
1562 #define BACKLIGHT_RCC_APB1Periph 0
1563 #define BACKLIGHT_RCC_APB2Periph RCC_APB2Periph_TIM9
1564 #define BACKLIGHT_TIMER_FREQ (PERI2_FREQUENCY * TIMER_MULT_APB2)
1565 #define BACKLIGHT_TIMER TIM9
1566 #define BACKLIGHT_GPIO GPIOE
1567 #define BACKLIGHT_GPIO_PIN_1 GPIO_Pin_6 // PE.06
1568 #define BACKLIGHT_GPIO_PIN_2 GPIO_Pin_5 // PE.05
1569 #define BACKLIGHT_GPIO_PinSource_1 GPIO_PinSource6
1570 #define BACKLIGHT_GPIO_PinSource_2 GPIO_PinSource5
1571 #define BACKLIGHT_GPIO_AF_1 GPIO_AF_TIM9
1572 #define BACKLIGHT_GPIO_AF_2 GPIO_AF_TIM9
1573 #elif defined(PCBX9DP)
1574 #define BACKLIGHT_RCC_AHB1Periph RCC_AHB1Periph_GPIOD
1575 #define BACKLIGHT_RCC_APB1Periph RCC_APB1Periph_TIM4
1576 #define BACKLIGHT_RCC_APB2Periph 0
1577 #define BACKLIGHT_TIMER_FREQ (PERI1_FREQUENCY * TIMER_MULT_APB1)
1578 #define BACKLIGHT_TIMER TIM4
1579 #define BACKLIGHT_GPIO GPIOD
1580 #define BACKLIGHT_GPIO_PIN_1 GPIO_Pin_15 // PD.15
1581 #define BACKLIGHT_GPIO_PIN_2 GPIO_Pin_13 // PD.13
1582 #define BACKLIGHT_GPIO_PinSource_1 GPIO_PinSource15
1583 #define BACKLIGHT_GPIO_PinSource_2 GPIO_PinSource13
1584 #define BACKLIGHT_GPIO_AF_1 GPIO_AF_TIM4
1585 #define BACKLIGHT_GPIO_AF_2 GPIO_AF_TIM4
1586 #elif defined(PCBXLITES) || defined(PCBX9LITE)
1587 #define BACKLIGHT_RCC_AHB1Periph RCC_AHB1Periph_GPIOA
1588 #define BACKLIGHT_RCC_APB1Periph 0
1589 #define BACKLIGHT_RCC_APB2Periph RCC_APB2Periph_TIM1
1590 #define BACKLIGHT_TIMER_FREQ (PERI2_FREQUENCY * TIMER_MULT_APB2)
1591 #define BACKLIGHT_TIMER TIM1
1592 #define BACKLIGHT_GPIO GPIOA
1593 #define BACKLIGHT_GPIO_PIN GPIO_Pin_10 // PA.10
1594 #define BACKLIGHT_GPIO_PinSource GPIO_PinSource10
1595 #define BACKLIGHT_GPIO_AF GPIO_AF_TIM1
1596 #define BACKLIGHT_CCMR2 TIM_CCMR2_OC3M_1 | TIM_CCMR2_OC3M_2 // Channel 3, PWM
1597 #define BACKLIGHT_CCER TIM_CCER_CC3E
1598 #define BACKLIGHT_COUNTER_REGISTER BACKLIGHT_TIMER->CCR3
1599 #elif defined(PCBXLITE)
1600 #define BACKLIGHT_RCC_AHB1Periph RCC_AHB1Periph_GPIOA
1601 #define BACKLIGHT_RCC_APB1Periph 0
1602 #define BACKLIGHT_RCC_APB2Periph RCC_APB2Periph_TIM1
1603 #define BACKLIGHT_TIMER_FREQ (PERI2_FREQUENCY * TIMER_MULT_APB2)
1604 #define BACKLIGHT_TIMER TIM1
1605 #define BACKLIGHT_GPIO GPIOA
1606 #define BACKLIGHT_GPIO_PIN GPIO_Pin_8 // PA.08
1607 #define BACKLIGHT_GPIO_PinSource GPIO_PinSource8
1608 #define BACKLIGHT_GPIO_AF GPIO_AF_TIM1
1609 #define BACKLIGHT_CCMR1 TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2 // Channel 1, PWM
1610 #define BACKLIGHT_CCER TIM_CCER_CC1E
1611 #define BACKLIGHT_COUNTER_REGISTER BACKLIGHT_TIMER->CCR1
1612 #elif defined(PCBX7)
1613 #define BACKLIGHT_RCC_AHB1Periph RCC_AHB1Periph_GPIOD
1614 #define BACKLIGHT_RCC_APB1Periph RCC_APB1Periph_TIM4
1615 #define BACKLIGHT_RCC_APB2Periph 0
1616 #define BACKLIGHT_TIMER_FREQ (PERI1_FREQUENCY * TIMER_MULT_APB1)
1617 #define BACKLIGHT_TIMER TIM4
1618 #define BACKLIGHT_GPIO GPIOD
1619 #define BACKLIGHT_GPIO_PIN GPIO_Pin_13 // PD.13
1620 #define BACKLIGHT_GPIO_PinSource GPIO_PinSource13
1621 #define BACKLIGHT_GPIO_AF GPIO_AF_TIM4
1622 #define BACKLIGHT_CCMR1 TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2 // Channel2, PWM
1623 #define BACKLIGHT_CCER TIM_CCER_CC2E
1624 #define BACKLIGHT_COUNTER_REGISTER BACKLIGHT_TIMER->CCR2
1625 #else
1626 #define BACKLIGHT_RCC_AHB1Periph RCC_AHB1Periph_GPIOB
1627 #define BACKLIGHT_RCC_APB1Periph 0
1628 #define BACKLIGHT_RCC_APB2Periph RCC_APB2Periph_TIM10
1629 #define BACKLIGHT_TIMER_FREQ (PERI2_FREQUENCY * TIMER_MULT_APB2)
1630 #define BACKLIGHT_TIMER TIM10
1631 #define BACKLIGHT_GPIO GPIOB
1632 #define BACKLIGHT_GPIO_PIN GPIO_Pin_8 // PB.08
1633 #define BACKLIGHT_GPIO_PinSource GPIO_PinSource8
1634 #define BACKLIGHT_GPIO_AF GPIO_AF_TIM10
1635 #endif
1637 // LCD driver
1638 #if defined(PCBX9E)
1639 #define LCD_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_DMA1)
1640 #define LCD_RCC_APB1Periph RCC_APB1Periph_SPI3
1641 #define LCD_SPI_GPIO GPIOC
1642 #define LCD_MOSI_GPIO_PIN GPIO_Pin_12 // PC.12
1643 #define LCD_MOSI_GPIO_PinSource GPIO_PinSource12
1644 #define LCD_CLK_GPIO_PIN GPIO_Pin_10 // PC.10
1645 #define LCD_CLK_GPIO_PinSource GPIO_PinSource10
1646 #define LCD_A0_GPIO_PIN GPIO_Pin_11 // PC.11
1647 #define LCD_NCS_GPIO GPIOA
1648 #define LCD_NCS_GPIO_PIN GPIO_Pin_15 // PA.15
1649 #define LCD_RST_GPIO GPIOD
1650 #define LCD_RST_GPIO_PIN GPIO_Pin_15 // PD.15
1651 #define LCD_DMA DMA1
1652 #define LCD_DMA_Stream DMA1_Stream7
1653 #define LCD_DMA_Stream_IRQn DMA1_Stream7_IRQn
1654 #define LCD_DMA_Stream_IRQHandler DMA1_Stream7_IRQHandler
1655 #define LCD_DMA_FLAGS (DMA_HIFCR_CTCIF7 | DMA_HIFCR_CHTIF7 | DMA_HIFCR_CTEIF7 | DMA_HIFCR_CDMEIF7 | DMA_HIFCR_CFEIF7)
1656 #define LCD_DMA_FLAG_INT DMA_HIFCR_CTCIF7
1657 #define LCD_SPI SPI3
1658 #define LCD_GPIO_AF GPIO_AF_SPI3
1659 #elif defined(PCBXLITE) || defined(PCBX9LITE)
1660 #define LCD_RCC_AHB1Periph (RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_DMA1)
1661 #define LCD_RCC_APB1Periph RCC_APB1Periph_SPI3
1662 #define LCD_SPI_GPIO GPIOC
1663 #define LCD_MOSI_GPIO_PIN GPIO_Pin_12 // PC.12
1664 #define LCD_MOSI_GPIO_PinSource GPIO_PinSource12
1665 #define LCD_CLK_GPIO_PIN GPIO_Pin_10 // PC.10
1666 #define LCD_CLK_GPIO_PinSource GPIO_PinSource10
1667 #define LCD_A0_GPIO_PIN GPIO_Pin_11 // PC.11
1668 #define LCD_NCS_GPIO GPIOD
1669 #define LCD_NCS_GPIO_PIN GPIO_Pin_3 // PD.03
1670 #define LCD_RST_GPIO GPIOD
1671 #define LCD_RST_GPIO_PIN GPIO_Pin_2 // PD.02
1672 #define LCD_DMA DMA1
1673 #define LCD_DMA_Stream DMA1_Stream7
1674 #define LCD_DMA_Stream_IRQn DMA1_Stream7_IRQn
1675 #define LCD_DMA_Stream_IRQHandler DMA1_Stream7_IRQHandler
1676 #define LCD_DMA_FLAGS (DMA_HIFCR_CTCIF7 | DMA_HIFCR_CHTIF7 | DMA_HIFCR_CTEIF7 | DMA_HIFCR_CDMEIF7 | DMA_HIFCR_CFEIF7)
1677 #define LCD_DMA_FLAG_INT DMA_HIFCR_CTCIF7
1678 #define LCD_SPI SPI3
1679 #define LCD_GPIO_AF GPIO_AF_SPI3
1680 #elif defined(PCBX9DP) || defined(PCBX7)
1681 #define LCD_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_DMA1)
1682 #define LCD_RCC_APB1Periph RCC_APB1Periph_SPI3
1683 #define LCD_SPI_GPIO GPIOC
1684 #define LCD_MOSI_GPIO_PIN GPIO_Pin_12 // PC.12
1685 #define LCD_MOSI_GPIO_PinSource GPIO_PinSource12
1686 #define LCD_CLK_GPIO_PIN GPIO_Pin_10 // PC.10
1687 #define LCD_CLK_GPIO_PinSource GPIO_PinSource10
1688 #define LCD_A0_GPIO_PIN GPIO_Pin_11 // PC.11
1689 #define LCD_NCS_GPIO GPIOA
1690 #define LCD_NCS_GPIO_PIN GPIO_Pin_15 // PA.15
1691 #define LCD_RST_GPIO GPIOD
1692 #define LCD_RST_GPIO_PIN GPIO_Pin_12 // PD.12
1693 #define LCD_DMA DMA1
1694 #define LCD_DMA_Stream DMA1_Stream7
1695 #define LCD_DMA_Stream_IRQn DMA1_Stream7_IRQn
1696 #define LCD_DMA_Stream_IRQHandler DMA1_Stream7_IRQHandler
1697 #define LCD_DMA_FLAGS (DMA_HIFCR_CTCIF7 | DMA_HIFCR_CHTIF7 | DMA_HIFCR_CTEIF7 | DMA_HIFCR_CDMEIF7 | DMA_HIFCR_CFEIF7)
1698 #define LCD_DMA_FLAG_INT DMA_HIFCR_CTCIF7
1699 #define LCD_SPI SPI3
1700 #define LCD_GPIO_AF GPIO_AF_SPI3
1701 #else
1702 #define LCD_RCC_AHB1Periph RCC_AHB1Periph_GPIOD
1703 #define LCD_RCC_APB1Periph 0
1704 #define LCD_SPI_GPIO GPIOD
1705 #define LCD_MOSI_GPIO_PIN GPIO_Pin_10 // PD.10
1706 #define LCD_CLK_GPIO_PIN GPIO_Pin_11 // PD.11
1707 #define LCD_A0_GPIO_PIN GPIO_Pin_13 // PD.13
1708 #define LCD_NCS_GPIO GPIOD
1709 #define LCD_NCS_GPIO_PIN GPIO_Pin_14 // PD.14
1710 #define LCD_RST_GPIO GPIOD
1711 #define LCD_RST_GPIO_PIN GPIO_Pin_12 // PD.12
1712 #endif
1713 #define LCD_RCC_APB2Periph 0
1715 // I2C Bus: EEPROM and CAT5137 digital pot for volume control
1716 #define I2C_RCC_APB1Periph RCC_APB1Periph_I2C1
1717 #define I2C I2C1
1718 #define I2C_GPIO_AF GPIO_AF_I2C1
1719 #if defined(PCBXLITE) || defined(PCBX9LITE)
1720 #define I2C_RCC_AHB1Periph (RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOD)
1721 #define I2C_SPI_GPIO GPIOB
1722 #define I2C_SDA_GPIO_PIN GPIO_Pin_9 // PB.09
1723 #define I2C_SCL_GPIO_PIN GPIO_Pin_8 // PB.08
1724 #define I2C_WP_GPIO GPIOD
1725 #define I2C_WP_GPIO_PIN GPIO_Pin_7 // PD.07
1726 #define I2C_SCL_GPIO_PinSource GPIO_PinSource8
1727 #define I2C_SDA_GPIO_PinSource GPIO_PinSource9
1728 #elif defined(PCBX7ACCESS)
1729 #define I2C_RCC_AHB1Periph RCC_AHB1Periph_GPIOB
1730 #define I2C_SPI_GPIO GPIOB
1731 #define I2C_SDA_GPIO_PIN GPIO_Pin_9 // PB.09
1732 #define I2C_SCL_GPIO_PIN GPIO_Pin_8 // PB.08
1733 #define I2C_WP_GPIO GPIOB
1734 #define I2C_WP_GPIO_PIN GPIO_Pin_5 // PB.05
1735 #define I2C_SDA_GPIO_PinSource GPIO_PinSource9
1736 #define I2C_SCL_GPIO_PinSource GPIO_PinSource8
1737 #elif defined(PCBX9DP) && PCBREV >= 2019
1738 #define I2C_RCC_AHB1Periph (RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOF)
1739 #define I2C_SPI_GPIO GPIOB
1740 #define I2C_SDA_GPIO_PIN GPIO_Pin_9 // PB.09
1741 #define I2C_SCL_GPIO_PIN GPIO_Pin_8 // PB.08
1742 #define I2C_WP_GPIO GPIOF
1743 #define I2C_WP_GPIO_PIN GPIO_Pin_0 // PF.00
1744 #define I2C_SCL_GPIO_PinSource GPIO_PinSource8
1745 #define I2C_SDA_GPIO_PinSource GPIO_PinSource9
1746 #else
1747 #define I2C_RCC_AHB1Periph RCC_AHB1Periph_GPIOB
1748 #define I2C_SPI_GPIO GPIOB
1749 #define I2C_SCL_GPIO_PIN GPIO_Pin_6 // PB.06
1750 #define I2C_SDA_GPIO_PIN GPIO_Pin_7 // PB.07
1751 #define I2C_WP_GPIO GPIOB
1752 #define I2C_WP_GPIO_PIN GPIO_Pin_9 // PB.09
1753 #define I2C_SCL_GPIO_PinSource GPIO_PinSource6
1754 #define I2C_SDA_GPIO_PinSource GPIO_PinSource7
1755 #define I2C_ADDRESS_VOLUME 0x5C
1756 #endif
1757 #define I2C_SPEED 400000
1758 #define I2C_ADDRESS_EEPROM 0xA2
1759 #define I2C_FLASH_PAGESIZE 64
1761 // Second I2C Bus: IMU
1762 #if defined(PCBXLITES)
1763 #define GYRO_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOC)
1764 #define GYRO_RCC_APB1Periph RCC_APB1Periph_I2C3
1765 #define I2CX I2C3
1766 #define I2CX_SCL_GPIO GPIOA
1767 #define I2CX_SCL_GPIO_PIN GPIO_Pin_8 // PA.08
1768 #define I2CX_SDA_GPIO GPIOC
1769 #define I2CX_SDA_GPIO_PIN GPIO_Pin_9 // PC.09
1770 #define I2CX_GPIO_AF GPIO_AF_I2C3
1771 #define I2CX_SCL_GPIO_PinSource GPIO_PinSource8
1772 #define I2CX_SDA_GPIO_PinSource GPIO_PinSource9
1773 #define I2CX_SPEED 400000
1774 #else
1775 #define GYRO_RCC_AHB1Periph 0
1776 #define GYRO_RCC_APB1Periph 0
1777 #endif
1779 // SD - SPI2
1780 #define SD_RCC_AHB1Periph (RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_DMA1)
1781 #define SD_RCC_APB1Periph RCC_APB1Periph_SPI2
1782 #define SD_GPIO_PRESENT_GPIO GPIOD
1783 #if defined(PCBXLITE) || defined(PCBX9LITE)
1784 #define SD_GPIO_PRESENT_GPIO_PIN GPIO_Pin_10 // PD.10
1785 #else
1786 #define SD_GPIO_PRESENT_GPIO_PIN GPIO_Pin_9 // PD.09
1787 #endif
1788 #define SD_GPIO GPIOB
1789 #define SD_GPIO_PIN_CS GPIO_Pin_12 // PB.12
1790 #define SD_GPIO_PIN_SCK GPIO_Pin_13 // PB.13
1791 #define SD_GPIO_PIN_MISO GPIO_Pin_14 // PB.14
1792 #define SD_GPIO_PIN_MOSI GPIO_Pin_15 // PB.15
1793 #define SD_GPIO_AF GPIO_AF_SPI2
1794 #define SD_GPIO_PinSource_CS GPIO_PinSource12
1795 #define SD_GPIO_PinSource_SCK GPIO_PinSource13
1796 #define SD_GPIO_PinSource_MISO GPIO_PinSource14
1797 #define SD_GPIO_PinSource_MOSI GPIO_PinSource15
1798 #define SD_SPI SPI2
1799 #define SD_SPI_BaudRatePrescaler SPI_BaudRatePrescaler_4 // 10.5<20MHZ, make sure < 20MHZ
1801 #if !defined(BOOT)
1802 #define SD_USE_DMA // Enable the DMA for SD
1803 #define SD_DMA_Stream_SPI_RX DMA1_Stream3
1804 #define SD_DMA_Stream_SPI_TX DMA1_Stream4
1805 #define SD_DMA_FLAG_SPI_TC_RX DMA_FLAG_TCIF3
1806 #define SD_DMA_FLAG_SPI_TC_TX DMA_FLAG_TCIF4
1807 #define SD_DMA_Channel_SPI DMA_Channel_0
1808 #endif
1810 // Audio
1811 #define AUDIO_RCC_APB1Periph (RCC_APB1Periph_TIM6 | RCC_APB1Periph_DAC)
1812 #define AUDIO_OUTPUT_GPIO GPIOA
1813 #define AUDIO_OUTPUT_GPIO_PIN GPIO_Pin_4 // PA.04
1814 #define AUDIO_DMA_Stream DMA1_Stream5
1815 #define AUDIO_DMA_Stream_IRQn DMA1_Stream5_IRQn
1816 #define AUDIO_TIM_IRQn TIM6_DAC_IRQn
1817 #define AUDIO_TIM_IRQHandler TIM6_DAC_IRQHandler
1818 #define AUDIO_DMA_Stream_IRQHandler DMA1_Stream5_IRQHandler
1819 #define AUDIO_TIMER TIM6
1820 #define AUDIO_DMA DMA1
1822 #if defined(PCBXLITES)
1823 #define AUDIO_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_DMA1)
1824 #define JACK_DETECT_GPIO GPIOC
1825 #define JACK_DETECT_GPIO_PIN GPIO_Pin_13 // PC.13
1826 #define AUDIO_SPEAKER_ENABLE_GPIO GPIOD
1827 #define AUDIO_SPEAKER_ENABLE_GPIO_PIN GPIO_Pin_14 // PD.14
1828 #define HEADPHONE_TRAINER_SWITCH_GPIO GPIOD
1829 #define HEADPHONE_TRAINER_SWITCH_GPIO_PIN GPIO_Pin_9 // PD.09
1830 #else
1831 #define AUDIO_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_DMA1)
1832 #endif
1834 // Haptic
1835 #if defined(PCBXLITE) || defined(PCBX9LITE)
1836 #define HAPTIC_PWM
1837 #define HAPTIC_RCC_AHB1Periph RCC_AHB1Periph_GPIOB
1838 #define HAPTIC_RCC_APB1Periph RCC_APB1Periph_TIM2
1839 #define HAPTIC_RCC_APB2Periph 0
1840 #define HAPTIC_GPIO_PinSource GPIO_PinSource3
1841 #define HAPTIC_GPIO GPIOB
1842 #define HAPTIC_GPIO_PIN GPIO_Pin_3 // PB.03
1843 #define HAPTIC_GPIO_AF GPIO_AF_TIM2
1844 #define HAPTIC_TIMER TIM2
1845 #define HAPTIC_TIMER_FREQ (PERI1_FREQUENCY * TIMER_MULT_APB1)
1846 #define HAPTIC_COUNTER_REGISTER HAPTIC_TIMER->CCR2
1847 #define HAPTIC_CCMR1 TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2
1848 #define HAPTIC_CCER TIM_CCER_CC2E
1849 #define BACKLIGHT_BDTR TIM_BDTR_MOE
1850 #elif (defined(PCBX9DP) && PCBREV >= 2019) || defined(PCBX7ACCESS)
1851 #define HAPTIC_PWM
1852 #define HAPTIC_RCC_AHB1Periph RCC_AHB1Periph_GPIOA
1853 #define HAPTIC_RCC_APB2Periph RCC_APB2Periph_TIM1
1854 #define HAPTIC_RCC_APB1Periph 0
1855 #define HAPTIC_GPIO_PinSource GPIO_PinSource10
1856 #define HAPTIC_GPIO GPIOA
1857 #define HAPTIC_GPIO_PIN GPIO_Pin_10 // PA.10
1858 #define HAPTIC_GPIO_AF GPIO_AF_TIM1
1859 #define HAPTIC_TIMER TIM1 // Timer1 Channel3
1860 #define HAPTIC_TIMER_FREQ (PERI2_FREQUENCY * TIMER_MULT_APB2)
1861 #define HAPTIC_COUNTER_REGISTER HAPTIC_TIMER->CCR3
1862 #define HAPTIC_CCMR2 TIM_CCMR2_OC3M_1 | TIM_CCMR2_OC3M_2
1863 #define HAPTIC_CCER TIM_CCER_CC3E
1864 #elif defined(PCBX9E) || defined(PCBX9DP) || defined(PCBX7)
1865 #define HAPTIC_PWM
1866 #define HAPTIC_RCC_AHB1Periph RCC_AHB1Periph_GPIOB
1867 #define HAPTIC_RCC_APB2Periph RCC_APB2Periph_TIM10
1868 #define HAPTIC_RCC_APB1Periph 0
1869 #define HAPTIC_GPIO_PinSource GPIO_PinSource8
1870 #define HAPTIC_GPIO GPIOB
1871 #define HAPTIC_GPIO_PIN GPIO_Pin_8 // PB.08
1872 #define HAPTIC_GPIO_AF GPIO_AF_TIM10
1873 #define HAPTIC_TIMER TIM10
1874 #define HAPTIC_TIMER_FREQ (PERI2_FREQUENCY * TIMER_MULT_APB2)
1875 #define HAPTIC_COUNTER_REGISTER HAPTIC_TIMER->CCR1
1876 #define HAPTIC_CCMR1 TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2
1877 #define HAPTIC_CCER TIM_CCER_CC1E
1878 #else
1879 #define HAPTIC_RCC_AHB1Periph RCC_AHB1Periph_GPIOC
1880 #define HAPTIC_RCC_APB2Periph 0
1881 #define HAPTIC_RCC_APB1Periph 0
1882 #define HAPTIC_GPIO GPIOC
1883 #define HAPTIC_GPIO_PIN GPIO_Pin_12
1884 #endif
1886 // Top LCD on X9E
1887 #if defined(PCBX9E)
1888 #define TOPLCD_RCC_AHB1Periph RCC_AHB1Periph_GPIOG
1889 #define TOPLCD_GPIO GPIOG
1890 #define TOPLCD_GPIO_PIN_DATA GPIO_Pin_5
1891 #define TOPLCD_GPIO_PIN_WR GPIO_Pin_4
1892 #define TOPLCD_GPIO_PIN_CS1 GPIO_Pin_3
1893 #define TOPLCD_GPIO_PIN_CS2 GPIO_Pin_15
1894 #define TOPLCD_GPIO_PIN_BL GPIO_Pin_2
1895 #endif
1897 // Bluetooth
1898 #if defined(PCBX9E)
1899 #define STORAGE_BLUETOOTH
1900 #define BT_USART USART6
1901 #define BT_GPIO_AF GPIO_AF_USART6
1902 #define BT_USART_IRQn USART6_IRQn
1903 #define BT_RCC_AHB1Periph (RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE | RCC_AHB1Periph_GPIOG)
1904 #define BT_RCC_APB1Periph 0
1905 #define BT_RCC_APB2Periph RCC_APB2Periph_USART6
1906 #define BT_USART_GPIO GPIOG
1907 #define BT_TX_GPIO_PIN GPIO_Pin_14 // PG.14
1908 #define BT_RX_GPIO_PIN GPIO_Pin_9 // PG.09
1909 #define BT_EN_GPIO GPIOD
1910 #define BT_EN_GPIO_PIN GPIO_Pin_11 // PD.11
1911 #define BT_BRTS_GPIO GPIOE
1912 #define BT_BRTS_GPIO_PIN GPIO_Pin_12 // PE.12
1913 #define BT_BCTS_GPIO GPIOG
1914 #define BT_BCTS_GPIO_PIN GPIO_Pin_6 // PG.06
1915 #define BT_TX_GPIO_PinSource GPIO_PinSource14
1916 #define BT_RX_GPIO_PinSource GPIO_PinSource9
1917 #define BT_USART_IRQHandler USART6_IRQHandler
1918 #elif defined(PCBX7) || defined(PCBXLITE) || defined(PCBX9LITES) || (defined(PCBX9DP) && PCBREV >= 2019)
1919 #define STORAGE_BLUETOOTH
1920 #define BT_RCC_APB1Periph RCC_APB1Periph_USART3
1921 #define BT_RCC_APB2Periph 0
1922 #if defined(PCBX9DP)
1923 #define BT_RCC_AHB1Periph (RCC_AHB1Periph_GPIOB) // RCC_AHB1Periph_DMA1
1924 #define BT_EN_GPIO GPIOB
1925 #define BT_EN_GPIO_PIN GPIO_Pin_2 // PB.02
1926 #elif defined(PCBXLITE)
1927 #define BT_RCC_AHB1Periph (RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOE) // RCC_AHB1Periph_DMA1
1928 #define BT_EN_GPIO GPIOE
1929 #define BT_EN_GPIO_PIN GPIO_Pin_15 // PE.15
1930 #elif defined(PCBX9LITES)
1931 #define BT_RCC_AHB1Periph (RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOD) // RCC_AHB1Periph_DMA1
1932 #define BT_EN_GPIO GPIOD
1933 #define BT_EN_GPIO_PIN GPIO_Pin_14 // PD.14
1934 #else
1935 #define BT_RCC_AHB1Periph (RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOE) // RCC_AHB1Periph_DMA1
1936 #define BT_EN_GPIO GPIOE
1937 #define BT_EN_GPIO_PIN GPIO_Pin_12 // PE.12
1938 #endif
1939 #define BT_USART_GPIO GPIOB
1940 #define BT_TX_GPIO_PIN GPIO_Pin_10 // PB.10
1941 #define BT_RX_GPIO_PIN GPIO_Pin_11 // PB.11
1942 #define BT_TX_GPIO_PinSource GPIO_PinSource10
1943 #define BT_RX_GPIO_PinSource GPIO_PinSource11
1944 #define BT_GPIO_AF GPIO_AF_USART3
1945 #define BT_USART USART3
1946 #define BT_USART_IRQHandler USART3_IRQHandler
1947 #define BT_USART_IRQn USART3_IRQn
1948 // #define BT_DMA_Stream_RX DMA1_Stream1
1949 // #define BT_DMA_Channel_RX DMA_Channel_4
1950 #elif defined(PCBX9D) || defined(PCBX9DP)
1951 #define STORAGE_BLUETOOTH
1952 #define BT_RCC_AHB1Periph 0
1953 #define BT_RCC_APB1Periph 0
1954 #define BT_RCC_APB2Periph 0
1955 #else
1956 #define BT_RCC_AHB1Periph 0
1957 #define BT_RCC_APB1Periph 0
1958 #define BT_RCC_APB2Periph 0
1959 #endif
1961 // Xms Interrupt
1962 #define INTERRUPT_xMS_RCC_APB1Periph RCC_APB1Periph_TIM14
1963 #define INTERRUPT_xMS_TIMER TIM14
1964 #define INTERRUPT_xMS_IRQn TIM8_TRG_COM_TIM14_IRQn
1965 #define INTERRUPT_xMS_IRQHandler TIM8_TRG_COM_TIM14_IRQHandler
1967 // 2MHz Timer
1968 #define TIMER_2MHz_RCC_APB1Periph RCC_APB1Periph_TIM7
1969 #define TIMER_2MHz_TIMER TIM7
1971 #endif // _HAL_H_