1 /*
2 * Copyright (c) 2006-2022, RT-Thread Development Team
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 *
6 * Change Logs:
7 * Date Author Notes
8 * 2021-08-10 charlown first version
9 */
10
11 #include <rtthread.h>
12 #include <rtdevice.h>
13 #include <rthw.h>
14 #include "board.h"
15 #include "ch32f20x_rcc.h"
16
ch32_get_sysclock_frequency(void)17 rt_uint32_t ch32_get_sysclock_frequency(void)
18 {
19 RCC_ClocksTypeDef RCC_Clocks;
20
21 RCC_GetClocksFreq(&RCC_Clocks);
22
23 return RCC_Clocks.SYSCLK_Frequency;
24 }
25
ch32f2_usart_clock_and_io_init(USART_TypeDef * usartx)26 void ch32f2_usart_clock_and_io_init(USART_TypeDef *usartx)
27 {
28
29 GPIO_InitTypeDef GPIO_InitStructure;
30
31 if (usartx == USART1)
32 {
33
34 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
35 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
36
37 /* USART1 TX-->A.9 RX-->A.10 */
38 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
39 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
40 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
41 GPIO_Init(GPIOA, &GPIO_InitStructure);
42 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
43 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
44 GPIO_Init(GPIOA, &GPIO_InitStructure);
45 }
46
47 if (usartx == USART2)
48 {
49
50 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
51 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
52
53 /* USART2 TX-->A.2 RX-->A.3 */
54 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
55 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
56 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
57 GPIO_Init(GPIOA, &GPIO_InitStructure);
58 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
59 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
60 GPIO_Init(GPIOA, &GPIO_InitStructure);
61 }
62
63 if (usartx == USART3)
64 {
65
66 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
67 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
68
69 /* USART3 TX-->C.10 RX-->C.11 */
70 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
71 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
72 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
73 GPIO_Init(GPIOC, &GPIO_InitStructure);
74 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
75 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
76 GPIO_Init(GPIOC, &GPIO_InitStructure);
77 GPIO_PinRemapConfig(GPIO_PartialRemap_USART3, ENABLE);
78 }
79
80 if (usartx == UART4)
81 {
82
83 RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4, ENABLE);
84 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
85
86 /* UART4 TX-->C.10 RX-->C.11 */
87 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
88 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
89 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
90 GPIO_Init(GPIOC, &GPIO_InitStructure);
91 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
92 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
93 GPIO_Init(GPIOC, &GPIO_InitStructure);
94 }
95
96 if (usartx == UART5)
97 {
98
99 RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART5, ENABLE);
100 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
101 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
102
103 /* UART5 TX-->C.12 RX-->D.2 */
104 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
105 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
106 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
107 GPIO_Init(GPIOC, &GPIO_InitStructure);
108 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
109 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
110 GPIO_Init(GPIOD, &GPIO_InitStructure);
111 }
112
113 if (usartx == UART6)
114 {
115
116 RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART6, ENABLE);
117 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
118
119 /* UART6 TX-->C.0 RX-->C.1 */
120 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
121 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
122 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
123 GPIO_Init(GPIOC, &GPIO_InitStructure);
124 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
125 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
126 GPIO_Init(GPIOC, &GPIO_InitStructure);
127 }
128
129 if (usartx == UART7)
130 {
131
132 RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART7, ENABLE);
133 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
134
135 /* UART7 TX-->C.2 RX-->C.3 */
136 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
137 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
138 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
139 GPIO_Init(GPIOC, &GPIO_InitStructure);
140 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
141 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
142 GPIO_Init(GPIOC, &GPIO_InitStructure);
143 }
144
145 if (usartx == UART8)
146 {
147
148 RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART8, ENABLE);
149 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
150
151 /* UART8 TX-->C.4 RX-->C.5 */
152 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
153 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
154 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
155 GPIO_Init(GPIOC, &GPIO_InitStructure);
156 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
157 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
158 GPIO_Init(GPIOC, &GPIO_InitStructure);
159 }
160 }
161
ch32f2_spi_clock_and_io_init(SPI_TypeDef * spix)162 void ch32f2_spi_clock_and_io_init(SPI_TypeDef *spix)
163 {
164
165 GPIO_InitTypeDef GPIO_InitStructure;
166
167 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
168
169 if (spix == SPI1)
170 {
171 RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI1, ENABLE);
172 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
173
174 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
175 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
176 GPIO_Init(GPIOB, &GPIO_InitStructure);
177 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
178 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_7;
179 GPIO_Init(GPIOB, &GPIO_InitStructure);
180 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
181 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
182 GPIO_Init(GPIOB, &GPIO_InitStructure);
183 }
184
185 if (spix == SPI2)
186 {
187 RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
188 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
189
190 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
191 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
192 GPIO_Init(GPIOB, &GPIO_InitStructure);
193 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
194 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_15;
195 GPIO_Init(GPIOB, &GPIO_InitStructure);
196 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
197 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
198 GPIO_Init(GPIOB, &GPIO_InitStructure);
199 }
200
201 if (spix == SPI3)
202 {
203 RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3, ENABLE);
204 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
205 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
206
207 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
208 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
209 GPIO_Init(GPIOA, &GPIO_InitStructure);
210 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
211 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_5;
212 GPIO_Init(GPIOB, &GPIO_InitStructure);
213 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
214 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
215 GPIO_Init(GPIOB, &GPIO_InitStructure);
216 }
217 }
218
ch32f2_spi_clock_get(SPI_TypeDef * spix)219 rt_uint32_t ch32f2_spi_clock_get(SPI_TypeDef *spix)
220 {
221 RCC_ClocksTypeDef RCC_Clocks;
222
223 RCC_GetClocksFreq(&RCC_Clocks);
224
225 if (spix == SPI1)
226 {
227 return RCC_Clocks.PCLK2_Frequency;
228 }
229
230 if (spix == SPI2)
231 {
232 return RCC_Clocks.PCLK1_Frequency;
233 }
234
235 if (spix == SPI3)
236 {
237 return RCC_Clocks.PCLK1_Frequency;
238 }
239
240 return RCC_Clocks.PCLK2_Frequency;
241 }
242
ch32f2_i2c_clock_and_io_init(I2C_TypeDef * i2cx)243 void ch32f2_i2c_clock_and_io_init(I2C_TypeDef *i2cx)
244 {
245
246 GPIO_InitTypeDef GPIO_InitStructure;
247
248 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
249 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;
250
251 if (i2cx == I2C1)
252 {
253
254 RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);
255 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
256
257 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;
258 GPIO_Init(GPIOB, &GPIO_InitStructure);
259 GPIO_PinRemapConfig(GPIO_Remap_I2C1, ENABLE);
260 }
261
262 if (i2cx == I2C2)
263 {
264 RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C2, ENABLE);
265 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
266
267 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11;
268 GPIO_Init(GPIOB, &GPIO_InitStructure);
269 }
270 }
271
ch32f2_i2c_config(I2C_TypeDef * i2cx)272 void ch32f2_i2c_config(I2C_TypeDef *i2cx)
273 {
274
275 I2C_InitTypeDef I2C_InitTSturcture;
276
277 if (i2cx == I2C1)
278 {
279 I2C_InitTSturcture.I2C_ClockSpeed = 100000;
280 I2C_InitTSturcture.I2C_Mode = I2C_Mode_I2C;
281 I2C_InitTSturcture.I2C_DutyCycle = I2C_DutyCycle_16_9;
282 I2C_InitTSturcture.I2C_OwnAddress1 = 0;
283 I2C_InitTSturcture.I2C_Ack = I2C_Ack_Enable;
284 I2C_InitTSturcture.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
285 I2C_Init(I2C1, &I2C_InitTSturcture);
286
287 I2C_Cmd(I2C1, ENABLE);
288 I2C_AcknowledgeConfig(I2C1, ENABLE);
289 }
290
291 if (i2cx == I2C2)
292 {
293 I2C_InitTSturcture.I2C_ClockSpeed = 100000;
294 I2C_InitTSturcture.I2C_Mode = I2C_Mode_I2C;
295 I2C_InitTSturcture.I2C_DutyCycle = I2C_DutyCycle_16_9;
296 I2C_InitTSturcture.I2C_OwnAddress1 = 0;
297 I2C_InitTSturcture.I2C_Ack = I2C_Ack_Enable;
298 I2C_InitTSturcture.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
299 I2C_Init(I2C2, &I2C_InitTSturcture);
300
301 I2C_Cmd(I2C2, ENABLE);
302 I2C_AcknowledgeConfig(I2C2, ENABLE);
303 }
304 }
305
306 #ifdef BSP_USING_HWTIMER
ch32f2_tim_clock_init(TIM_TypeDef * timx)307 void ch32f2_tim_clock_init(TIM_TypeDef *timx)
308 {
309 if (timx == TIM1)
310 {
311 RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
312 }
313
314 if (timx == TIM2)
315 {
316 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
317 }
318
319 if (timx == TIM3)
320 {
321 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
322 }
323
324 if (timx == TIM4)
325 {
326 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
327 }
328
329 if (timx == TIM5)
330 {
331 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE);
332 }
333
334 if (timx == TIM6)
335 {
336 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE);
337 }
338
339 if (timx == TIM7)
340 {
341 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM7, ENABLE);
342 }
343
344 if (timx == TIM8)
345 {
346 RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8, ENABLE);
347 }
348
349 if (timx == TIM9)
350 {
351 RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM9, ENABLE);
352 }
353
354 if (timx == TIM10)
355 {
356 RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM10, ENABLE);
357 }
358 }
359
ch32f2_tim_clock_get(TIM_TypeDef * timx)360 rt_uint32_t ch32f2_tim_clock_get(TIM_TypeDef *timx)
361 {
362 RCC_ClocksTypeDef RCC_Clocks;
363 rt_uint32_t rcc_cfgr0;
364 rt_uint8_t ppre1, ppre2;
365
366 RCC_GetClocksFreq(&RCC_Clocks);
367
368 rcc_cfgr0 = RCC->CFGR0;
369
370 ppre1 = (rcc_cfgr0 >> 8) & 0x7; // CFGR0[10:8]
371 ppre2 = (rcc_cfgr0 >> 11) & 0x7; // CFGR0[13:11]
372
373 if (timx == TIM1 || timx == TIM8 || timx == TIM9 || timx == TIM10)
374 {
375 return ppre2 >= 4 ? RCC_Clocks.PCLK2_Frequency * 2 : RCC_Clocks.PCLK2_Frequency;
376 }
377
378 // TIM2~7
379 return ppre1 >= 4 ? RCC_Clocks.PCLK1_Frequency * 2 : RCC_Clocks.PCLK1_Frequency;
380 }
381
382 struct rt_hwtimer_info hwtimer_info1 =
383 {
384 .maxfreq = 1000000,
385 .minfreq = 2000,
386 .maxcnt = 0xFFFF,
387 .cntmode = HWTIMER_CNTMODE_UP,
388
389 };
390
391 struct rt_hwtimer_info hwtimer_info2 =
392 {
393 .maxfreq = 1000000,
394 .minfreq = 2000,
395 .maxcnt = 0xFFFF,
396 .cntmode = HWTIMER_CNTMODE_UP,
397
398 };
399
400 struct rt_hwtimer_info hwtimer_info3 =
401 {
402 .maxfreq = 1000000,
403 .minfreq = 2000,
404 .maxcnt = 0xFFFF,
405 .cntmode = HWTIMER_CNTMODE_UP,
406
407 };
408
409 struct rt_hwtimer_info hwtimer_info4 =
410 {
411 .maxfreq = 1000000,
412 .minfreq = 2000,
413 .maxcnt = 0xFFFF,
414 .cntmode = HWTIMER_CNTMODE_UP,
415
416 };
417
418 struct rt_hwtimer_info hwtimer_info5 =
419 {
420 .maxfreq = 1000000,
421 .minfreq = 2000,
422 .maxcnt = 0xFFFF,
423 .cntmode = HWTIMER_CNTMODE_UP,
424
425 };
426
427 struct rt_hwtimer_info hwtimer_info6 =
428 {
429 .maxfreq = 1000000,
430 .minfreq = 2000,
431 .maxcnt = 0xFFFF,
432 .cntmode = HWTIMER_CNTMODE_UP,
433
434 };
435
436 struct rt_hwtimer_info hwtimer_info7 =
437 {
438 .maxfreq = 1000000,
439 .minfreq = 2000,
440 .maxcnt = 0xFFFF,
441 .cntmode = HWTIMER_CNTMODE_UP,
442
443 };
444
445 struct rt_hwtimer_info hwtimer_info8 =
446 {
447 .maxfreq = 1000000,
448 .minfreq = 2000,
449 .maxcnt = 0xFFFF,
450 .cntmode = HWTIMER_CNTMODE_UP,
451
452 };
453
454 struct rt_hwtimer_info hwtimer_info9 =
455 {
456 .maxfreq = 1000000,
457 .minfreq = 2000,
458 .maxcnt = 0xFFFF,
459 .cntmode = HWTIMER_CNTMODE_UP,
460
461 };
462
463 struct rt_hwtimer_info hwtimer_info10 =
464 {
465 .maxfreq = 1000000,
466 .minfreq = 2000,
467 .maxcnt = 0xFFFF,
468 .cntmode = HWTIMER_CNTMODE_UP,
469
470 };
471
ch32f2_hwtimer_info_config_get(TIM_TypeDef * timx)472 struct rt_hwtimer_info *ch32f2_hwtimer_info_config_get(TIM_TypeDef *timx)
473 {
474 struct rt_hwtimer_info *info = RT_NULL;
475
476 if (timx == TIM1)
477 {
478 info = &hwtimer_info1;
479 }
480 else if (timx == TIM2)
481 {
482 info = &hwtimer_info2;
483 }
484 else if (timx == TIM3)
485 {
486 info = &hwtimer_info3;
487 }
488 else if (timx == TIM4)
489 {
490 info = &hwtimer_info4;
491 }
492 else if (timx == TIM4)
493 {
494 info = &hwtimer_info4;
495 }
496 else if (timx == TIM5)
497 {
498 info = &hwtimer_info5;
499 }
500 else if (timx == TIM6)
501 {
502 info = &hwtimer_info6;
503 }
504 else if (timx == TIM7)
505 {
506 info = &hwtimer_info7;
507 }
508 else if (timx == TIM8)
509 {
510 info = &hwtimer_info8;
511 }
512 else if (timx == TIM9)
513 {
514 info = &hwtimer_info9;
515 }
516 else if (timx == TIM10)
517 {
518 info = &hwtimer_info10;
519 }
520
521 return info;
522 }
523
ch32f2_pwm_io_init(TIM_TypeDef * timx,rt_uint8_t channel)524 void ch32f2_pwm_io_init(TIM_TypeDef *timx, rt_uint8_t channel)
525 {
526 GPIO_InitTypeDef GPIO_InitStructure;
527
528 if (timx == TIM1)
529 {
530 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
531
532 if (channel == TIM_Channel_1)
533 {
534 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
535 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
536 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
537 GPIO_Init(GPIOA, &GPIO_InitStructure);
538 }
539 if (channel == TIM_Channel_2)
540 {
541 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
542 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
543 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
544 GPIO_Init(GPIOA, &GPIO_InitStructure);
545 }
546 if (channel == TIM_Channel_3)
547 {
548 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
549 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
550 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
551 GPIO_Init(GPIOA, &GPIO_InitStructure);
552 }
553 if (channel == TIM_Channel_4)
554 {
555 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
556 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
557 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
558 GPIO_Init(GPIOA, &GPIO_InitStructure);
559 }
560 }
561
562 if (timx == TIM2)
563 {
564 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
565
566 if (channel == TIM_Channel_1)
567 {
568 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
569 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
570 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
571 GPIO_Init(GPIOA, &GPIO_InitStructure);
572 }
573 if (channel == TIM_Channel_2)
574 {
575 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
576 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
577 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
578 GPIO_Init(GPIOA, &GPIO_InitStructure);
579 }
580 if (channel == TIM_Channel_3)
581 {
582 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
583 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
584 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
585 GPIO_Init(GPIOA, &GPIO_InitStructure);
586 }
587 if (channel == TIM_Channel_4)
588 {
589 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
590 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
591 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
592 GPIO_Init(GPIOA, &GPIO_InitStructure);
593 }
594 }
595
596 if (timx == TIM3)
597 {
598 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
599 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
600
601 if (channel == TIM_Channel_1)
602 {
603 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
604 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
605 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
606 GPIO_Init(GPIOA, &GPIO_InitStructure);
607 }
608 if (channel == TIM_Channel_2)
609 {
610 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
611 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
612 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
613 GPIO_Init(GPIOA, &GPIO_InitStructure);
614 }
615 if (channel == TIM_Channel_3)
616 {
617 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
618 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
619 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
620 GPIO_Init(GPIOB, &GPIO_InitStructure);
621 }
622 if (channel == TIM_Channel_4)
623 {
624 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
625 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
626 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
627 GPIO_Init(GPIOB, &GPIO_InitStructure);
628 }
629 }
630
631 if (timx == TIM4)
632 {
633 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
634
635 if (channel == TIM_Channel_1)
636 {
637 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
638 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
639 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
640 GPIO_Init(GPIOB, &GPIO_InitStructure);
641 }
642 if (channel == TIM_Channel_2)
643 {
644 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
645 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
646 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
647 GPIO_Init(GPIOB, &GPIO_InitStructure);
648 }
649 if (channel == TIM_Channel_3)
650 {
651 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
652 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
653 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
654 GPIO_Init(GPIOB, &GPIO_InitStructure);
655 }
656 if (channel == TIM_Channel_4)
657 {
658 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
659 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
660 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
661 GPIO_Init(GPIOB, &GPIO_InitStructure);
662 }
663 }
664
665 if (timx == TIM5)
666 {
667 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
668
669 if (channel == TIM_Channel_1)
670 {
671 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
672 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
673 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
674 GPIO_Init(GPIOA, &GPIO_InitStructure);
675 }
676 if (channel == TIM_Channel_2)
677 {
678 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
679 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
680 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
681 GPIO_Init(GPIOA, &GPIO_InitStructure);
682 }
683 if (channel == TIM_Channel_3)
684 {
685 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
686 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
687 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
688 GPIO_Init(GPIOA, &GPIO_InitStructure);
689 }
690 if (channel == TIM_Channel_4)
691 {
692 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
693 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
694 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
695 GPIO_Init(GPIOA, &GPIO_InitStructure);
696 }
697 }
698
699 if (timx == TIM8)
700 {
701 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
702
703 if (channel == TIM_Channel_1)
704 {
705 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
706 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
707 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
708 GPIO_Init(GPIOC, &GPIO_InitStructure);
709 }
710 if (channel == TIM_Channel_2)
711 {
712 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
713 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
714 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
715 GPIO_Init(GPIOC, &GPIO_InitStructure);
716 }
717 if (channel == TIM_Channel_3)
718 {
719 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
720 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
721 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
722 GPIO_Init(GPIOC, &GPIO_InitStructure);
723 }
724 if (channel == TIM_Channel_4)
725 {
726 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
727 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
728 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
729 GPIO_Init(GPIOC, &GPIO_InitStructure);
730 }
731 }
732
733 if (timx == TIM9)
734 {
735 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
736
737 if (channel == TIM_Channel_1)
738 {
739 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
740 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
741 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
742 GPIO_Init(GPIOC, &GPIO_InitStructure);
743 }
744 if (channel == TIM_Channel_2)
745 {
746 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
747 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
748 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
749 GPIO_Init(GPIOC, &GPIO_InitStructure);
750 }
751 if (channel == TIM_Channel_3)
752 {
753 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
754 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
755 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
756 GPIO_Init(GPIOC, &GPIO_InitStructure);
757 }
758 if (channel == TIM_Channel_4)
759 {
760 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
761 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
762 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
763 GPIO_Init(GPIOC, &GPIO_InitStructure);
764 }
765 }
766
767 if (timx == TIM10)
768 {
769 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
770 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
771
772 if (channel == TIM_Channel_1)
773 {
774 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
775 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
776 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
777 GPIO_Init(GPIOA, &GPIO_InitStructure);
778 }
779 if (channel == TIM_Channel_2)
780 {
781 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
782 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
783 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
784 GPIO_Init(GPIOA, &GPIO_InitStructure);
785 }
786 if (channel == TIM_Channel_3)
787 {
788 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
789 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
790 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
791 GPIO_Init(GPIOA, &GPIO_InitStructure);
792 }
793 if (channel == TIM_Channel_4)
794 {
795 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
796 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
797 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
798 GPIO_Init(GPIOC, &GPIO_InitStructure);
799 }
800 }
801 }
802 #endif
803