/**
  @page NVIC_IRQPriority  NVIC IRQ Priority example
  
  @verbatim
  ******************** (C) COPYRIGHT 2015 STMicroelectronics *******************
  * @file    NVIC/NVIC_IRQPriority/readme.txt 
  * @author  MCD Application Team
  * @version V1.1.3
  * @date    15-December-2021
  * @brief   Description of the NVIC IRQ Priority example.
  ******************************************************************************
  *
  * Copyright (c) 2015 STMicroelectronics.
  * All rights reserved.
  *
  * This software is licensed under terms that can be found in the LICENSE file
  * in the root directory of this software component.
  * If no LICENSE file comes with this software, it is provided AS-IS.
  *
  ******************************************************************************
   @endverbatim

@par  Example Description

This example demonstrates the use of the Nested Vectored Interrupt Controller (NVIC): 

- Configuration of 2 EXTI Lines (SEL button EXTI Line & KEY button EXTI Line)
  to generate an interrupt on each falling edge and use the SysTick interrupt.
- These interrupts are configured with the following parameters:
    - SEL button EXTI Line:  
        - PreemptionPriority = PreemptionPriorityValue
        - SubPriority = 0
    - KEY button EXTI Line:    
        - PreemptionPriority = 0
        - SubPriority = 1           
    - SysTick Handler:  
        - PreemptionPriority = !PreemptionPriorityValue
        - SubPriority = 0             
First, the PreemptionPriorityValue is equal to 0, the SEL button EXTI Line 
has higher preemption priority than the SysTick handler. 

In the KEY button EXTI Line interrupt routine the SEL button EXTI Line and 
SysTick preemption priorities are inverted. 
In the SEL button EXTI Line interrupt routine the pending bit of the SysTick 
interrupt is set this will cause SysTick ISR to preempt the SEL button EXTI 
Line ISR only if it has higher preemption priority.

The system behaves as following:
 
1) The first time KEY button EXTI Line interrupt occurs the SysTick preemption 
become higher than SEL button EXTI Line one. So when the SEL button EXTI 
Line interrupt occurs, the SysTick ISR is executed and the PreemptionOccured 
variable become TRUE and the four leds (LED1, LED2, LED3, LED4) start toggling.

2) When the next KEY button EXTI Line interrupt occurs the SysTick preemption
become lower than SEL button EXTI Line one. So when the SEL button EXTI Line
interrupt occurs and it will be not preempted by Systick ISR, the PreemptionOccured 
variable became FALSE and the four leds (LED1, LED2, LED3, LED4) stop toggling.

Then this behavior is repeated from point 1) in an infinite loop.


@par Directory contents 

  - NVIC/NVIC_IRQPriority/stm32f30x_conf.h     Library Configuration file
  - NVIC/NVIC_IRQPriority/stm32f30x_it.c       Interrupt handlers  
  - NVIC/NVIC_IRQPriority/stm32f30x_it.h       Interrupt handlers header file
  - NVIC/NVIC_IRQPriority/main.c               Main program
  - NVIC/NVIC_IRQPriority/main.h               header file Main program
  - NVIC/NVIC_IRQPriority/system_stm32f30x.c   STM32F30x system source file
  
@note The "system_stm32f30x.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 "STM32F30x_Clock_Configuration_V1.0.0.xls" 
      provided with the AN4152 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 STM32F303xC and STM32F303xE Devices.
  
  - This example has been tested with STMicroelectronics STM32303C-EVAL (STM32F30x)
    evaluation board and can be easily tailored to any other supported device 
    and development board.

  - STM32303C-EVAL Set-up
    - Use LED1, LED2, LED3 and LED4
    - Use the KEY and SEL push-button
    
    
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
   Projects\STM32F30x_StdPeriph_Templates
 - Open your preferred toolchain 
 - Add the following files to the project source list
   - Utilities\STM32_EVAL\STM32303C_EVAL\stm32303c_eval.c 
 - Rebuild all files and load your image into target memory
 - Run the example


 */
