tim.c 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925
  1. /**
  2. ******************************************************************************
  3. * File Name : TIM.c
  4. * Description : This file provides code for the configuration
  5. * of the TIM instances.
  6. ******************************************************************************
  7. * @attention
  8. *
  9. * <h2><center>&copy; Copyright (c) 2023 STMicroelectronics.
  10. * All rights reserved.</center></h2>
  11. *
  12. * This software component is licensed by ST under Ultimate Liberty license
  13. * SLA0044, the "License"; You may not use this file except in compliance with
  14. * the License. You may obtain a copy of the License at:
  15. * www.st.com/SLA0044
  16. *
  17. ******************************************************************************
  18. */
  19. /* Includes ------------------------------------------------------------------*/
  20. #include "tim.h"
  21. /* USER CODE BEGIN 0 */
  22. uint16_t ICP_Leak_Duty;
  23. uint16_t ICP_Leak_Period;
  24. uint16_t ICP_rising[2];
  25. uint16_t ICP_falling;
  26. uint8_t ICP_rising_idx;
  27. uint16_t SPWM_idx;
  28. /* USER CODE END 0 */
  29. TIM_HandleTypeDef htim1;
  30. TIM_HandleTypeDef htim4;
  31. TIM_HandleTypeDef htim5;
  32. TIM_HandleTypeDef htim6;
  33. TIM_HandleTypeDef htim9;
  34. TIM_HandleTypeDef htim10;
  35. TIM_HandleTypeDef htim11;
  36. TIM_HandleTypeDef htim12;
  37. TIM_HandleTypeDef htim13;
  38. TIM_HandleTypeDef htim14;
  39. /* TIM1 init function */
  40. void MX_TIM1_Init(void)
  41. {
  42. TIM_ClockConfigTypeDef sClockSourceConfig = {0};
  43. TIM_MasterConfigTypeDef sMasterConfig = {0};
  44. TIM_OC_InitTypeDef sConfigOC = {0};
  45. TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0};
  46. htim1.Instance = TIM1;
  47. htim1.Init.Prescaler = 168-1;
  48. htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
  49. htim1.Init.Period = 1000-1;
  50. htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  51. htim1.Init.RepetitionCounter = 0;
  52. htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  53. if (HAL_TIM_Base_Init(&htim1) != HAL_OK)
  54. {
  55. Error_Handler();
  56. }
  57. sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  58. if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK)
  59. {
  60. Error_Handler();
  61. }
  62. if (HAL_TIM_PWM_Init(&htim1) != HAL_OK)
  63. {
  64. Error_Handler();
  65. }
  66. sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  67. sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  68. if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)
  69. {
  70. Error_Handler();
  71. }
  72. sConfigOC.OCMode = TIM_OCMODE_PWM1;
  73. sConfigOC.Pulse = 0;
  74. sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  75. sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  76. sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
  77. sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
  78. if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
  79. {
  80. Error_Handler();
  81. }
  82. sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
  83. sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
  84. sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
  85. sBreakDeadTimeConfig.DeadTime = 0;
  86. sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;
  87. sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
  88. sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;
  89. if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK)
  90. {
  91. Error_Handler();
  92. }
  93. HAL_TIM_MspPostInit(&htim1);
  94. }
  95. /* TIM4 init function */
  96. void MX_TIM4_Init(void)
  97. {
  98. TIM_ClockConfigTypeDef sClockSourceConfig = {0};
  99. TIM_SlaveConfigTypeDef sSlaveConfig = {0};
  100. TIM_MasterConfigTypeDef sMasterConfig = {0};
  101. TIM_IC_InitTypeDef sConfigIC = {0};
  102. htim4.Instance = TIM4;
  103. htim4.Init.Prescaler = 84-1;
  104. htim4.Init.CounterMode = TIM_COUNTERMODE_UP;
  105. htim4.Init.Period = 1000-1;
  106. htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  107. htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  108. if (HAL_TIM_Base_Init(&htim4) != HAL_OK)
  109. {
  110. Error_Handler();
  111. }
  112. sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  113. if (HAL_TIM_ConfigClockSource(&htim4, &sClockSourceConfig) != HAL_OK)
  114. {
  115. Error_Handler();
  116. }
  117. if (HAL_TIM_IC_Init(&htim4) != HAL_OK)
  118. {
  119. Error_Handler();
  120. }
  121. sSlaveConfig.SlaveMode = TIM_SLAVEMODE_RESET;
  122. sSlaveConfig.InputTrigger = TIM_TS_TI1FP1;
  123. sSlaveConfig.TriggerPolarity = TIM_INPUTCHANNELPOLARITY_RISING;
  124. sSlaveConfig.TriggerFilter = 0;
  125. if (HAL_TIM_SlaveConfigSynchro(&htim4, &sSlaveConfig) != HAL_OK)
  126. {
  127. Error_Handler();
  128. }
  129. sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  130. sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_ENABLE;
  131. if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK)
  132. {
  133. Error_Handler();
  134. }
  135. sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_RISING;
  136. sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
  137. sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
  138. sConfigIC.ICFilter = 0;
  139. if (HAL_TIM_IC_ConfigChannel(&htim4, &sConfigIC, TIM_CHANNEL_1) != HAL_OK)
  140. {
  141. Error_Handler();
  142. }
  143. sConfigIC.ICSelection = TIM_ICSELECTION_INDIRECTTI;
  144. if (HAL_TIM_IC_ConfigChannel(&htim4, &sConfigIC, TIM_CHANNEL_2) != HAL_OK)
  145. {
  146. Error_Handler();
  147. }
  148. }
  149. /* TIM5 init function */
  150. void MX_TIM5_Init(void)
  151. {
  152. TIM_ClockConfigTypeDef sClockSourceConfig = {0};
  153. TIM_MasterConfigTypeDef sMasterConfig = {0};
  154. htim5.Instance = TIM5;
  155. htim5.Init.Prescaler = 84-1;
  156. htim5.Init.CounterMode = TIM_COUNTERMODE_UP;
  157. htim5.Init.Period = 10-1;
  158. htim5.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  159. htim5.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  160. if (HAL_TIM_Base_Init(&htim5) != HAL_OK)
  161. {
  162. Error_Handler();
  163. }
  164. sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  165. if (HAL_TIM_ConfigClockSource(&htim5, &sClockSourceConfig) != HAL_OK)
  166. {
  167. Error_Handler();
  168. }
  169. sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  170. sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  171. if (HAL_TIMEx_MasterConfigSynchronization(&htim5, &sMasterConfig) != HAL_OK)
  172. {
  173. Error_Handler();
  174. }
  175. }
  176. /* TIM6 init function */
  177. void MX_TIM6_Init(void)
  178. {
  179. TIM_MasterConfigTypeDef sMasterConfig = {0};
  180. htim6.Instance = TIM6;
  181. htim6.Init.Prescaler = 84-1;
  182. htim6.Init.CounterMode = TIM_COUNTERMODE_UP;
  183. htim6.Init.Period = 1000-1;
  184. htim6.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  185. if (HAL_TIM_Base_Init(&htim6) != HAL_OK)
  186. {
  187. Error_Handler();
  188. }
  189. sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  190. sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  191. if (HAL_TIMEx_MasterConfigSynchronization(&htim6, &sMasterConfig) != HAL_OK)
  192. {
  193. Error_Handler();
  194. }
  195. }
  196. /* TIM9 init function */
  197. void MX_TIM9_Init(void)
  198. {
  199. TIM_ClockConfigTypeDef sClockSourceConfig = {0};
  200. TIM_OC_InitTypeDef sConfigOC = {0};
  201. htim9.Instance = TIM9;
  202. htim9.Init.Prescaler = 84-1;
  203. htim9.Init.CounterMode = TIM_COUNTERMODE_UP;
  204. htim9.Init.Period = 1000-1;
  205. htim9.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  206. htim9.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  207. if (HAL_TIM_Base_Init(&htim9) != HAL_OK)
  208. {
  209. Error_Handler();
  210. }
  211. sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  212. if (HAL_TIM_ConfigClockSource(&htim9, &sClockSourceConfig) != HAL_OK)
  213. {
  214. Error_Handler();
  215. }
  216. if (HAL_TIM_PWM_Init(&htim9) != HAL_OK)
  217. {
  218. Error_Handler();
  219. }
  220. sConfigOC.OCMode = TIM_OCMODE_PWM1;
  221. sConfigOC.Pulse = 0;
  222. sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  223. sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  224. if (HAL_TIM_PWM_ConfigChannel(&htim9, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
  225. {
  226. Error_Handler();
  227. }
  228. if (HAL_TIM_PWM_ConfigChannel(&htim9, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
  229. {
  230. Error_Handler();
  231. }
  232. HAL_TIM_MspPostInit(&htim9);
  233. }
  234. /* TIM10 init function */
  235. void MX_TIM10_Init(void)
  236. {
  237. TIM_OC_InitTypeDef sConfigOC = {0};
  238. htim10.Instance = TIM10;
  239. htim10.Init.Prescaler = 84-1;
  240. htim10.Init.CounterMode = TIM_COUNTERMODE_UP;
  241. htim10.Init.Period = 1000-1;
  242. htim10.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  243. htim10.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  244. if (HAL_TIM_Base_Init(&htim10) != HAL_OK)
  245. {
  246. Error_Handler();
  247. }
  248. if (HAL_TIM_PWM_Init(&htim10) != HAL_OK)
  249. {
  250. Error_Handler();
  251. }
  252. sConfigOC.OCMode = TIM_OCMODE_PWM1;
  253. sConfigOC.Pulse = 0;
  254. sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  255. sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  256. if (HAL_TIM_PWM_ConfigChannel(&htim10, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
  257. {
  258. Error_Handler();
  259. }
  260. HAL_TIM_MspPostInit(&htim10);
  261. }
  262. /* TIM11 init function */
  263. void MX_TIM11_Init(void)
  264. {
  265. htim11.Instance = TIM11;
  266. htim11.Init.Prescaler = 84-1;
  267. htim11.Init.CounterMode = TIM_COUNTERMODE_UP;
  268. htim11.Init.Period = 1000-1;
  269. htim11.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  270. htim11.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  271. if (HAL_TIM_Base_Init(&htim11) != HAL_OK)
  272. {
  273. Error_Handler();
  274. }
  275. }
  276. /* TIM12 init function */
  277. void MX_TIM12_Init(void)
  278. {
  279. TIM_ClockConfigTypeDef sClockSourceConfig = {0};
  280. TIM_OC_InitTypeDef sConfigOC = {0};
  281. htim12.Instance = TIM12;
  282. htim12.Init.Prescaler = 21-1;
  283. htim12.Init.CounterMode = TIM_COUNTERMODE_UP;
  284. htim12.Init.Period = 400-1;
  285. htim12.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  286. htim12.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  287. if (HAL_TIM_Base_Init(&htim12) != HAL_OK)
  288. {
  289. Error_Handler();
  290. }
  291. sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  292. if (HAL_TIM_ConfigClockSource(&htim12, &sClockSourceConfig) != HAL_OK)
  293. {
  294. Error_Handler();
  295. }
  296. if (HAL_TIM_PWM_Init(&htim12) != HAL_OK)
  297. {
  298. Error_Handler();
  299. }
  300. sConfigOC.OCMode = TIM_OCMODE_PWM1;
  301. sConfigOC.Pulse = 0;
  302. sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  303. sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  304. if (HAL_TIM_PWM_ConfigChannel(&htim12, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
  305. {
  306. Error_Handler();
  307. }
  308. HAL_TIM_MspPostInit(&htim12);
  309. }
  310. /* TIM13 init function */
  311. void MX_TIM13_Init(void)
  312. {
  313. htim13.Instance = TIM13;
  314. htim13.Init.Prescaler = 21-1;
  315. htim13.Init.CounterMode = TIM_COUNTERMODE_UP;
  316. htim13.Init.Period = 400-1;
  317. htim13.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  318. htim13.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  319. if (HAL_TIM_Base_Init(&htim13) != HAL_OK)
  320. {
  321. Error_Handler();
  322. }
  323. }
  324. /* TIM14 init function */
  325. void MX_TIM14_Init(void)
  326. {
  327. htim14.Instance = TIM14;
  328. htim14.Init.Prescaler = 84-1;
  329. htim14.Init.CounterMode = TIM_COUNTERMODE_UP;
  330. htim14.Init.Period = 1000-1;
  331. htim14.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  332. htim14.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  333. if (HAL_TIM_Base_Init(&htim14) != HAL_OK)
  334. {
  335. Error_Handler();
  336. }
  337. }
  338. void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
  339. {
  340. GPIO_InitTypeDef GPIO_InitStruct = {0};
  341. if(tim_baseHandle->Instance==TIM1)
  342. {
  343. /* USER CODE BEGIN TIM1_MspInit 0 */
  344. /* USER CODE END TIM1_MspInit 0 */
  345. /* TIM1 clock enable */
  346. __HAL_RCC_TIM1_CLK_ENABLE();
  347. /* TIM1 interrupt Init */
  348. HAL_NVIC_SetPriority(TIM1_BRK_TIM9_IRQn, 5, 0);
  349. HAL_NVIC_EnableIRQ(TIM1_BRK_TIM9_IRQn);
  350. /* USER CODE BEGIN TIM1_MspInit 1 */
  351. /* USER CODE END TIM1_MspInit 1 */
  352. }
  353. else if(tim_baseHandle->Instance==TIM4)
  354. {
  355. /* USER CODE BEGIN TIM4_MspInit 0 */
  356. /* USER CODE END TIM4_MspInit 0 */
  357. /* TIM4 clock enable */
  358. __HAL_RCC_TIM4_CLK_ENABLE();
  359. __HAL_RCC_GPIOD_CLK_ENABLE();
  360. /**TIM4 GPIO Configuration
  361. PD12 ------> TIM4_CH1
  362. */
  363. GPIO_InitStruct.Pin = ICP_TIM4_CH1_LEAK_PWM_Pin;
  364. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  365. GPIO_InitStruct.Pull = GPIO_NOPULL;
  366. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  367. GPIO_InitStruct.Alternate = GPIO_AF2_TIM4;
  368. HAL_GPIO_Init(ICP_TIM4_CH1_LEAK_PWM_GPIO_Port, &GPIO_InitStruct);
  369. /* TIM4 interrupt Init */
  370. HAL_NVIC_SetPriority(TIM4_IRQn, 5, 0);
  371. HAL_NVIC_EnableIRQ(TIM4_IRQn);
  372. /* USER CODE BEGIN TIM4_MspInit 1 */
  373. /* USER CODE END TIM4_MspInit 1 */
  374. }
  375. else if(tim_baseHandle->Instance==TIM5)
  376. {
  377. /* USER CODE BEGIN TIM5_MspInit 0 */
  378. /* USER CODE END TIM5_MspInit 0 */
  379. /* TIM5 clock enable */
  380. __HAL_RCC_TIM5_CLK_ENABLE();
  381. /* TIM5 interrupt Init */
  382. HAL_NVIC_SetPriority(TIM5_IRQn, 5, 0);
  383. HAL_NVIC_EnableIRQ(TIM5_IRQn);
  384. /* USER CODE BEGIN TIM5_MspInit 1 */
  385. /* USER CODE END TIM5_MspInit 1 */
  386. }
  387. else if(tim_baseHandle->Instance==TIM6)
  388. {
  389. /* USER CODE BEGIN TIM6_MspInit 0 */
  390. /* USER CODE END TIM6_MspInit 0 */
  391. /* TIM6 clock enable */
  392. __HAL_RCC_TIM6_CLK_ENABLE();
  393. /* TIM6 interrupt Init */
  394. HAL_NVIC_SetPriority(TIM6_DAC_IRQn, 5, 0);
  395. HAL_NVIC_EnableIRQ(TIM6_DAC_IRQn);
  396. /* USER CODE BEGIN TIM6_MspInit 1 */
  397. /* USER CODE END TIM6_MspInit 1 */
  398. }
  399. else if(tim_baseHandle->Instance==TIM9)
  400. {
  401. /* USER CODE BEGIN TIM9_MspInit 0 */
  402. /* USER CODE END TIM9_MspInit 0 */
  403. /* TIM9 clock enable */
  404. __HAL_RCC_TIM9_CLK_ENABLE();
  405. /* TIM9 interrupt Init */
  406. HAL_NVIC_SetPriority(TIM1_BRK_TIM9_IRQn, 5, 0);
  407. HAL_NVIC_EnableIRQ(TIM1_BRK_TIM9_IRQn);
  408. /* USER CODE BEGIN TIM9_MspInit 1 */
  409. /* USER CODE END TIM9_MspInit 1 */
  410. }
  411. else if(tim_baseHandle->Instance==TIM10)
  412. {
  413. /* USER CODE BEGIN TIM10_MspInit 0 */
  414. /* USER CODE END TIM10_MspInit 0 */
  415. /* TIM10 clock enable */
  416. __HAL_RCC_TIM10_CLK_ENABLE();
  417. /* USER CODE BEGIN TIM10_MspInit 1 */
  418. /* USER CODE END TIM10_MspInit 1 */
  419. }
  420. else if(tim_baseHandle->Instance==TIM11)
  421. {
  422. /* USER CODE BEGIN TIM11_MspInit 0 */
  423. /* USER CODE END TIM11_MspInit 0 */
  424. /* TIM11 clock enable */
  425. __HAL_RCC_TIM11_CLK_ENABLE();
  426. /* USER CODE BEGIN TIM11_MspInit 1 */
  427. /* USER CODE END TIM11_MspInit 1 */
  428. }
  429. else if(tim_baseHandle->Instance==TIM12)
  430. {
  431. /* USER CODE BEGIN TIM12_MspInit 0 */
  432. /* USER CODE END TIM12_MspInit 0 */
  433. /* TIM12 clock enable */
  434. __HAL_RCC_TIM12_CLK_ENABLE();
  435. /* USER CODE BEGIN TIM12_MspInit 1 */
  436. /* USER CODE END TIM12_MspInit 1 */
  437. }
  438. else if(tim_baseHandle->Instance==TIM13)
  439. {
  440. /* USER CODE BEGIN TIM13_MspInit 0 */
  441. /* USER CODE END TIM13_MspInit 0 */
  442. /* TIM13 clock enable */
  443. __HAL_RCC_TIM13_CLK_ENABLE();
  444. /* TIM13 interrupt Init */
  445. HAL_NVIC_SetPriority(TIM8_UP_TIM13_IRQn, 5, 0);
  446. HAL_NVIC_EnableIRQ(TIM8_UP_TIM13_IRQn);
  447. /* USER CODE BEGIN TIM13_MspInit 1 */
  448. /* USER CODE END TIM13_MspInit 1 */
  449. }
  450. else if(tim_baseHandle->Instance==TIM14)
  451. {
  452. /* USER CODE BEGIN TIM14_MspInit 0 */
  453. /* USER CODE END TIM14_MspInit 0 */
  454. /* TIM14 clock enable */
  455. __HAL_RCC_TIM14_CLK_ENABLE();
  456. /* TIM14 interrupt Init */
  457. HAL_NVIC_SetPriority(TIM8_TRG_COM_TIM14_IRQn, 5, 0);
  458. HAL_NVIC_EnableIRQ(TIM8_TRG_COM_TIM14_IRQn);
  459. /* USER CODE BEGIN TIM14_MspInit 1 */
  460. /* USER CODE END TIM14_MspInit 1 */
  461. }
  462. }
  463. void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle)
  464. {
  465. GPIO_InitTypeDef GPIO_InitStruct = {0};
  466. if(timHandle->Instance==TIM1)
  467. {
  468. /* USER CODE BEGIN TIM1_MspPostInit 0 */
  469. /* USER CODE END TIM1_MspPostInit 0 */
  470. __HAL_RCC_GPIOE_CLK_ENABLE();
  471. /**TIM1 GPIO Configuration
  472. PE14 ------> TIM1_CH4
  473. */
  474. GPIO_InitStruct.Pin = TIM1_CH4_PWM_CP_Pin;
  475. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  476. GPIO_InitStruct.Pull = GPIO_NOPULL;
  477. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  478. GPIO_InitStruct.Alternate = GPIO_AF1_TIM1;
  479. HAL_GPIO_Init(TIM1_CH4_PWM_CP_GPIO_Port, &GPIO_InitStruct);
  480. /* USER CODE BEGIN TIM1_MspPostInit 1 */
  481. /* USER CODE END TIM1_MspPostInit 1 */
  482. }
  483. else if(timHandle->Instance==TIM9)
  484. {
  485. /* USER CODE BEGIN TIM9_MspPostInit 0 */
  486. /* USER CODE END TIM9_MspPostInit 0 */
  487. __HAL_RCC_GPIOE_CLK_ENABLE();
  488. /**TIM9 GPIO Configuration
  489. PE5 ------> TIM9_CH1
  490. PE6 ------> TIM9_CH2
  491. */
  492. GPIO_InitStruct.Pin = TIM9_CH1_PWM_LED_R_Pin|TIM9_CH2_PWM_LED_G_Pin;
  493. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  494. GPIO_InitStruct.Pull = GPIO_NOPULL;
  495. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  496. GPIO_InitStruct.Alternate = GPIO_AF3_TIM9;
  497. HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
  498. /* USER CODE BEGIN TIM9_MspPostInit 1 */
  499. /* USER CODE END TIM9_MspPostInit 1 */
  500. }
  501. else if(timHandle->Instance==TIM10)
  502. {
  503. /* USER CODE BEGIN TIM10_MspPostInit 0 */
  504. /* USER CODE END TIM10_MspPostInit 0 */
  505. __HAL_RCC_GPIOB_CLK_ENABLE();
  506. /**TIM10 GPIO Configuration
  507. PB8 ------> TIM10_CH1
  508. */
  509. GPIO_InitStruct.Pin = TIM10_CH1_PWM_LED_B_Pin;
  510. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  511. GPIO_InitStruct.Pull = GPIO_NOPULL;
  512. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  513. GPIO_InitStruct.Alternate = GPIO_AF3_TIM10;
  514. HAL_GPIO_Init(TIM10_CH1_PWM_LED_B_GPIO_Port, &GPIO_InitStruct);
  515. /* USER CODE BEGIN TIM10_MspPostInit 1 */
  516. /* USER CODE END TIM10_MspPostInit 1 */
  517. }
  518. else if(timHandle->Instance==TIM12)
  519. {
  520. /* USER CODE BEGIN TIM12_MspPostInit 0 */
  521. /* USER CODE END TIM12_MspPostInit 0 */
  522. __HAL_RCC_GPIOB_CLK_ENABLE();
  523. /**TIM12 GPIO Configuration
  524. PB14 ------> TIM12_CH1
  525. */
  526. GPIO_InitStruct.Pin = TIM12_CH1_PWM_GFCI_Test_Pin;
  527. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  528. GPIO_InitStruct.Pull = GPIO_NOPULL;
  529. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  530. GPIO_InitStruct.Alternate = GPIO_AF9_TIM12;
  531. HAL_GPIO_Init(TIM12_CH1_PWM_GFCI_Test_GPIO_Port, &GPIO_InitStruct);
  532. /* USER CODE BEGIN TIM12_MspPostInit 1 */
  533. /* USER CODE END TIM12_MspPostInit 1 */
  534. }
  535. }
  536. void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle)
  537. {
  538. if(tim_baseHandle->Instance==TIM1)
  539. {
  540. /* USER CODE BEGIN TIM1_MspDeInit 0 */
  541. /* USER CODE END TIM1_MspDeInit 0 */
  542. /* Peripheral clock disable */
  543. __HAL_RCC_TIM1_CLK_DISABLE();
  544. /* TIM1 interrupt Deinit */
  545. /* USER CODE BEGIN TIM1:TIM1_BRK_TIM9_IRQn disable */
  546. /**
  547. * Uncomment the line below to disable the "TIM1_BRK_TIM9_IRQn" interrupt
  548. * Be aware, disabling shared interrupt may affect other IPs
  549. */
  550. /* HAL_NVIC_DisableIRQ(TIM1_BRK_TIM9_IRQn); */
  551. /* USER CODE END TIM1:TIM1_BRK_TIM9_IRQn disable */
  552. /* USER CODE BEGIN TIM1_MspDeInit 1 */
  553. /* USER CODE END TIM1_MspDeInit 1 */
  554. }
  555. else if(tim_baseHandle->Instance==TIM4)
  556. {
  557. /* USER CODE BEGIN TIM4_MspDeInit 0 */
  558. /* USER CODE END TIM4_MspDeInit 0 */
  559. /* Peripheral clock disable */
  560. __HAL_RCC_TIM4_CLK_DISABLE();
  561. /**TIM4 GPIO Configuration
  562. PD12 ------> TIM4_CH1
  563. */
  564. HAL_GPIO_DeInit(ICP_TIM4_CH1_LEAK_PWM_GPIO_Port, ICP_TIM4_CH1_LEAK_PWM_Pin);
  565. /* TIM4 interrupt Deinit */
  566. HAL_NVIC_DisableIRQ(TIM4_IRQn);
  567. /* USER CODE BEGIN TIM4_MspDeInit 1 */
  568. /* USER CODE END TIM4_MspDeInit 1 */
  569. }
  570. else if(tim_baseHandle->Instance==TIM5)
  571. {
  572. /* USER CODE BEGIN TIM5_MspDeInit 0 */
  573. /* USER CODE END TIM5_MspDeInit 0 */
  574. /* Peripheral clock disable */
  575. __HAL_RCC_TIM5_CLK_DISABLE();
  576. /* TIM5 interrupt Deinit */
  577. HAL_NVIC_DisableIRQ(TIM5_IRQn);
  578. /* USER CODE BEGIN TIM5_MspDeInit 1 */
  579. /* USER CODE END TIM5_MspDeInit 1 */
  580. }
  581. else if(tim_baseHandle->Instance==TIM6)
  582. {
  583. /* USER CODE BEGIN TIM6_MspDeInit 0 */
  584. /* USER CODE END TIM6_MspDeInit 0 */
  585. /* Peripheral clock disable */
  586. __HAL_RCC_TIM6_CLK_DISABLE();
  587. /* TIM6 interrupt Deinit */
  588. HAL_NVIC_DisableIRQ(TIM6_DAC_IRQn);
  589. /* USER CODE BEGIN TIM6_MspDeInit 1 */
  590. /* USER CODE END TIM6_MspDeInit 1 */
  591. }
  592. else if(tim_baseHandle->Instance==TIM9)
  593. {
  594. /* USER CODE BEGIN TIM9_MspDeInit 0 */
  595. /* USER CODE END TIM9_MspDeInit 0 */
  596. /* Peripheral clock disable */
  597. __HAL_RCC_TIM9_CLK_DISABLE();
  598. /* TIM9 interrupt Deinit */
  599. /* USER CODE BEGIN TIM9:TIM1_BRK_TIM9_IRQn disable */
  600. /**
  601. * Uncomment the line below to disable the "TIM1_BRK_TIM9_IRQn" interrupt
  602. * Be aware, disabling shared interrupt may affect other IPs
  603. */
  604. /* HAL_NVIC_DisableIRQ(TIM1_BRK_TIM9_IRQn); */
  605. /* USER CODE END TIM9:TIM1_BRK_TIM9_IRQn disable */
  606. /* USER CODE BEGIN TIM9_MspDeInit 1 */
  607. /* USER CODE END TIM9_MspDeInit 1 */
  608. }
  609. else if(tim_baseHandle->Instance==TIM10)
  610. {
  611. /* USER CODE BEGIN TIM10_MspDeInit 0 */
  612. /* USER CODE END TIM10_MspDeInit 0 */
  613. /* Peripheral clock disable */
  614. __HAL_RCC_TIM10_CLK_DISABLE();
  615. /* USER CODE BEGIN TIM10_MspDeInit 1 */
  616. /* USER CODE END TIM10_MspDeInit 1 */
  617. }
  618. else if(tim_baseHandle->Instance==TIM11)
  619. {
  620. /* USER CODE BEGIN TIM11_MspDeInit 0 */
  621. /* USER CODE END TIM11_MspDeInit 0 */
  622. /* Peripheral clock disable */
  623. __HAL_RCC_TIM11_CLK_DISABLE();
  624. /* USER CODE BEGIN TIM11_MspDeInit 1 */
  625. /* USER CODE END TIM11_MspDeInit 1 */
  626. }
  627. else if(tim_baseHandle->Instance==TIM12)
  628. {
  629. /* USER CODE BEGIN TIM12_MspDeInit 0 */
  630. /* USER CODE END TIM12_MspDeInit 0 */
  631. /* Peripheral clock disable */
  632. __HAL_RCC_TIM12_CLK_DISABLE();
  633. /* USER CODE BEGIN TIM12_MspDeInit 1 */
  634. /* USER CODE END TIM12_MspDeInit 1 */
  635. }
  636. else if(tim_baseHandle->Instance==TIM13)
  637. {
  638. /* USER CODE BEGIN TIM13_MspDeInit 0 */
  639. /* USER CODE END TIM13_MspDeInit 0 */
  640. /* Peripheral clock disable */
  641. __HAL_RCC_TIM13_CLK_DISABLE();
  642. /* TIM13 interrupt Deinit */
  643. HAL_NVIC_DisableIRQ(TIM8_UP_TIM13_IRQn);
  644. /* USER CODE BEGIN TIM13_MspDeInit 1 */
  645. /* USER CODE END TIM13_MspDeInit 1 */
  646. }
  647. else if(tim_baseHandle->Instance==TIM14)
  648. {
  649. /* USER CODE BEGIN TIM14_MspDeInit 0 */
  650. /* USER CODE END TIM14_MspDeInit 0 */
  651. /* Peripheral clock disable */
  652. __HAL_RCC_TIM14_CLK_DISABLE();
  653. /* TIM14 interrupt Deinit */
  654. HAL_NVIC_DisableIRQ(TIM8_TRG_COM_TIM14_IRQn);
  655. /* USER CODE BEGIN TIM14_MspDeInit 1 */
  656. /* USER CODE END TIM14_MspDeInit 1 */
  657. }
  658. }
  659. /* USER CODE BEGIN 1 */
  660. #ifdef FUNC_CHECK_REQ_AND_CP_WHEN_SET_CP_PWM
  661. #include "cp_detection.h"
  662. #endif
  663. void user_pwm_setvalue(uint8_t ch, uint16_t value)
  664. {
  665. TIM_OC_InitTypeDef sConfigOC;
  666. sConfigOC.OCMode = TIM_OCMODE_PWM1;
  667. sConfigOC.Pulse = value;
  668. sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  669. sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  670. #ifdef MODIFY_MCU_PWM_SET_VALUE_CP
  671. static uint16_t PreCpPulseVal = 0xFFFF;
  672. #endif
  673. switch(ch)
  674. {
  675. case PWM_CH_CP:
  676. #ifdef FIX_FUNC_CHECK_REQ_AND_CP_WHEN_SET_CP_PWM
  677. if (Charger.memory.EVSE_Config.data.item.MCU_Control_Mode == MCU_CONTROL_MODE_NO_CSU)
  678. {
  679. if (Charger.CP_State == SYSTEM_STATE_A)
  680. {
  681. sConfigOC.Pulse = value = PWM_DUTY_FULL;
  682. }
  683. #ifdef MODIFY_NO_CP_PWM_WHEN_SOCKET_E_IS_ON
  684. if (Charger.isOnSocketE == ON)
  685. {
  686. sConfigOC.Pulse = value = PWM_DUTY_FULL;
  687. }
  688. #endif
  689. }
  690. else if (Charger.memory.EVSE_Config.data.item.MCU_Control_Mode == MCU_CONTROL_MODE_CSU)
  691. {
  692. if (!Charger.am3352.isRequestOn || Charger.CP_State == SYSTEM_STATE_A)
  693. {
  694. sConfigOC.Pulse = value = PWM_DUTY_FULL;
  695. }
  696. #ifdef MODIFY_NO_CP_PWM_WHEN_SOCKET_E_IS_ON
  697. if (Charger.isOnSocketE == ON)
  698. {
  699. sConfigOC.Pulse = value = PWM_DUTY_FULL;
  700. }
  701. #endif
  702. }
  703. #else //FIX_FUNC_CHECK_REQ_AND_CP_WHEN_SET_CP_PWM
  704. //#ifdef FUNC_CHECK_REQ_AND_CP_WHEN_SET_CP_PWM
  705. // if (!Charger.am3352.isRequestOn || Charger.CP_State == SYSTEM_STATE_A)
  706. // {
  707. // sConfigOC.Pulse = value = PWM_DUTY_FULL;
  708. // }
  709. //#endif
  710. #endif //FIX_FUNC_CHECK_REQ_AND_CP_WHEN_SET_CP_PWM
  711. #ifdef MODIFY_MCU_PWM_SET_VALUE_CP
  712. if (value != PreCpPulseVal)
  713. {
  714. PreCpPulseVal = value;
  715. XP("\r\n#USER_CP_PWM_SETVALUE(%d)\r\n\r\n", value);
  716. #ifdef FUNC_CURRENT_CP_PWM_DATA
  717. Charger.m_CP_CurPWM = value;
  718. #endif
  719. #ifdef MODIFY_SET_CP_PWM_DUTY_WHEN_GET_NEW_VAL
  720. HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_4);
  721. HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_4);
  722. #endif
  723. }
  724. #endif //MODIFY_MCU_PWM_SET_VALUE_CP
  725. #ifndef MODIFY_SET_CP_PWM_DUTY_WHEN_GET_NEW_VAL
  726. HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_4);
  727. HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_4);
  728. #endif
  729. break;
  730. case PWM_CH_LED_R:
  731. #ifdef FUNC_AW48_EXT_LED
  732. if (Charger.m_bModelNameAW48_1P)
  733. {
  734. EXTLED_SET_R(value > 0);
  735. }
  736. #endif
  737. HAL_TIM_PWM_ConfigChannel(&htim9, &sConfigOC, TIM_CHANNEL_1);
  738. HAL_TIM_PWM_Start(&htim9, TIM_CHANNEL_1);
  739. break;
  740. case PWM_CH_LED_G:
  741. #ifdef FUNC_AW48_EXT_LED
  742. if (Charger.m_bModelNameAW48_1P)
  743. {
  744. EXTLED_SET_G(value > 0);
  745. }
  746. #endif
  747. HAL_TIM_PWM_ConfigChannel(&htim9, &sConfigOC, TIM_CHANNEL_2);
  748. HAL_TIM_PWM_Start(&htim9, TIM_CHANNEL_2);
  749. break;
  750. case PWM_CH_LED_B:
  751. #ifdef FUNC_AW48_EXT_LED
  752. if (Charger.m_bModelNameAW48_1P)
  753. {
  754. EXTLED_SET_B(value > 0);
  755. }
  756. #endif
  757. HAL_TIM_PWM_ConfigChannel(&htim10, &sConfigOC, TIM_CHANNEL_1);
  758. HAL_TIM_PWM_Start(&htim10, TIM_CHANNEL_1);
  759. break;
  760. case PWM_CH_LED_W:
  761. HAL_TIM_PWM_ConfigChannel(&htim11, &sConfigOC, TIM_CHANNEL_1);
  762. HAL_TIM_PWM_Start(&htim11, TIM_CHANNEL_1);
  763. break;
  764. case PWM_CH_GFCI_TEST:
  765. HAL_TIM_PWM_ConfigChannel(&htim12, &sConfigOC, TIM_CHANNEL_1);
  766. HAL_TIM_PWM_Start(&htim12, TIM_CHANNEL_1);
  767. break;
  768. }
  769. }
  770. //------------------------------------------------------------------------------
  771. void SPWM_Switch(uint8_t isOn)
  772. {
  773. XP("#SPWM_Switch: %s\r\n", isOn ? "ON" : "OFF");
  774. if(isOn)
  775. {
  776. HAL_TIM_Base_Start_IT(&htim13);
  777. }
  778. else
  779. {
  780. HAL_TIM_Base_Stop_IT(&htim13);
  781. user_pwm_setvalue(PWM_CH_GFCI_TEST, 0);
  782. }
  783. }
  784. //------------------------------------------------------------------------------
  785. void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
  786. {
  787. if(htim->Instance == TIM4)
  788. {
  789. if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1)
  790. {
  791. ICP_rising[ICP_rising_idx] = HAL_TIM_ReadCapturedValue(&htim4, TIM_CHANNEL_1);
  792. if(ICP_rising_idx++>1)
  793. ICP_rising_idx = 0;
  794. if(ICP_rising[1] > ICP_rising[0])
  795. ICP_Leak_Period = ICP_rising[1] - ICP_rising[0];
  796. }
  797. else if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_2)
  798. {
  799. ICP_falling = HAL_TIM_ReadCapturedValue(&htim4, TIM_CHANNEL_2);
  800. if(ICP_falling > ICP_rising[0])
  801. ICP_Leak_Duty = ICP_falling - ICP_rising[0];
  802. }
  803. }
  804. }
  805. /* USER CODE END 1 */
  806. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/