Mercurial > public > ostc4
comparison Small_CPU/Src/adc.c @ 38:5f11787b4f42
include in ostc4 repository
| author | heinrichsweikamp |
|---|---|
| date | Sat, 28 Apr 2018 11:52:34 +0200 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 37:ccc45c0e1ea2 | 38:5f11787b4f42 |
|---|---|
| 1 /** | |
| 2 ****************************************************************************** | |
| 3 * @file adc.c | |
| 4 * @author heinrichs weikamp gmbh | |
| 5 * @version V0.0.1 | |
| 6 * @date 11-Dec-2014 | |
| 7 * @brief ADC for ambient light sensor | |
| 8 * | |
| 9 @verbatim | |
| 10 ============================================================================== | |
| 11 ##### How to use ##### | |
| 12 ============================================================================== | |
| 13 @endverbatim | |
| 14 ****************************************************************************** | |
| 15 * @attention | |
| 16 * | |
| 17 * <h2><center>© COPYRIGHT(c) 2014 heinrichs weikamp</center></h2> | |
| 18 * | |
| 19 ****************************************************************************** | |
| 20 */ | |
| 21 | |
| 22 /* Includes ------------------------------------------------------------------*/ | |
| 23 | |
| 24 #include "stm32f4xx_hal.h" | |
| 25 #include "adc.h" | |
| 26 | |
| 27 /* Exported variables --------------------------------------------------------*/ | |
| 28 /* Private variables ---------------------------------------------------------*/ | |
| 29 ADC_HandleTypeDef AdcHandle; | |
| 30 __IO uint16_t uhADCxConvertedValue = 0; | |
| 31 | |
| 32 /* Private types -------------------------------------------------------------*/ | |
| 33 #define ADCx ADC1 | |
| 34 #define ADCx_CLK_ENABLE() __ADC1_CLK_ENABLE(); | |
| 35 #define ADCx_CHANNEL_GPIO_CLK_ENABLE() __GPIOF_CLK_ENABLE() | |
| 36 | |
| 37 #define ADCx_FORCE_RESET() __ADC_FORCE_RESET() | |
| 38 #define ADCx_RELEASE_RESET() __ADC_RELEASE_RESET() | |
| 39 | |
| 40 /* Definition for ADCx Channel Pin */ | |
| 41 #define ADCx_GPIO_PIN GPIO_PIN_0 | |
| 42 #define ADCx_GPIO_PORT GPIOB | |
| 43 #define ADCx_GPIO_CLK_ENABLE() __GPIOB_CLK_ENABLE() | |
| 44 #define ADCx_GPIO_CLK_DISABLE() __GPIOB_CLK_DISABLE() | |
| 45 | |
| 46 /* Definition for ADCx's Channel */ | |
| 47 #define ADCx_CHANNEL ADC_CHANNEL_8 | |
| 48 | |
| 49 /* Definition for ADCx's NVIC */ | |
| 50 //#define ADCx_IRQn ADC_IRQn | |
| 51 | |
| 52 /* Private function prototypes -----------------------------------------------*/ | |
| 53 void ADC_Start_single_IT_Conversion(void); | |
| 54 | |
| 55 /* Exported functions --------------------------------------------------------*/ | |
| 56 | |
| 57 uint16_t get_ambient_light_level(void) | |
| 58 { | |
| 59 #ifdef OSTC_ON_DISCOVERY_HARDWARE | |
| 60 return 800; | |
| 61 #endif | |
| 62 | |
| 63 return uhADCxConvertedValue; | |
| 64 } | |
| 65 | |
| 66 | |
| 67 static void ADCx_MspInit(ADC_HandleTypeDef *hadc) | |
| 68 { | |
| 69 #ifdef OSTC_ON_DISCOVERY_HARDWARE | |
| 70 return; | |
| 71 #endif | |
| 72 | |
| 73 GPIO_InitTypeDef GPIO_InitStruct; | |
| 74 | |
| 75 ADCx_GPIO_CLK_ENABLE(); | |
| 76 | |
| 77 GPIO_InitStruct.Pin = ADCx_GPIO_PIN ; | |
| 78 GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; | |
| 79 GPIO_InitStruct.Pull = GPIO_NOPULL; | |
| 80 HAL_GPIO_Init(ADCx_GPIO_PORT, &GPIO_InitStruct); | |
| 81 | |
| 82 ADCx_CLK_ENABLE(); | |
| 83 | |
| 84 // HAL_NVIC_SetPriority(ADCx_IRQn, 2, 0); | |
| 85 // HAL_NVIC_EnableIRQ(ADCx_IRQn); | |
| 86 } | |
| 87 | |
| 88 | |
| 89 void ADCx_DeInit(void) | |
| 90 { | |
| 91 // HAL_ADC_Stop_IT(&AdcHandle); | |
| 92 HAL_ADC_DeInit(&AdcHandle); | |
| 93 } | |
| 94 | |
| 95 | |
| 96 void ADCx_Init(void) | |
| 97 { | |
| 98 #ifdef OSTC_ON_DISCOVERY_HARDWARE | |
| 99 return; | |
| 100 #endif | |
| 101 | |
| 102 ADC_ChannelConfTypeDef sConfig; | |
| 103 | |
| 104 AdcHandle.Instance = ADCx; | |
| 105 | |
| 106 AdcHandle.Init.ClockPrescaler = ADC_CLOCKPRESCALER_PCLK_DIV4; | |
| 107 AdcHandle.Init.Resolution = ADC_RESOLUTION12b; | |
| 108 AdcHandle.Init.DataAlign = ADC_DATAALIGN_RIGHT; | |
| 109 AdcHandle.Init.ContinuousConvMode = DISABLE; | |
| 110 AdcHandle.Init.DiscontinuousConvMode = DISABLE; | |
| 111 AdcHandle.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; | |
| 112 AdcHandle.Init.EOCSelection = EOC_SINGLE_CONV; | |
| 113 AdcHandle.Init.NbrOfConversion = 1; | |
| 114 AdcHandle.Init.DMAContinuousRequests = DISABLE; | |
| 115 | |
| 116 ADCx_MspInit(&AdcHandle); | |
| 117 HAL_ADC_Init(&AdcHandle); | |
| 118 | |
| 119 sConfig.Channel = ADCx_CHANNEL; | |
| 120 sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES; | |
| 121 sConfig.Rank = 1; | |
| 122 sConfig.Offset = 0; | |
| 123 | |
| 124 HAL_ADC_ConfigChannel(&AdcHandle, &sConfig); | |
| 125 | |
| 126 // ADC_Start_single_IT_Conversion(); | |
| 127 } | |
| 128 | |
| 129 | |
| 130 uint32_t adc_debug_status = 0; | |
| 131 | |
| 132 void adc_ambient_light_sensor_get_data(void) | |
| 133 { | |
| 134 #ifdef OSTC_ON_DISCOVERY_HARDWARE | |
| 135 return; | |
| 136 #endif | |
| 137 | |
| 138 HAL_ADC_Start(&AdcHandle); | |
| 139 HAL_ADC_PollForConversion(&AdcHandle, 10); | |
| 140 adc_debug_status = HAL_ADC_GetState(&AdcHandle); | |
| 141 if(adc_debug_status == HAL_ADC_STATE_EOC_REG + HAL_ADC_STATE_READY) // new HAL_ADC_STATE_READY 160613 | |
| 142 // if(HAL_ADC_GetState(&AdcHandle) == HAL_ADC_STATE_EOC_REG) | |
| 143 uhADCxConvertedValue = HAL_ADC_GetValue(&AdcHandle); | |
| 144 HAL_ADC_Stop(&AdcHandle); | |
| 145 } | |
| 146 | |
| 147 | |
| 148 /* Private functions ---------------------------------------------------------*/ | |
| 149 /* | |
| 150 void ADC_Start_single_IT_Conversion(void) | |
| 151 { | |
| 152 HAL_ADC_Start_IT(&AdcHandle); | |
| 153 } | |
| 154 | |
| 155 | |
| 156 void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* AdcHandle) | |
| 157 { | |
| 158 extern void copyAmbientLightData(void); | |
| 159 | |
| 160 uhADCxConvertedValue = HAL_ADC_GetValue(AdcHandle); | |
| 161 copyAmbientLightData(); | |
| 162 ADC_Start_single_IT_Conversion(); | |
| 163 } | |
| 164 */ | |
| 165 | |
| 166 /************************ (C) COPYRIGHT heinrichs weikamp *****END OF FILE****/ |
