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