tim.c 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667
  1. /* USER CODE BEGIN Header */
  2. /**
  3. ******************************************************************************
  4. * @file tim.c
  5. * @brief This file provides code for the configuration
  6. * of the TIM instances.
  7. ******************************************************************************
  8. * @attention
  9. *
  10. * Copyright (c) 2026 STMicroelectronics.
  11. * All rights reserved.
  12. *
  13. * This software is licensed under terms that can be found in the LICENSE file
  14. * in the root directory of this software component.
  15. * If no LICENSE file comes with this software, it is provided AS-IS.
  16. *
  17. ******************************************************************************
  18. */
  19. /* USER CODE END Header */
  20. /* Includes ------------------------------------------------------------------*/
  21. #include "tim.h"
  22. /* USER CODE BEGIN 0 */
  23. /* USER CODE END 0 */
  24. TIM_HandleTypeDef htim1;
  25. TIM_HandleTypeDef htim2;
  26. TIM_HandleTypeDef htim3;
  27. TIM_HandleTypeDef htim4;
  28. TIM_HandleTypeDef htim5;
  29. TIM_HandleTypeDef htim12;
  30. /* TIM1 init function */
  31. void MX_TIM1_Init(void)
  32. {
  33. /* USER CODE BEGIN TIM1_Init 0 */
  34. /* USER CODE END TIM1_Init 0 */
  35. TIM_MasterConfigTypeDef sMasterConfig = {0};
  36. TIM_OC_InitTypeDef sConfigOC = {0};
  37. TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0};
  38. /* USER CODE BEGIN TIM1_Init 1 */
  39. /* USER CODE END TIM1_Init 1 */
  40. htim1.Instance = TIM1;
  41. htim1.Init.Prescaler = 250-1;
  42. htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
  43. htim1.Init.Period = 19999;
  44. htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  45. htim1.Init.RepetitionCounter = 0;
  46. htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
  47. if (HAL_TIM_PWM_Init(&htim1) != HAL_OK)
  48. {
  49. Error_Handler();
  50. }
  51. sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  52. sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET;
  53. sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  54. if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)
  55. {
  56. Error_Handler();
  57. }
  58. sConfigOC.OCMode = TIM_OCMODE_PWM1;
  59. sConfigOC.Pulse = 1000;
  60. sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  61. sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
  62. sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  63. sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
  64. sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
  65. if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
  66. {
  67. Error_Handler();
  68. }
  69. if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
  70. {
  71. Error_Handler();
  72. }
  73. sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
  74. sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
  75. sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
  76. sBreakDeadTimeConfig.DeadTime = 0;
  77. sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;
  78. sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
  79. sBreakDeadTimeConfig.BreakFilter = 0;
  80. sBreakDeadTimeConfig.BreakAFMode = TIM_BREAK_AFMODE_INPUT;
  81. sBreakDeadTimeConfig.Break2State = TIM_BREAK2_DISABLE;
  82. sBreakDeadTimeConfig.Break2Polarity = TIM_BREAK2POLARITY_HIGH;
  83. sBreakDeadTimeConfig.Break2Filter = 0;
  84. sBreakDeadTimeConfig.Break2AFMode = TIM_BREAK_AFMODE_INPUT;
  85. sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;
  86. if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK)
  87. {
  88. Error_Handler();
  89. }
  90. /* USER CODE BEGIN TIM1_Init 2 */
  91. /* USER CODE END TIM1_Init 2 */
  92. HAL_TIM_MspPostInit(&htim1);
  93. }
  94. /* TIM2 init function */
  95. void MX_TIM2_Init(void)
  96. {
  97. /* USER CODE BEGIN TIM2_Init 0 */
  98. /* USER CODE END TIM2_Init 0 */
  99. TIM_MasterConfigTypeDef sMasterConfig = {0};
  100. TIM_OC_InitTypeDef sConfigOC = {0};
  101. TIM_IC_InitTypeDef sConfigIC = {0};
  102. /* USER CODE BEGIN TIM2_Init 1 */
  103. /* USER CODE END TIM2_Init 1 */
  104. htim2.Instance = TIM2;
  105. htim2.Init.Prescaler = 250-1;
  106. htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
  107. htim2.Init.Period = 19999;
  108. htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  109. htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
  110. if (HAL_TIM_PWM_Init(&htim2) != HAL_OK)
  111. {
  112. Error_Handler();
  113. }
  114. if (HAL_TIM_IC_Init(&htim2) != HAL_OK)
  115. {
  116. Error_Handler();
  117. }
  118. sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  119. sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  120. if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
  121. {
  122. Error_Handler();
  123. }
  124. sConfigOC.OCMode = TIM_OCMODE_PWM1;
  125. sConfigOC.Pulse = 1000;
  126. sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  127. sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  128. if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
  129. {
  130. Error_Handler();
  131. }
  132. if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
  133. {
  134. Error_Handler();
  135. }
  136. sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_RISING;
  137. sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
  138. sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
  139. sConfigIC.ICFilter = 0;
  140. if (HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_3) != HAL_OK)
  141. {
  142. Error_Handler();
  143. }
  144. if (HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_4) != HAL_OK)
  145. {
  146. Error_Handler();
  147. }
  148. /* USER CODE BEGIN TIM2_Init 2 */
  149. /* USER CODE END TIM2_Init 2 */
  150. HAL_TIM_MspPostInit(&htim2);
  151. }
  152. /* TIM3 init function */
  153. void MX_TIM3_Init(void)
  154. {
  155. /* USER CODE BEGIN TIM3_Init 0 */
  156. /* USER CODE END TIM3_Init 0 */
  157. TIM_ClockConfigTypeDef sClockSourceConfig = {0};
  158. TIM_MasterConfigTypeDef sMasterConfig = {0};
  159. /* USER CODE BEGIN TIM3_Init 1 */
  160. /* USER CODE END TIM3_Init 1 */
  161. htim3.Instance = TIM3;
  162. htim3.Init.Prescaler = 250-1;
  163. htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
  164. htim3.Init.Period = 65535;
  165. htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  166. htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
  167. if (HAL_TIM_Base_Init(&htim3) != HAL_OK)
  168. {
  169. Error_Handler();
  170. }
  171. sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  172. if (HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig) != HAL_OK)
  173. {
  174. Error_Handler();
  175. }
  176. sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  177. sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  178. if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK)
  179. {
  180. Error_Handler();
  181. }
  182. /* USER CODE BEGIN TIM3_Init 2 */
  183. /* USER CODE END TIM3_Init 2 */
  184. }
  185. /* TIM4 init function */
  186. void MX_TIM4_Init(void)
  187. {
  188. /* USER CODE BEGIN TIM4_Init 0 */
  189. /* USER CODE END TIM4_Init 0 */
  190. TIM_MasterConfigTypeDef sMasterConfig = {0};
  191. TIM_OC_InitTypeDef sConfigOC = {0};
  192. /* USER CODE BEGIN TIM4_Init 1 */
  193. /* USER CODE END TIM4_Init 1 */
  194. htim4.Instance = TIM4;
  195. htim4.Init.Prescaler = 250-1;
  196. htim4.Init.CounterMode = TIM_COUNTERMODE_UP;
  197. htim4.Init.Period = 50000;
  198. htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  199. htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
  200. if (HAL_TIM_PWM_Init(&htim4) != HAL_OK)
  201. {
  202. Error_Handler();
  203. }
  204. sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  205. sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  206. if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK)
  207. {
  208. Error_Handler();
  209. }
  210. sConfigOC.OCMode = TIM_OCMODE_PWM1;
  211. sConfigOC.Pulse = 2500;
  212. sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  213. sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  214. if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
  215. {
  216. Error_Handler();
  217. }
  218. /* USER CODE BEGIN TIM4_Init 2 */
  219. /* USER CODE END TIM4_Init 2 */
  220. }
  221. /* TIM5 init function */
  222. void MX_TIM5_Init(void)
  223. {
  224. /* USER CODE BEGIN TIM5_Init 0 */
  225. /* USER CODE END TIM5_Init 0 */
  226. TIM_ClockConfigTypeDef sClockSourceConfig = {0};
  227. TIM_MasterConfigTypeDef sMasterConfig = {0};
  228. /* USER CODE BEGIN TIM5_Init 1 */
  229. /* USER CODE END TIM5_Init 1 */
  230. htim5.Instance = TIM5;
  231. htim5.Init.Prescaler = 250-1;
  232. htim5.Init.CounterMode = TIM_COUNTERMODE_UP;
  233. htim5.Init.Period = 12499;
  234. htim5.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  235. htim5.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  236. if (HAL_TIM_Base_Init(&htim5) != HAL_OK)
  237. {
  238. Error_Handler();
  239. }
  240. sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  241. if (HAL_TIM_ConfigClockSource(&htim5, &sClockSourceConfig) != HAL_OK)
  242. {
  243. Error_Handler();
  244. }
  245. sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  246. sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  247. if (HAL_TIMEx_MasterConfigSynchronization(&htim5, &sMasterConfig) != HAL_OK)
  248. {
  249. Error_Handler();
  250. }
  251. /* USER CODE BEGIN TIM5_Init 2 */
  252. /* USER CODE END TIM5_Init 2 */
  253. }
  254. /* TIM12 init function */
  255. void MX_TIM12_Init(void)
  256. {
  257. /* USER CODE BEGIN TIM12_Init 0 */
  258. /* USER CODE END TIM12_Init 0 */
  259. TIM_OC_InitTypeDef sConfigOC = {0};
  260. /* USER CODE BEGIN TIM12_Init 1 */
  261. /* USER CODE END TIM12_Init 1 */
  262. htim12.Instance = TIM12;
  263. htim12.Init.Prescaler = 250-1;
  264. htim12.Init.CounterMode = TIM_COUNTERMODE_UP;
  265. htim12.Init.Period = 19999;
  266. htim12.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  267. htim12.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
  268. if (HAL_TIM_PWM_Init(&htim12) != HAL_OK)
  269. {
  270. Error_Handler();
  271. }
  272. sConfigOC.OCMode = TIM_OCMODE_PWM1;
  273. sConfigOC.Pulse = 1000;
  274. sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  275. sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  276. if (HAL_TIM_PWM_ConfigChannel(&htim12, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
  277. {
  278. Error_Handler();
  279. }
  280. if (HAL_TIM_PWM_ConfigChannel(&htim12, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
  281. {
  282. Error_Handler();
  283. }
  284. /* USER CODE BEGIN TIM12_Init 2 */
  285. /* USER CODE END TIM12_Init 2 */
  286. HAL_TIM_MspPostInit(&htim12);
  287. }
  288. void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef* tim_pwmHandle)
  289. {
  290. GPIO_InitTypeDef GPIO_InitStruct = {0};
  291. if(tim_pwmHandle->Instance==TIM1)
  292. {
  293. /* USER CODE BEGIN TIM1_MspInit 0 */
  294. /* USER CODE END TIM1_MspInit 0 */
  295. /* TIM1 clock enable */
  296. __HAL_RCC_TIM1_CLK_ENABLE();
  297. /* USER CODE BEGIN TIM1_MspInit 1 */
  298. /* USER CODE END TIM1_MspInit 1 */
  299. }
  300. else if(tim_pwmHandle->Instance==TIM2)
  301. {
  302. /* USER CODE BEGIN TIM2_MspInit 0 */
  303. /* USER CODE END TIM2_MspInit 0 */
  304. /* TIM2 clock enable */
  305. __HAL_RCC_TIM2_CLK_ENABLE();
  306. __HAL_RCC_GPIOA_CLK_ENABLE();
  307. /**TIM2 GPIO Configuration
  308. PA2 ------> TIM2_CH3
  309. PA3 ------> TIM2_CH4
  310. */
  311. GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3;
  312. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  313. GPIO_InitStruct.Pull = GPIO_PULLDOWN;
  314. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  315. GPIO_InitStruct.Alternate = GPIO_AF1_TIM2;
  316. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  317. /* TIM2 interrupt Init */
  318. HAL_NVIC_SetPriority(TIM2_IRQn, 0, 0);
  319. HAL_NVIC_EnableIRQ(TIM2_IRQn);
  320. /* USER CODE BEGIN TIM2_MspInit 1 */
  321. /* USER CODE END TIM2_MspInit 1 */
  322. }
  323. else if(tim_pwmHandle->Instance==TIM4)
  324. {
  325. /* USER CODE BEGIN TIM4_MspInit 0 */
  326. /* USER CODE END TIM4_MspInit 0 */
  327. /* TIM4 clock enable */
  328. __HAL_RCC_TIM4_CLK_ENABLE();
  329. /* USER CODE BEGIN TIM4_MspInit 1 */
  330. /* USER CODE END TIM4_MspInit 1 */
  331. }
  332. else if(tim_pwmHandle->Instance==TIM12)
  333. {
  334. /* USER CODE BEGIN TIM12_MspInit 0 */
  335. /* USER CODE END TIM12_MspInit 0 */
  336. /* TIM12 clock enable */
  337. __HAL_RCC_TIM12_CLK_ENABLE();
  338. /* USER CODE BEGIN TIM12_MspInit 1 */
  339. /* USER CODE END TIM12_MspInit 1 */
  340. }
  341. }
  342. void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
  343. {
  344. if(tim_baseHandle->Instance==TIM3)
  345. {
  346. /* USER CODE BEGIN TIM3_MspInit 0 */
  347. /* USER CODE END TIM3_MspInit 0 */
  348. /* TIM3 clock enable */
  349. __HAL_RCC_TIM3_CLK_ENABLE();
  350. /* USER CODE BEGIN TIM3_MspInit 1 */
  351. /* USER CODE END TIM3_MspInit 1 */
  352. }
  353. else if(tim_baseHandle->Instance==TIM5)
  354. {
  355. /* USER CODE BEGIN TIM5_MspInit 0 */
  356. /* USER CODE END TIM5_MspInit 0 */
  357. /* TIM5 clock enable */
  358. __HAL_RCC_TIM5_CLK_ENABLE();
  359. /* TIM5 interrupt Init */
  360. HAL_NVIC_SetPriority(TIM5_IRQn, 0, 0);
  361. HAL_NVIC_EnableIRQ(TIM5_IRQn);
  362. /* USER CODE BEGIN TIM5_MspInit 1 */
  363. /* USER CODE END TIM5_MspInit 1 */
  364. }
  365. }
  366. void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle)
  367. {
  368. GPIO_InitTypeDef GPIO_InitStruct = {0};
  369. if(timHandle->Instance==TIM1)
  370. {
  371. /* USER CODE BEGIN TIM1_MspPostInit 0 */
  372. /* USER CODE END TIM1_MspPostInit 0 */
  373. __HAL_RCC_GPIOA_CLK_ENABLE();
  374. /**TIM1 GPIO Configuration
  375. PA8 ------> TIM1_CH1
  376. PA9 ------> TIM1_CH2
  377. */
  378. GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9;
  379. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  380. GPIO_InitStruct.Pull = GPIO_NOPULL;
  381. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  382. GPIO_InitStruct.Alternate = GPIO_AF1_TIM1;
  383. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  384. /* USER CODE BEGIN TIM1_MspPostInit 1 */
  385. /* USER CODE END TIM1_MspPostInit 1 */
  386. }
  387. else if(timHandle->Instance==TIM2)
  388. {
  389. /* USER CODE BEGIN TIM2_MspPostInit 0 */
  390. /* USER CODE END TIM2_MspPostInit 0 */
  391. __HAL_RCC_GPIOA_CLK_ENABLE();
  392. /**TIM2 GPIO Configuration
  393. PA0 ------> TIM2_CH1
  394. PA1 ------> TIM2_CH2
  395. */
  396. GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1;
  397. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  398. GPIO_InitStruct.Pull = GPIO_NOPULL;
  399. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  400. GPIO_InitStruct.Alternate = GPIO_AF1_TIM2;
  401. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  402. /* USER CODE BEGIN TIM2_MspPostInit 1 */
  403. /* USER CODE END TIM2_MspPostInit 1 */
  404. }
  405. else if(timHandle->Instance==TIM12)
  406. {
  407. /* USER CODE BEGIN TIM12_MspPostInit 0 */
  408. /* USER CODE END TIM12_MspPostInit 0 */
  409. __HAL_RCC_GPIOB_CLK_ENABLE();
  410. /**TIM12 GPIO Configuration
  411. PB14 ------> TIM12_CH1
  412. PB15 ------> TIM12_CH2
  413. */
  414. GPIO_InitStruct.Pin = GPIO_PIN_14|GPIO_PIN_15;
  415. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  416. GPIO_InitStruct.Pull = GPIO_NOPULL;
  417. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  418. GPIO_InitStruct.Alternate = GPIO_AF2_TIM12;
  419. HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  420. /* USER CODE BEGIN TIM12_MspPostInit 1 */
  421. /* USER CODE END TIM12_MspPostInit 1 */
  422. }
  423. }
  424. void HAL_TIM_PWM_MspDeInit(TIM_HandleTypeDef* tim_pwmHandle)
  425. {
  426. if(tim_pwmHandle->Instance==TIM1)
  427. {
  428. /* USER CODE BEGIN TIM1_MspDeInit 0 */
  429. /* USER CODE END TIM1_MspDeInit 0 */
  430. /* Peripheral clock disable */
  431. __HAL_RCC_TIM1_CLK_DISABLE();
  432. /* USER CODE BEGIN TIM1_MspDeInit 1 */
  433. /* USER CODE END TIM1_MspDeInit 1 */
  434. }
  435. else if(tim_pwmHandle->Instance==TIM2)
  436. {
  437. /* USER CODE BEGIN TIM2_MspDeInit 0 */
  438. /* USER CODE END TIM2_MspDeInit 0 */
  439. /* Peripheral clock disable */
  440. __HAL_RCC_TIM2_CLK_DISABLE();
  441. /**TIM2 GPIO Configuration
  442. PA0 ------> TIM2_CH1
  443. PA1 ------> TIM2_CH2
  444. PA2 ------> TIM2_CH3
  445. PA3 ------> TIM2_CH4
  446. */
  447. HAL_GPIO_DeInit(GPIOA, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);
  448. /* TIM2 interrupt Deinit */
  449. HAL_NVIC_DisableIRQ(TIM2_IRQn);
  450. /* USER CODE BEGIN TIM2_MspDeInit 1 */
  451. /* USER CODE END TIM2_MspDeInit 1 */
  452. }
  453. else if(tim_pwmHandle->Instance==TIM4)
  454. {
  455. /* USER CODE BEGIN TIM4_MspDeInit 0 */
  456. /* USER CODE END TIM4_MspDeInit 0 */
  457. /* Peripheral clock disable */
  458. __HAL_RCC_TIM4_CLK_DISABLE();
  459. /* USER CODE BEGIN TIM4_MspDeInit 1 */
  460. /* USER CODE END TIM4_MspDeInit 1 */
  461. }
  462. else if(tim_pwmHandle->Instance==TIM12)
  463. {
  464. /* USER CODE BEGIN TIM12_MspDeInit 0 */
  465. /* USER CODE END TIM12_MspDeInit 0 */
  466. /* Peripheral clock disable */
  467. __HAL_RCC_TIM12_CLK_DISABLE();
  468. /* USER CODE BEGIN TIM12_MspDeInit 1 */
  469. /* USER CODE END TIM12_MspDeInit 1 */
  470. }
  471. }
  472. void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle)
  473. {
  474. if(tim_baseHandle->Instance==TIM3)
  475. {
  476. /* USER CODE BEGIN TIM3_MspDeInit 0 */
  477. /* USER CODE END TIM3_MspDeInit 0 */
  478. /* Peripheral clock disable */
  479. __HAL_RCC_TIM3_CLK_DISABLE();
  480. /* USER CODE BEGIN TIM3_MspDeInit 1 */
  481. /* USER CODE END TIM3_MspDeInit 1 */
  482. }
  483. else if(tim_baseHandle->Instance==TIM5)
  484. {
  485. /* USER CODE BEGIN TIM5_MspDeInit 0 */
  486. /* USER CODE END TIM5_MspDeInit 0 */
  487. /* Peripheral clock disable */
  488. __HAL_RCC_TIM5_CLK_DISABLE();
  489. /* TIM5 interrupt Deinit */
  490. HAL_NVIC_DisableIRQ(TIM5_IRQn);
  491. /* USER CODE BEGIN TIM5_MspDeInit 1 */
  492. /* USER CODE END TIM5_MspDeInit 1 */
  493. }
  494. }
  495. /* USER CODE BEGIN 1 */
  496. //pwm初始化
  497. void MY_TIM_PWM_INIT(void)
  498. {
  499. HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
  500. HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2);
  501. HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);
  502. HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_2);
  503. HAL_TIM_PWM_Start(&htim12, TIM_CHANNEL_1);
  504. HAL_TIM_PWM_Start(&htim12, TIM_CHANNEL_2);
  505. HAL_TIM_Base_Start_IT(&htim2);
  506. HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_3);
  507. HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_4);
  508. HAL_TIM_Base_Start_IT(&htim5);
  509. //设置占空比
  510. __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, 1000);
  511. __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_2, 1000);
  512. __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, 1000);
  513. __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_2, 1000);
  514. __HAL_TIM_SET_COMPARE(&htim12, TIM_CHANNEL_1, 1000);
  515. __HAL_TIM_SET_COMPARE(&htim12, TIM_CHANNEL_2, 1000);
  516. HAL_GPIO_WritePin(PWM_EN_GPIO_Port, PWM_EN_Pin, GPIO_PIN_SET); //使能PWM
  517. }
  518. uint32_t millis(void)
  519. {
  520. return HAL_GetTick();
  521. }
  522. //微妙级延迟
  523. void delay_us(uint16_t us)
  524. {
  525. HAL_TIM_Base_Start(&htim3);
  526. __HAL_TIM_SET_COUNTER(&htim3, 0);
  527. us = (us > 4) ? (us - 2) : 1;
  528. while (us > __HAL_TIM_GET_COUNTER(&htim3))
  529. ;
  530. HAL_TIM_Base_Stop(&htim3);
  531. }
  532. //水泵1
  533. void PUMP1_PWM_CONTROL(short pwm)
  534. {
  535. __HAL_TIM_SET_COMPARE(&htim12, TIM_CHANNEL_2, pwm);
  536. }
  537. //水泵2
  538. void PUMP2_PWM_CONTROL(short pwm)
  539. {
  540. __HAL_TIM_SET_COMPARE(&htim12, TIM_CHANNEL_1, pwm);
  541. }
  542. //播撒器1
  543. void SPRAY1_PWM_CONTROL(short pwm)
  544. {
  545. __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_2, pwm);
  546. }
  547. //播撒器2
  548. void SPRAY2_PWM_CONTROL(short pwm)
  549. {
  550. __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, pwm);
  551. }
  552. /* USER CODE END 1 */