board.c 24 KB

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