adc.c 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. /**
  2. ******************************************************************************
  3. * File Name : ADC.c
  4. * Description : This file provides code for the configuration
  5. * of the ADC instances.
  6. ******************************************************************************
  7. ** This notice applies to any and all portions of this file
  8. * that are not between comment pairs USER CODE BEGIN and
  9. * USER CODE END. Other portions of this file, whether
  10. * inserted by the user or by software development tools
  11. * are owned by their respective copyright owners.
  12. *
  13. * COPYRIGHT(c) 2019 STMicroelectronics*
  14. * Redistribution and use in source and binary forms, with or without modification,
  15. * are permitted provided that the following conditions are met:
  16. * 1. Redistributions of source code must retain the above copyright notice,
  17. * this list of conditions and the following disclaimer.
  18. * 2. Redistributions in binary form must reproduce the above copyright notice,
  19. * this list of conditions and the following disclaimer in the documentation
  20. * and/or other materials provided with the distribution.
  21. * 3. Neither the name of STMicroelectronics nor the names of its contributors
  22. * may be used to endorse or promote products derived from this software
  23. * without specific prior written permission.
  24. *
  25. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  26. * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  27. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  28. * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
  29. * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  30. * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  31. * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  32. * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  33. * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  34. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  35. *
  36. ******************************************************************************
  37. */
  38. /* Includes ------------------------------------------------------------------*/
  39. #include "adc.h"
  40. #include "gpio.h"
  41. #include "dma.h"
  42. /* USER CODE BEGIN 0 */
  43. uint16_t Voltage_Vin;
  44. int16_t MCU_Temperature;
  45. uint16_t MCU_VDDA;
  46. uint16_t ADC_Result[ADC_DATA_NUM]={0};
  47. /* USER CODE END 0 */
  48. ADC_HandleTypeDef hadc1;
  49. DMA_HandleTypeDef hdma_adc1;
  50. /* ADC1 init function */
  51. void MX_ADC1_Init(void)
  52. {
  53. ADC_ChannelConfTypeDef sConfig;
  54. /**Common config
  55. */
  56. hadc1.Instance = ADC1;
  57. hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE;
  58. hadc1.Init.ContinuousConvMode = ENABLE;
  59. hadc1.Init.DiscontinuousConvMode = DISABLE;
  60. hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
  61. hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
  62. hadc1.Init.NbrOfConversion = 8;
  63. if (HAL_ADC_Init(&hadc1) != HAL_OK)
  64. {
  65. _Error_Handler(__FILE__, __LINE__);
  66. }
  67. /**Configure Regular Channel
  68. */
  69. sConfig.Channel = ADC_CHANNEL_2;
  70. sConfig.Rank = ADC_REGULAR_RANK_1;
  71. sConfig.SamplingTime = ADC_SAMPLETIME_41CYCLES_5;
  72. if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  73. {
  74. _Error_Handler(__FILE__, __LINE__);
  75. }
  76. /**Configure Regular Channel
  77. */
  78. sConfig.Channel = ADC_CHANNEL_3;
  79. sConfig.Rank = ADC_REGULAR_RANK_2;
  80. if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  81. {
  82. _Error_Handler(__FILE__, __LINE__);
  83. }
  84. /**Configure Regular Channel
  85. */
  86. sConfig.Channel = ADC_CHANNEL_5;
  87. sConfig.Rank = ADC_REGULAR_RANK_3;
  88. if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  89. {
  90. _Error_Handler(__FILE__, __LINE__);
  91. }
  92. /**Configure Regular Channel
  93. */
  94. sConfig.Channel = ADC_CHANNEL_6;
  95. sConfig.Rank = ADC_REGULAR_RANK_4;
  96. if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  97. {
  98. _Error_Handler(__FILE__, __LINE__);
  99. }
  100. /**Configure Regular Channel
  101. */
  102. sConfig.Channel = ADC_CHANNEL_8;
  103. sConfig.Rank = ADC_REGULAR_RANK_5;
  104. if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  105. {
  106. _Error_Handler(__FILE__, __LINE__);
  107. }
  108. /**Configure Regular Channel
  109. */
  110. sConfig.Channel = ADC_CHANNEL_9;
  111. sConfig.Rank = ADC_REGULAR_RANK_6;
  112. if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  113. {
  114. _Error_Handler(__FILE__, __LINE__);
  115. }
  116. /**Configure Regular Channel
  117. */
  118. sConfig.Channel = ADC_CHANNEL_TEMPSENSOR;
  119. sConfig.Rank = ADC_REGULAR_RANK_7;
  120. if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  121. {
  122. _Error_Handler(__FILE__, __LINE__);
  123. }
  124. /**Configure Regular Channel
  125. */
  126. sConfig.Channel = ADC_CHANNEL_VREFINT;
  127. sConfig.Rank = ADC_REGULAR_RANK_8;
  128. if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  129. {
  130. _Error_Handler(__FILE__, __LINE__);
  131. }
  132. }
  133. void HAL_ADC_MspInit(ADC_HandleTypeDef* adcHandle)
  134. {
  135. GPIO_InitTypeDef GPIO_InitStruct;
  136. if(adcHandle->Instance==ADC1)
  137. {
  138. /* USER CODE BEGIN ADC1_MspInit 0 */
  139. /* USER CODE END ADC1_MspInit 0 */
  140. /* ADC1 clock enable */
  141. __HAL_RCC_ADC1_CLK_ENABLE();
  142. /**ADC1 GPIO Configuration
  143. PA2 ------> ADC1_IN2
  144. PA3 ------> ADC1_IN3
  145. PA5 ------> ADC1_IN5
  146. PA6 ------> ADC1_IN6
  147. PB0 ------> ADC1_IN8
  148. PB1 ------> ADC1_IN9
  149. */
  150. GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_5|GPIO_PIN_6;
  151. GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  152. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  153. GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1;
  154. GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  155. HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  156. /* ADC1 DMA Init */
  157. /* ADC1 Init */
  158. hdma_adc1.Instance = DMA1_Channel1;
  159. hdma_adc1.Init.Direction = DMA_PERIPH_TO_MEMORY;
  160. hdma_adc1.Init.PeriphInc = DMA_PINC_DISABLE;
  161. hdma_adc1.Init.MemInc = DMA_MINC_ENABLE;
  162. hdma_adc1.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
  163. hdma_adc1.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
  164. hdma_adc1.Init.Mode = DMA_CIRCULAR;
  165. hdma_adc1.Init.Priority = DMA_PRIORITY_LOW;
  166. if (HAL_DMA_Init(&hdma_adc1) != HAL_OK)
  167. {
  168. _Error_Handler(__FILE__, __LINE__);
  169. }
  170. __HAL_LINKDMA(adcHandle,DMA_Handle,hdma_adc1);
  171. /* USER CODE BEGIN ADC1_MspInit 1 */
  172. /* USER CODE END ADC1_MspInit 1 */
  173. }
  174. }
  175. void HAL_ADC_MspDeInit(ADC_HandleTypeDef* adcHandle)
  176. {
  177. if(adcHandle->Instance==ADC1)
  178. {
  179. /* USER CODE BEGIN ADC1_MspDeInit 0 */
  180. /* USER CODE END ADC1_MspDeInit 0 */
  181. /* Peripheral clock disable */
  182. __HAL_RCC_ADC1_CLK_DISABLE();
  183. /**ADC1 GPIO Configuration
  184. PA2 ------> ADC1_IN2
  185. PA3 ------> ADC1_IN3
  186. PA5 ------> ADC1_IN5
  187. PA6 ------> ADC1_IN6
  188. PB0 ------> ADC1_IN8
  189. PB1 ------> ADC1_IN9
  190. */
  191. HAL_GPIO_DeInit(GPIOA, GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_5|GPIO_PIN_6);
  192. HAL_GPIO_DeInit(GPIOB, GPIO_PIN_0|GPIO_PIN_1);
  193. /* ADC1 DMA DeInit */
  194. HAL_DMA_DeInit(adcHandle->DMA_Handle);
  195. /* USER CODE BEGIN ADC1_MspDeInit 1 */
  196. /* USER CODE END ADC1_MspDeInit 1 */
  197. }
  198. }
  199. /* USER CODE BEGIN 1 */
  200. void ADC_Start(void)
  201. {
  202. HAL_ADCEx_Calibration_Start(&hadc1);
  203. HAL_ADC_Start_DMA(&hadc1, (uint32_t*)ADC_Result, 8);
  204. }
  205. /* USER CODE END 1 */
  206. /**
  207. * @}
  208. */
  209. /**
  210. * @}
  211. */
  212. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/