adc.c 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  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. *
  15. * Redistribution and use in source and binary forms, with or without modification,
  16. * are permitted provided that the following conditions are met:
  17. * 1. Redistributions of source code must retain the above copyright notice,
  18. * this list of conditions and the following disclaimer.
  19. * 2. Redistributions in binary form must reproduce the above copyright notice,
  20. * this list of conditions and the following disclaimer in the documentation
  21. * and/or other materials provided with the distribution.
  22. * 3. Neither the name of STMicroelectronics nor the names of its contributors
  23. * may be used to endorse or promote products derived from this software
  24. * without specific prior written permission.
  25. *
  26. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  27. * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  28. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  29. * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
  30. * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  31. * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  32. * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  33. * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  34. * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  35. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  36. *
  37. ******************************************************************************
  38. */
  39. /* Includes ------------------------------------------------------------------*/
  40. #include "adc.h"
  41. #include "gpio.h"
  42. #include "dma.h"
  43. /* USER CODE BEGIN 0 */
  44. uint16_t ADC1_Result[2];
  45. /* USER CODE END 0 */
  46. ADC_HandleTypeDef hadc1;
  47. DMA_HandleTypeDef hdma_adc1;
  48. /* ADC1 init function */
  49. void MX_ADC1_Init(void)
  50. {
  51. ADC_ChannelConfTypeDef sConfig;
  52. /**Common config
  53. */
  54. hadc1.Instance = ADC1;
  55. hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE;
  56. hadc1.Init.ContinuousConvMode = ENABLE;
  57. hadc1.Init.DiscontinuousConvMode = DISABLE;
  58. hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
  59. hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
  60. hadc1.Init.NbrOfConversion = 2;
  61. if (HAL_ADC_Init(&hadc1) != HAL_OK)
  62. {
  63. _Error_Handler(__FILE__, __LINE__);
  64. }
  65. /**Configure Regular Channel ÊÊÅäÆ÷µçÔ´
  66. */
  67. sConfig.Channel = ADC_CHANNEL_0;
  68. sConfig.Rank = ADC_REGULAR_RANK_1;
  69. sConfig.SamplingTime = ADC_SAMPLETIME_239CYCLES_5;
  70. if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  71. {
  72. _Error_Handler(__FILE__, __LINE__);
  73. }
  74. /**Configure Regular Channel P+µçÔ´
  75. */
  76. sConfig.Channel = ADC_CHANNEL_1;
  77. sConfig.Rank = ADC_REGULAR_RANK_2;
  78. sConfig.SamplingTime = ADC_SAMPLETIME_239CYCLES_5;
  79. if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  80. {
  81. _Error_Handler(__FILE__, __LINE__);
  82. }
  83. }
  84. void HAL_ADC_MspInit(ADC_HandleTypeDef* adcHandle)
  85. {
  86. GPIO_InitTypeDef GPIO_InitStruct;
  87. if(adcHandle->Instance==ADC1)
  88. {
  89. /* USER CODE BEGIN ADC1_MspInit 0 */
  90. /* USER CODE END ADC1_MspInit 0 */
  91. /* ADC1 clock enable */
  92. __HAL_RCC_ADC1_CLK_ENABLE();
  93. /**ADC1 GPIO Configuration
  94. PA0-WKUP ------> ADC1_IN0
  95. PA1 ------> ADC1_IN1
  96. */
  97. GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1;
  98. GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  99. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  100. /* ADC1 DMA Init */
  101. /* ADC1 Init */
  102. hdma_adc1.Instance = DMA1_Channel1;
  103. hdma_adc1.Init.Direction = DMA_PERIPH_TO_MEMORY;
  104. hdma_adc1.Init.PeriphInc = DMA_PINC_DISABLE;
  105. hdma_adc1.Init.MemInc = DMA_MINC_ENABLE;
  106. hdma_adc1.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
  107. hdma_adc1.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
  108. hdma_adc1.Init.Mode = DMA_CIRCULAR;
  109. hdma_adc1.Init.Priority = DMA_PRIORITY_LOW;
  110. if (HAL_DMA_Init(&hdma_adc1) != HAL_OK)
  111. {
  112. _Error_Handler(__FILE__, __LINE__);
  113. }
  114. __HAL_LINKDMA(adcHandle,DMA_Handle,hdma_adc1);
  115. /* USER CODE BEGIN ADC1_MspInit 1 */
  116. /* USER CODE END ADC1_MspInit 1 */
  117. }
  118. }
  119. void HAL_ADC_MspDeInit(ADC_HandleTypeDef* adcHandle)
  120. {
  121. if(adcHandle->Instance==ADC1)
  122. {
  123. /* USER CODE BEGIN ADC1_MspDeInit 0 */
  124. /* USER CODE END ADC1_MspDeInit 0 */
  125. /* Peripheral clock disable */
  126. __HAL_RCC_ADC1_CLK_DISABLE();
  127. /**ADC1 GPIO Configuration
  128. PA0-WKUP ------> ADC1_IN0
  129. PA1 ------> ADC1_IN1
  130. */
  131. HAL_GPIO_DeInit(GPIOA, GPIO_PIN_0|GPIO_PIN_1);
  132. /* ADC1 DMA DeInit */
  133. HAL_DMA_DeInit(adcHandle->DMA_Handle);
  134. /* USER CODE BEGIN ADC1_MspDeInit 1 */
  135. /* USER CODE END ADC1_MspDeInit 1 */
  136. }
  137. }
  138. /* USER CODE BEGIN 1 */
  139. void ADC_Start(void)
  140. {
  141. HAL_ADCEx_Calibration_Start(&hadc1);
  142. HAL_ADC_Start_DMA(&hadc1, (uint32_t *)ADC1_Result, 2);
  143. }
  144. /* USER CODE END 1 */
  145. /**
  146. * @}
  147. */
  148. /**
  149. * @}
  150. */
  151. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/