adc.c.bak 18 KB

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