/**
  @page ADC_ADC1_Freeze ADC Freeze example
  
  @verbatim
  ******************** (C) COPYRIGHT 2012 STMicroelectronics *******************
  * @file    ADC/ADC1_Freeze/readme.txt 
  * @author  MCD Application Team
  * @version V1.1.1
  * @date    13-April-2012
  * @brief   Description of the ADC Freeze example.
  ******************************************************************************
  *
  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
  * You may not use this file except in compliance with the License.
  * You may obtain a copy of the License at:
  *
  *        http://www.st.com/software_license_agreement_liberty_v2
  *
  * Unless required by applicable law or agreed to in writing, software 
  * distributed under the License is distributed on an "AS IS" BASIS, 
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  *
  ******************************************************************************
   @endverbatim

@par Example Description 

This example provides a short description of how to use the ADC peripheral Freeze 
and PowerDown modes.

The System is clocked by a 512kHz frequency (fsystem) (see system_stm32l1xx.c file).
Since the ADC is is clocked by a HSI (16MHz) frequency, and the sampling time is 4 
Cycles, so the ADC conversion frequency (fADCconv) is 1MHz.

The ADC is triggered by TIM2_TRGO which is connected to TIM2_Update Event.
Each time the ADC is triggered, it converts IDD Channel (which correspond to ADC 
channel5 when using the STM32L152-EVAL or ADC channel1b when using the STM32L152D-EVAL),
then the ADC converts RV3 Channel (which correspond to ADC channel18 when using the 
STM32L152-EVAL or ADC channel31 when using the STM32L152D-EVAL).

The Freeze mode is enabled, so in spite of fADCconv is 2 times greater than fsystem, 
the ADC converts the 2 channels without erasing data. 

By enabling the Freeze mode, ADC converts the 1st selected channel (IDD Channel) and 
enters freeze mode until the data converted is read. When the data converted is read,
the ADC leaves the freeze mode and converts the 2nd selected channel (RV3 Channel).

In this case of use (fADCconv > fsystem), the freeze mode must be enabled; otherwise 
ADC will erase the data  and Overrun event will occur. When the Overrun event occurs,
the ADC stops converting until the overrun flag is cleared.

The Measured IDD and RV3 values are displayed continuously on LCD GLASS : 
  - in the Right side : the IDD measurement in mA
  - in the Left side : the RV3Voltage measurement in Volt.

The PowerDown mode is enabled and disabled through the KEY button. When the ADC 
PowerDown mode is enabled, the ADC is powered-off when it is not converting, to reduce 
Power consumption.


In this example, the ADC is powred down during 2 phases :

- Phase1: 
When ADC is in freeze mode(IDD Channel is converted but not yet read), it is not 
converting, so it is powred-off and it is powered-on again at the end of freeze (to 
convert RV3 Channel).

- Phase2:
when the ADC is waiting for a trigger event (Falling edge of TIM2 TRGO signal). In this
 case the ADC is powered up at the next trigger event.
  
@note The STM15L152-EVAL and STM15L152D-EVAL boards are both provided with an IDD 
measurement circuit, more details can be provided in STM15L152-EVAL or STM15L152D-EVAL user manual. 

@note ADC channel18 in STM15L152-EVAL and ADC channel31 in STM15L152D-EVAL are connected to
a potentiometer (RV3) which can deliver a voltage between 0V and 3.3V.

@par Directory contents 

  - ADC/ADC1_Freeze/stm32l1xx_conf.h    Library Configuration file
  - ADC/ADC1_Freeze/stm32l1xx_it.c      Interrupt handlers
  - ADC/ADC1_Freeze/stm32l1xx_it.h      Interrupt handlers header file
  - ADC/ADC1_Freeze/main.c              Main program
  - ADC/ADC1_Freeze/system_stm32l1xx.c  STM32L1xx system source file
  
@note The "system_stm32l1xx.c" is generated by an automatic clock configuration 
      system and can be easily customized to your own configuration. 
      To select different clock setup, use the "STM32L1xx_Clock_Configuration_V1.1.0.xls" 
      provided with the AN3309 package available on <a href="http://www.st.com/internet/mcu/family/141.jsp">  ST Microcontrollers </a>
         
@par Hardware and Software environment

  - This example runs on STM32L1xx Ultra Low Power High-, Medium-Density and Medium-Density Plus Devices.
  
  - This example has been tested with STMicroelectronics STM32L152D-EVAL (STM32L1xx 
    Ultra Low Power High-Density) and STM32L152-EVAL (STM32L1xx Ultra Low 
    Power Medium-Density) evaluation board and can be easily tailored to any 
    other supported device and development board.

    
  - STM32L152-EVAL Set-up
    - KEY button connected to PA.0 pin 
    - LCD Glass pins is shared with USART3 via jumpers, so make sure that
         Jumper 7 (JP7) is in position 1-2.
         Jumper 8 (JP8) is in position 1-2.
    - Make sure that jumper JP4 is in IDD position (2-3).
    - Make sure that jumper JP14 is fitted.
    - Make sure that jumper JP13 is in 3.3V position (2-3).
    - Connect a variable power supply 0-3.3V to ADC Channel18 mapped on pin PB.12
     (potentiometer RV3) 
    - Make sure that the Jumper JP17 is in PB12 position.

  - STM32L152D-EVAL Set-up
    - KEY button connected to PA.0 pin 
    - Make sure that jumper JP10 is in IDD position (1-2).
    - Make sure that jumper JP5 is in 3.3V position (2-3).
    - Connect a variable power supply 0-3.3V to ADC Channel31 mapped on pin PF.10
     (potentiometer RV3) 
    - Make sure that the Jumper JP13 is in ADC position.
    - Make sure that the embedded LCD GLASS is in LCD position.

@par How to use it ? 

In order to make the program work, you must do the following :
 - Copy all source files from this example folder to the template folder under
   Project\STM32L1xx_StdPeriph_Templates
 - Open your preferred toolchain 
 - Rebuild all files and load your image into target memory
 - Run the example
 - turn RV3 on the left then on the right

@note
- Ultra Low Power Medium-density devices are STM32L151xx and STM32L152xx 
  microcontrollers where the Flash memory density ranges between 64 and 128 Kbytes.
- Ultra Low Power Medium-density Plus devices are STM32L151xx, STM32L152xx and 
  STM32L162xx microcontrollers where the Flash memory density is 256 Kbytes.
- Ultra Low Power High-density devices are STM32L151xx, STM32L152xx and STM32L162xx 
  microcontrollers where the Flash memory density is 384 Kbytes.
    
 * <h3><center>&copy; COPYRIGHT STMicroelectronics</center></h3>
 */


