adc.c 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627
  1. /* USER CODE BEGIN Header */
  2. /**
  3. ******************************************************************************
  4. * @file adc.c
  5. * @brief This file provides code for the configuration
  6. * of the ADC instances.
  7. ******************************************************************************
  8. * @attention
  9. *
  10. * Copyright (c) 2022 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 "adc.h"
  22. /* USER CODE BEGIN 0 */
  23. uint32_t ADC1_Buf[(ADC1_CHANEL_COUNT*ADC1_SAMPLE_COUNT)], ADC1_Value[ADC1_CHANEL_COUNT];
  24. uint32_t ADC2_Buf[(ADC2_CHANEL_COUNT*ADC2_SAMPLE_COUNT)], ADC2_Value[ADC2_CHANEL_COUNT];
  25. uint32_t ADC3_Buf[(ADC3_CHANEL_COUNT*ADC3_SAMPLE_COUNT)], ADC3_Value[ADC3_CHANEL_COUNT];
  26. uint32_t L1_ADC_Each_Value[ADC2_SAMPLE_COUNT];
  27. uint32_t L2_ADC_Each_Value[ADC2_SAMPLE_COUNT];
  28. uint32_t L3_ADC_Each_Value[ADC2_SAMPLE_COUNT];
  29. uint8_t bADC1_Done;
  30. uint8_t bADC2_Done;
  31. uint8_t bADC3_Done;
  32. struct ADC_VALUE adc_value;
  33. /* USER CODE END 0 */
  34. ADC_HandleTypeDef hadc1;
  35. ADC_HandleTypeDef hadc2;
  36. ADC_HandleTypeDef hadc3;
  37. DMA_HandleTypeDef hdma_adc1;
  38. DMA_HandleTypeDef hdma_adc2;
  39. DMA_HandleTypeDef hdma_adc3;
  40. /* ADC1 init function */
  41. void MX_ADC1_Init(void)
  42. {
  43. /* USER CODE BEGIN ADC1_Init 0 */
  44. /* USER CODE END ADC1_Init 0 */
  45. ADC_ChannelConfTypeDef sConfig = {0};
  46. /* USER CODE BEGIN ADC1_Init 1 */
  47. /* USER CODE END ADC1_Init 1 */
  48. /** Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion)
  49. */
  50. hadc1.Instance = ADC1;
  51. hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV6;
  52. hadc1.Init.Resolution = ADC_RESOLUTION_12B;
  53. hadc1.Init.ScanConvMode = ENABLE;
  54. hadc1.Init.ContinuousConvMode = ENABLE;
  55. hadc1.Init.DiscontinuousConvMode = DISABLE;
  56. hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
  57. hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
  58. hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
  59. hadc1.Init.NbrOfConversion = 9;
  60. hadc1.Init.DMAContinuousRequests = ENABLE;
  61. hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
  62. if (HAL_ADC_Init(&hadc1) != HAL_OK)
  63. {
  64. Error_Handler();
  65. }
  66. /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time.
  67. */
  68. sConfig.Channel = ADC_CHANNEL_4;
  69. sConfig.Rank = 1;
  70. sConfig.SamplingTime = ADC_SAMPLETIME_84CYCLES;
  71. if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  72. {
  73. Error_Handler();
  74. }
  75. /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time.
  76. */
  77. sConfig.Channel = ADC_CHANNEL_5;
  78. sConfig.Rank = 2;
  79. if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  80. {
  81. Error_Handler();
  82. }
  83. /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time.
  84. */
  85. sConfig.Channel = ADC_CHANNEL_6;
  86. sConfig.Rank = 3;
  87. if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  88. {
  89. Error_Handler();
  90. }
  91. /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time.
  92. */
  93. sConfig.Channel = ADC_CHANNEL_7;
  94. sConfig.Rank = 4;
  95. if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  96. {
  97. Error_Handler();
  98. }
  99. /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time.
  100. */
  101. sConfig.Channel = ADC_CHANNEL_9;
  102. sConfig.Rank = 5;
  103. if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  104. {
  105. Error_Handler();
  106. }
  107. /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time.
  108. */
  109. sConfig.Channel = ADC_CHANNEL_11;
  110. sConfig.Rank = 6;
  111. if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  112. {
  113. Error_Handler();
  114. }
  115. /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time.
  116. */
  117. sConfig.Channel = ADC_CHANNEL_12;
  118. sConfig.Rank = 7;
  119. if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  120. {
  121. Error_Handler();
  122. }
  123. /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time.
  124. */
  125. sConfig.Channel = ADC_CHANNEL_13;
  126. sConfig.Rank = 8;
  127. if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  128. {
  129. Error_Handler();
  130. }
  131. /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time.
  132. */
  133. sConfig.Channel = ADC_CHANNEL_0;
  134. sConfig.Rank = 9;
  135. if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  136. {
  137. Error_Handler();
  138. }
  139. /* USER CODE BEGIN ADC1_Init 2 */
  140. /* USER CODE END ADC1_Init 2 */
  141. }
  142. /* ADC2 init function */
  143. void MX_ADC2_Init(void)
  144. {
  145. /* USER CODE BEGIN ADC2_Init 0 */
  146. /* USER CODE END ADC2_Init 0 */
  147. ADC_ChannelConfTypeDef sConfig = {0};
  148. /* USER CODE BEGIN ADC2_Init 1 */
  149. /* USER CODE END ADC2_Init 1 */
  150. /** Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion)
  151. */
  152. hadc2.Instance = ADC2;
  153. hadc2.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV6;
  154. hadc2.Init.Resolution = ADC_RESOLUTION_12B;
  155. hadc2.Init.ScanConvMode = ENABLE;
  156. hadc2.Init.ContinuousConvMode = ENABLE;
  157. hadc2.Init.DiscontinuousConvMode = DISABLE;
  158. hadc2.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
  159. hadc2.Init.ExternalTrigConv = ADC_SOFTWARE_START;
  160. hadc2.Init.DataAlign = ADC_DATAALIGN_RIGHT;
  161. hadc2.Init.NbrOfConversion = 3;
  162. hadc2.Init.DMAContinuousRequests = ENABLE;
  163. hadc2.Init.EOCSelection = ADC_EOC_SEQ_CONV;
  164. if (HAL_ADC_Init(&hadc2) != HAL_OK)
  165. {
  166. Error_Handler();
  167. }
  168. /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time.
  169. */
  170. sConfig.Channel = ADC_CHANNEL_14;
  171. sConfig.Rank = 1;
  172. sConfig.SamplingTime = ADC_SAMPLETIME_480CYCLES;
  173. if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK)
  174. {
  175. Error_Handler();
  176. }
  177. /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time.
  178. */
  179. sConfig.Channel = ADC_CHANNEL_15;
  180. sConfig.Rank = 2;
  181. if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK)
  182. {
  183. Error_Handler();
  184. }
  185. /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time.
  186. */
  187. sConfig.Channel = ADC_CHANNEL_8;
  188. sConfig.Rank = 3;
  189. if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK)
  190. {
  191. Error_Handler();
  192. }
  193. /* USER CODE BEGIN ADC2_Init 2 */
  194. /* USER CODE END ADC2_Init 2 */
  195. }
  196. /* ADC3 init function */
  197. void MX_ADC3_Init(void)
  198. {
  199. /* USER CODE BEGIN ADC3_Init 0 */
  200. /* USER CODE END ADC3_Init 0 */
  201. ADC_AnalogWDGConfTypeDef AnalogWDGConfig = {0};
  202. ADC_ChannelConfTypeDef sConfig = {0};
  203. /* USER CODE BEGIN ADC3_Init 1 */
  204. /* USER CODE END ADC3_Init 1 */
  205. /** Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion)
  206. */
  207. hadc3.Instance = ADC3;
  208. hadc3.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV6;
  209. hadc3.Init.Resolution = ADC_RESOLUTION_12B;
  210. hadc3.Init.ScanConvMode = ENABLE;
  211. hadc3.Init.ContinuousConvMode = ENABLE;
  212. hadc3.Init.DiscontinuousConvMode = DISABLE;
  213. hadc3.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
  214. hadc3.Init.ExternalTrigConv = ADC_SOFTWARE_START;
  215. hadc3.Init.DataAlign = ADC_DATAALIGN_RIGHT;
  216. hadc3.Init.NbrOfConversion = 3;
  217. hadc3.Init.DMAContinuousRequests = ENABLE;
  218. hadc3.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
  219. if (HAL_ADC_Init(&hadc3) != HAL_OK)
  220. {
  221. Error_Handler();
  222. }
  223. /** Configure the analog watchdog
  224. */
  225. AnalogWDGConfig.WatchdogMode = ADC_ANALOGWATCHDOG_SINGLE_REG;
  226. AnalogWDGConfig.HighThreshold = 0;
  227. AnalogWDGConfig.LowThreshold = 0;
  228. AnalogWDGConfig.Channel = ADC_CHANNEL_4;
  229. AnalogWDGConfig.ITMode = DISABLE;
  230. if (HAL_ADC_AnalogWDGConfig(&hadc3, &AnalogWDGConfig) != HAL_OK)
  231. {
  232. Error_Handler();
  233. }
  234. /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time.
  235. */
  236. sConfig.Channel = ADC_CHANNEL_4;
  237. sConfig.Rank = 1;
  238. sConfig.SamplingTime = ADC_SAMPLETIME_84CYCLES;
  239. if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK)
  240. {
  241. Error_Handler();
  242. }
  243. /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time.
  244. */
  245. sConfig.Channel = ADC_CHANNEL_5;
  246. sConfig.Rank = 2;
  247. if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK)
  248. {
  249. Error_Handler();
  250. }
  251. /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time.
  252. */
  253. sConfig.Channel = ADC_CHANNEL_8;
  254. sConfig.Rank = 3;
  255. if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK)
  256. {
  257. Error_Handler();
  258. }
  259. /* USER CODE BEGIN ADC3_Init 2 */
  260. /* USER CODE END ADC3_Init 2 */
  261. }
  262. void HAL_ADC_MspInit(ADC_HandleTypeDef* adcHandle)
  263. {
  264. GPIO_InitTypeDef GPIO_InitStruct = {0};
  265. if(adcHandle->Instance==ADC1)
  266. {
  267. /* USER CODE BEGIN ADC1_MspInit 0 */
  268. /* USER CODE END ADC1_MspInit 0 */
  269. /* ADC1 clock enable */
  270. __HAL_RCC_ADC1_CLK_ENABLE();
  271. __HAL_RCC_GPIOC_CLK_ENABLE();
  272. __HAL_RCC_GPIOA_CLK_ENABLE();
  273. __HAL_RCC_GPIOB_CLK_ENABLE();
  274. /**ADC1 GPIO Configuration
  275. PC1 ------> ADC1_IN11
  276. PC2 ------> ADC1_IN12
  277. PC3 ------> ADC1_IN13
  278. PA0/WKUP ------> ADC1_IN0
  279. PA4 ------> ADC1_IN4
  280. PA5 ------> ADC1_IN5
  281. PA6 ------> ADC1_IN6
  282. PA7 ------> ADC1_IN7
  283. PB1 ------> ADC1_IN9
  284. */
  285. GPIO_InitStruct.Pin = SMR3_Relay_Voltage_Pin|SMR4_Relay_Voltage_Pin|SMR5_Relay_Voltage_Pin;
  286. GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  287. GPIO_InitStruct.Pull = GPIO_NOPULL;
  288. HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
  289. GPIO_InitStruct.Pin = SMR6_Relay_Voltage_Pin|SMR1_Relay_Voltage_Pin|SMR1_Current_Pin|SMR2_Relay_Voltage_Pin
  290. |SMR2_Current_Pin;
  291. GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  292. GPIO_InitStruct.Pull = GPIO_NOPULL;
  293. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  294. GPIO_InitStruct.Pin = Vref_165_Pin;
  295. GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  296. GPIO_InitStruct.Pull = GPIO_NOPULL;
  297. HAL_GPIO_Init(Vref_165_GPIO_Port, &GPIO_InitStruct);
  298. /* ADC1 DMA Init */
  299. /* ADC1 Init */
  300. hdma_adc1.Instance = DMA2_Stream0;
  301. hdma_adc1.Init.Channel = DMA_CHANNEL_0;
  302. hdma_adc1.Init.Direction = DMA_PERIPH_TO_MEMORY;
  303. hdma_adc1.Init.PeriphInc = DMA_PINC_DISABLE;
  304. hdma_adc1.Init.MemInc = DMA_MINC_ENABLE;
  305. hdma_adc1.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;
  306. hdma_adc1.Init.MemDataAlignment = DMA_MDATAALIGN_WORD;
  307. hdma_adc1.Init.Mode = DMA_CIRCULAR;
  308. hdma_adc1.Init.Priority = DMA_PRIORITY_HIGH;
  309. hdma_adc1.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
  310. if (HAL_DMA_Init(&hdma_adc1) != HAL_OK)
  311. {
  312. Error_Handler();
  313. }
  314. __HAL_LINKDMA(adcHandle,DMA_Handle,hdma_adc1);
  315. /* ADC1 interrupt Init */
  316. HAL_NVIC_SetPriority(ADC_IRQn, 5, 0);
  317. HAL_NVIC_EnableIRQ(ADC_IRQn);
  318. /* USER CODE BEGIN ADC1_MspInit 1 */
  319. /* USER CODE END ADC1_MspInit 1 */
  320. }
  321. else if(adcHandle->Instance==ADC2)
  322. {
  323. /* USER CODE BEGIN ADC2_MspInit 0 */
  324. /* USER CODE END ADC2_MspInit 0 */
  325. /* ADC2 clock enable */
  326. __HAL_RCC_ADC2_CLK_ENABLE();
  327. __HAL_RCC_GPIOC_CLK_ENABLE();
  328. __HAL_RCC_GPIOB_CLK_ENABLE();
  329. /**ADC2 GPIO Configuration
  330. PC4 ------> ADC2_IN14
  331. PC5 ------> ADC2_IN15
  332. PB0 ------> ADC2_IN8
  333. */
  334. GPIO_InitStruct.Pin = AC_Input_L1_Pin|AC_Input_L2_Pin;
  335. GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  336. GPIO_InitStruct.Pull = GPIO_NOPULL;
  337. HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
  338. GPIO_InitStruct.Pin = AC_Input_L3_Pin;
  339. GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  340. GPIO_InitStruct.Pull = GPIO_NOPULL;
  341. HAL_GPIO_Init(AC_Input_L3_GPIO_Port, &GPIO_InitStruct);
  342. /* ADC2 DMA Init */
  343. /* ADC2 Init */
  344. hdma_adc2.Instance = DMA2_Stream2;
  345. hdma_adc2.Init.Channel = DMA_CHANNEL_1;
  346. hdma_adc2.Init.Direction = DMA_PERIPH_TO_MEMORY;
  347. hdma_adc2.Init.PeriphInc = DMA_PINC_DISABLE;
  348. hdma_adc2.Init.MemInc = DMA_MINC_ENABLE;
  349. hdma_adc2.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;
  350. hdma_adc2.Init.MemDataAlignment = DMA_MDATAALIGN_WORD;
  351. hdma_adc2.Init.Mode = DMA_CIRCULAR;
  352. hdma_adc2.Init.Priority = DMA_PRIORITY_HIGH;
  353. hdma_adc2.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
  354. if (HAL_DMA_Init(&hdma_adc2) != HAL_OK)
  355. {
  356. Error_Handler();
  357. }
  358. __HAL_LINKDMA(adcHandle,DMA_Handle,hdma_adc2);
  359. /* ADC2 interrupt Init */
  360. HAL_NVIC_SetPriority(ADC_IRQn, 5, 0);
  361. HAL_NVIC_EnableIRQ(ADC_IRQn);
  362. /* USER CODE BEGIN ADC2_MspInit 1 */
  363. /* USER CODE END ADC2_MspInit 1 */
  364. }
  365. else if(adcHandle->Instance==ADC3)
  366. {
  367. /* USER CODE BEGIN ADC3_MspInit 0 */
  368. /* USER CODE END ADC3_MspInit 0 */
  369. /* ADC3 clock enable */
  370. __HAL_RCC_ADC3_CLK_ENABLE();
  371. __HAL_RCC_GPIOF_CLK_ENABLE();
  372. /**ADC3 GPIO Configuration
  373. PF6 ------> ADC3_IN4
  374. PF7 ------> ADC3_IN5
  375. PF10 ------> ADC3_IN8
  376. */
  377. GPIO_InitStruct.Pin = SMR1_Gfd_Sense_Pin|SMR2_Gfd_Sense_Pin|DC_In_Pin;
  378. GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  379. GPIO_InitStruct.Pull = GPIO_NOPULL;
  380. HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);
  381. /* ADC3 DMA Init */
  382. /* ADC3 Init */
  383. hdma_adc3.Instance = DMA2_Stream1;
  384. hdma_adc3.Init.Channel = DMA_CHANNEL_2;
  385. hdma_adc3.Init.Direction = DMA_PERIPH_TO_MEMORY;
  386. hdma_adc3.Init.PeriphInc = DMA_PINC_DISABLE;
  387. hdma_adc3.Init.MemInc = DMA_MINC_ENABLE;
  388. hdma_adc3.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;
  389. hdma_adc3.Init.MemDataAlignment = DMA_MDATAALIGN_WORD;
  390. hdma_adc3.Init.Mode = DMA_CIRCULAR;
  391. hdma_adc3.Init.Priority = DMA_PRIORITY_HIGH;
  392. hdma_adc3.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
  393. if (HAL_DMA_Init(&hdma_adc3) != HAL_OK)
  394. {
  395. Error_Handler();
  396. }
  397. __HAL_LINKDMA(adcHandle,DMA_Handle,hdma_adc3);
  398. /* ADC3 interrupt Init */
  399. HAL_NVIC_SetPriority(ADC_IRQn, 5, 0);
  400. HAL_NVIC_EnableIRQ(ADC_IRQn);
  401. /* USER CODE BEGIN ADC3_MspInit 1 */
  402. /* USER CODE END ADC3_MspInit 1 */
  403. }
  404. }
  405. void HAL_ADC_MspDeInit(ADC_HandleTypeDef* adcHandle)
  406. {
  407. if(adcHandle->Instance==ADC1)
  408. {
  409. /* USER CODE BEGIN ADC1_MspDeInit 0 */
  410. /* USER CODE END ADC1_MspDeInit 0 */
  411. /* Peripheral clock disable */
  412. __HAL_RCC_ADC1_CLK_DISABLE();
  413. /**ADC1 GPIO Configuration
  414. PC1 ------> ADC1_IN11
  415. PC2 ------> ADC1_IN12
  416. PC3 ------> ADC1_IN13
  417. PA0/WKUP ------> ADC1_IN0
  418. PA4 ------> ADC1_IN4
  419. PA5 ------> ADC1_IN5
  420. PA6 ------> ADC1_IN6
  421. PA7 ------> ADC1_IN7
  422. PB1 ------> ADC1_IN9
  423. */
  424. HAL_GPIO_DeInit(GPIOC, SMR3_Relay_Voltage_Pin|SMR4_Relay_Voltage_Pin|SMR5_Relay_Voltage_Pin);
  425. HAL_GPIO_DeInit(GPIOA, SMR6_Relay_Voltage_Pin|SMR1_Relay_Voltage_Pin|SMR1_Current_Pin|SMR2_Relay_Voltage_Pin
  426. |SMR2_Current_Pin);
  427. HAL_GPIO_DeInit(Vref_165_GPIO_Port, Vref_165_Pin);
  428. /* ADC1 DMA DeInit */
  429. HAL_DMA_DeInit(adcHandle->DMA_Handle);
  430. /* ADC1 interrupt Deinit */
  431. /* USER CODE BEGIN ADC1:ADC_IRQn disable */
  432. /**
  433. * Uncomment the line below to disable the "ADC_IRQn" interrupt
  434. * Be aware, disabling shared interrupt may affect other IPs
  435. */
  436. /* HAL_NVIC_DisableIRQ(ADC_IRQn); */
  437. /* USER CODE END ADC1:ADC_IRQn disable */
  438. /* USER CODE BEGIN ADC1_MspDeInit 1 */
  439. /* USER CODE END ADC1_MspDeInit 1 */
  440. }
  441. else if(adcHandle->Instance==ADC2)
  442. {
  443. /* USER CODE BEGIN ADC2_MspDeInit 0 */
  444. /* USER CODE END ADC2_MspDeInit 0 */
  445. /* Peripheral clock disable */
  446. __HAL_RCC_ADC2_CLK_DISABLE();
  447. /**ADC2 GPIO Configuration
  448. PC4 ------> ADC2_IN14
  449. PC5 ------> ADC2_IN15
  450. PB0 ------> ADC2_IN8
  451. */
  452. HAL_GPIO_DeInit(GPIOC, AC_Input_L1_Pin|AC_Input_L2_Pin);
  453. HAL_GPIO_DeInit(AC_Input_L3_GPIO_Port, AC_Input_L3_Pin);
  454. /* ADC2 DMA DeInit */
  455. HAL_DMA_DeInit(adcHandle->DMA_Handle);
  456. /* ADC2 interrupt Deinit */
  457. /* USER CODE BEGIN ADC2:ADC_IRQn disable */
  458. /**
  459. * Uncomment the line below to disable the "ADC_IRQn" interrupt
  460. * Be aware, disabling shared interrupt may affect other IPs
  461. */
  462. /* HAL_NVIC_DisableIRQ(ADC_IRQn); */
  463. /* USER CODE END ADC2:ADC_IRQn disable */
  464. /* USER CODE BEGIN ADC2_MspDeInit 1 */
  465. /* USER CODE END ADC2_MspDeInit 1 */
  466. }
  467. else if(adcHandle->Instance==ADC3)
  468. {
  469. /* USER CODE BEGIN ADC3_MspDeInit 0 */
  470. /* USER CODE END ADC3_MspDeInit 0 */
  471. /* Peripheral clock disable */
  472. __HAL_RCC_ADC3_CLK_DISABLE();
  473. /**ADC3 GPIO Configuration
  474. PF6 ------> ADC3_IN4
  475. PF7 ------> ADC3_IN5
  476. PF10 ------> ADC3_IN8
  477. */
  478. HAL_GPIO_DeInit(GPIOF, SMR1_Gfd_Sense_Pin|SMR2_Gfd_Sense_Pin|DC_In_Pin);
  479. /* ADC3 DMA DeInit */
  480. HAL_DMA_DeInit(adcHandle->DMA_Handle);
  481. /* ADC3 interrupt Deinit */
  482. /* USER CODE BEGIN ADC3:ADC_IRQn disable */
  483. /**
  484. * Uncomment the line below to disable the "ADC_IRQn" interrupt
  485. * Be aware, disabling shared interrupt may affect other IPs
  486. */
  487. /* HAL_NVIC_DisableIRQ(ADC_IRQn); */
  488. /* USER CODE END ADC3:ADC_IRQn disable */
  489. /* USER CODE BEGIN ADC3_MspDeInit 1 */
  490. /* USER CODE END ADC3_MspDeInit 1 */
  491. }
  492. }
  493. /* USER CODE BEGIN 1 */
  494. void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* AdcHandle)
  495. {
  496. if(AdcHandle->Instance==ADC1)
  497. {
  498. bADC1_Done = ON;
  499. HAL_ADC_Stop_DMA(&hadc1);
  500. }
  501. if(AdcHandle->Instance==ADC2)
  502. {
  503. bADC2_Done = ON;
  504. HAL_ADC_Stop_DMA(&hadc2);
  505. }
  506. if(AdcHandle->Instance==ADC3)
  507. {
  508. bADC3_Done = ON;
  509. HAL_ADC_Stop_DMA(&hadc3);
  510. }
  511. }
  512. uint8_t adc_filter_move_avg(ADC_MOVE_AVG_FILTER *data, uint32_t value)
  513. {
  514. uint8_t result = FAIL;
  515. uint32_t buf = 0;
  516. data->buffer[data->idx_put] = value;
  517. if(++data->idx_put>=LIMIT_MOVE_FILTER)data->idx_put=0;
  518. for(int idx=0;idx<LIMIT_MOVE_FILTER;idx++)
  519. {
  520. buf += data->buffer[idx];
  521. }
  522. data->value = buf/LIMIT_MOVE_FILTER;
  523. return result;
  524. }
  525. /* USER CODE END 1 */