mirror of https://github.com/ARMmbed/mbed-os.git
				
				
				
			[NUCLEO_F446RE] create the new target
Create the new target - mbed_blinky is runnningpull/1110/head
							parent
							
								
									88d158e43b
								
							
						
					
					
						commit
						8edb20bed6
					
				| 
						 | 
				
			
			@ -0,0 +1,153 @@
 | 
			
		|||
/* Linker script to configure memory regions. */
 | 
			
		||||
MEMORY
 | 
			
		||||
{ 
 | 
			
		||||
  FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 512K
 | 
			
		||||
  RAM (rwx)  : ORIGIN = 0x20000198, LENGTH = 128k - 0x198
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Linker script to place sections and symbol values. Should be used together
 | 
			
		||||
 * with other linker script that defines memory regions FLASH and RAM.
 | 
			
		||||
 * It references following symbols, which must be defined in code:
 | 
			
		||||
 *   Reset_Handler : Entry of reset handler
 | 
			
		||||
 * 
 | 
			
		||||
 * It defines following symbols, which code can use without definition:
 | 
			
		||||
 *   __exidx_start
 | 
			
		||||
 *   __exidx_end
 | 
			
		||||
 *   __etext
 | 
			
		||||
 *   __data_start__
 | 
			
		||||
 *   __preinit_array_start
 | 
			
		||||
 *   __preinit_array_end
 | 
			
		||||
 *   __init_array_start
 | 
			
		||||
 *   __init_array_end
 | 
			
		||||
 *   __fini_array_start
 | 
			
		||||
 *   __fini_array_end
 | 
			
		||||
 *   __data_end__
 | 
			
		||||
 *   __bss_start__
 | 
			
		||||
 *   __bss_end__
 | 
			
		||||
 *   __end__
 | 
			
		||||
 *   end
 | 
			
		||||
 *   __HeapLimit
 | 
			
		||||
 *   __StackLimit
 | 
			
		||||
 *   __StackTop
 | 
			
		||||
 *   __stack
 | 
			
		||||
 *   _estack
 | 
			
		||||
 */
 | 
			
		||||
ENTRY(Reset_Handler)
 | 
			
		||||
 | 
			
		||||
SECTIONS
 | 
			
		||||
{
 | 
			
		||||
    .text :
 | 
			
		||||
    {
 | 
			
		||||
        KEEP(*(.isr_vector))
 | 
			
		||||
        *(.text*)
 | 
			
		||||
        KEEP(*(.init))
 | 
			
		||||
        KEEP(*(.fini))
 | 
			
		||||
 | 
			
		||||
        /* .ctors */
 | 
			
		||||
        *crtbegin.o(.ctors)
 | 
			
		||||
        *crtbegin?.o(.ctors)
 | 
			
		||||
        *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)
 | 
			
		||||
        *(SORT(.ctors.*))
 | 
			
		||||
        *(.ctors)
 | 
			
		||||
 | 
			
		||||
        /* .dtors */
 | 
			
		||||
        *crtbegin.o(.dtors)
 | 
			
		||||
        *crtbegin?.o(.dtors)
 | 
			
		||||
        *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)
 | 
			
		||||
        *(SORT(.dtors.*))
 | 
			
		||||
        *(.dtors)
 | 
			
		||||
 | 
			
		||||
        *(.rodata*)
 | 
			
		||||
 | 
			
		||||
        KEEP(*(.eh_frame*))
 | 
			
		||||
    } > FLASH
 | 
			
		||||
 | 
			
		||||
    .ARM.extab :
 | 
			
		||||
    {
 | 
			
		||||
        *(.ARM.extab* .gnu.linkonce.armextab.*)
 | 
			
		||||
    } > FLASH
 | 
			
		||||
 | 
			
		||||
    __exidx_start = .;
 | 
			
		||||
    .ARM.exidx :
 | 
			
		||||
    {
 | 
			
		||||
        *(.ARM.exidx* .gnu.linkonce.armexidx.*)
 | 
			
		||||
    } > FLASH
 | 
			
		||||
    __exidx_end = .;
 | 
			
		||||
 | 
			
		||||
    __etext = .;
 | 
			
		||||
    _sidata = .;
 | 
			
		||||
 | 
			
		||||
    .data : AT (__etext)
 | 
			
		||||
    {
 | 
			
		||||
        __data_start__ = .;
 | 
			
		||||
        _sdata = .;
 | 
			
		||||
        *(vtable)
 | 
			
		||||
        *(.data*)
 | 
			
		||||
 | 
			
		||||
        . = ALIGN(4);
 | 
			
		||||
        /* preinit data */
 | 
			
		||||
        PROVIDE_HIDDEN (__preinit_array_start = .);
 | 
			
		||||
        KEEP(*(.preinit_array))
 | 
			
		||||
        PROVIDE_HIDDEN (__preinit_array_end = .);
 | 
			
		||||
 | 
			
		||||
        . = ALIGN(4);
 | 
			
		||||
        /* init data */
 | 
			
		||||
        PROVIDE_HIDDEN (__init_array_start = .);
 | 
			
		||||
        KEEP(*(SORT(.init_array.*)))
 | 
			
		||||
        KEEP(*(.init_array))
 | 
			
		||||
        PROVIDE_HIDDEN (__init_array_end = .);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        . = ALIGN(4);
 | 
			
		||||
        /* finit data */
 | 
			
		||||
        PROVIDE_HIDDEN (__fini_array_start = .);
 | 
			
		||||
        KEEP(*(SORT(.fini_array.*)))
 | 
			
		||||
        KEEP(*(.fini_array))
 | 
			
		||||
        PROVIDE_HIDDEN (__fini_array_end = .);
 | 
			
		||||
 | 
			
		||||
        KEEP(*(.jcr*))
 | 
			
		||||
        . = ALIGN(4);
 | 
			
		||||
        /* All data end */
 | 
			
		||||
        __data_end__ = .;
 | 
			
		||||
        _edata = .;
 | 
			
		||||
 | 
			
		||||
    } > RAM
 | 
			
		||||
 | 
			
		||||
    .bss :
 | 
			
		||||
    {
 | 
			
		||||
        . = ALIGN(4);
 | 
			
		||||
        __bss_start__ = .;
 | 
			
		||||
        _sbss = .;
 | 
			
		||||
        *(.bss*)
 | 
			
		||||
        *(COMMON)
 | 
			
		||||
        . = ALIGN(4);
 | 
			
		||||
        __bss_end__ = .;
 | 
			
		||||
        _ebss = .;
 | 
			
		||||
    } > RAM
 | 
			
		||||
 | 
			
		||||
    .heap (COPY):
 | 
			
		||||
    {
 | 
			
		||||
        __end__ = .;
 | 
			
		||||
        end = __end__;
 | 
			
		||||
        *(.heap*)
 | 
			
		||||
        __HeapLimit = .;
 | 
			
		||||
    } > RAM
 | 
			
		||||
 | 
			
		||||
    /* .stack_dummy section doesn't contains any symbols. It is only
 | 
			
		||||
     * used for linker to calculate size of stack sections, and assign
 | 
			
		||||
     * values to stack symbols later */
 | 
			
		||||
    .stack_dummy (COPY):
 | 
			
		||||
    {
 | 
			
		||||
        *(.stack*)
 | 
			
		||||
    } > RAM
 | 
			
		||||
 | 
			
		||||
    /* Set stack top to end of RAM, and stack limit move down by
 | 
			
		||||
     * size of stack_dummy section */
 | 
			
		||||
    __StackTop = ORIGIN(RAM) + LENGTH(RAM);
 | 
			
		||||
    _estack = __StackTop;
 | 
			
		||||
    __StackLimit = __StackTop - SIZEOF(.stack_dummy);
 | 
			
		||||
    PROVIDE(__stack = __StackTop);
 | 
			
		||||
 | 
			
		||||
    /* Check if data + heap + stack exceeds RAM limit */
 | 
			
		||||
    ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack")
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,459 @@
 | 
			
		|||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file      startup_stm32f411xe.s
 | 
			
		||||
  * @author    MCD Application Team
 | 
			
		||||
  * @version   V2.3.0
 | 
			
		||||
  * @date      02-March-2015
 | 
			
		||||
  * @brief     STM32F411xExx Devices vector table for Atollic TrueSTUDIO toolchain. 
 | 
			
		||||
  *            This module performs:
 | 
			
		||||
  *                - Set the initial SP
 | 
			
		||||
  *                - Set the initial PC == Reset_Handler,
 | 
			
		||||
  *                - Set the vector table entries with the exceptions ISR address
 | 
			
		||||
  *                - Branches to main in the C library (which eventually
 | 
			
		||||
  *                  calls main()).
 | 
			
		||||
  *            After Reset the Cortex-M4 processor is in Thread mode,
 | 
			
		||||
  *            priority is Privileged, and the Stack is set to Main.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * <h2><center>© COPYRIGHT 2015 STMicroelectronics</center></h2>
 | 
			
		||||
  *
 | 
			
		||||
  * Redistribution and use in source and binary forms, with or without modification,
 | 
			
		||||
  * are permitted provided that the following conditions are met:
 | 
			
		||||
  *   1. Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
  *      this list of conditions and the following disclaimer.
 | 
			
		||||
  *   2. Redistributions in binary form must reproduce the above copyright notice,
 | 
			
		||||
  *      this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
  *      and/or other materials provided with the distribution.
 | 
			
		||||
  *   3. Neither the name of STMicroelectronics nor the names of its contributors
 | 
			
		||||
  *      may be used to endorse or promote products derived from this software
 | 
			
		||||
  *      without specific prior written permission.
 | 
			
		||||
  *
 | 
			
		||||
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 | 
			
		||||
  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 | 
			
		||||
  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 | 
			
		||||
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
  *
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  */
 | 
			
		||||
    
 | 
			
		||||
  .syntax unified
 | 
			
		||||
  .cpu cortex-m4
 | 
			
		||||
  .fpu softvfp
 | 
			
		||||
  .thumb
 | 
			
		||||
 | 
			
		||||
.global  g_pfnVectors
 | 
			
		||||
.global  Default_Handler
 | 
			
		||||
 | 
			
		||||
/* start address for the initialization values of the .data section. 
 | 
			
		||||
defined in linker script */
 | 
			
		||||
.word  _sidata
 | 
			
		||||
/* start address for the .data section. defined in linker script */  
 | 
			
		||||
.word  _sdata
 | 
			
		||||
/* end address for the .data section. defined in linker script */
 | 
			
		||||
.word  _edata
 | 
			
		||||
/* start address for the .bss section. defined in linker script */
 | 
			
		||||
.word  _sbss
 | 
			
		||||
/* end address for the .bss section. defined in linker script */
 | 
			
		||||
.word  _ebss
 | 
			
		||||
/* stack used for SystemInit_ExtMemCtl; always internal RAM used */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief  This is the code that gets called when the processor first
 | 
			
		||||
 *          starts execution following a reset event. Only the absolutely
 | 
			
		||||
 *          necessary set is performed, after which the application
 | 
			
		||||
 *          supplied main() routine is called. 
 | 
			
		||||
 * @param  None
 | 
			
		||||
 * @retval : None
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
    .section  .text.Reset_Handler
 | 
			
		||||
  .weak  Reset_Handler
 | 
			
		||||
  .type  Reset_Handler, %function
 | 
			
		||||
Reset_Handler:  
 | 
			
		||||
  ldr   sp, =_estack    		 /* set stack pointer */
 | 
			
		||||
 | 
			
		||||
/* Copy the data segment initializers from flash to SRAM */  
 | 
			
		||||
  movs  r1, #0
 | 
			
		||||
  b  LoopCopyDataInit
 | 
			
		||||
 | 
			
		||||
CopyDataInit:
 | 
			
		||||
  ldr  r3, =_sidata
 | 
			
		||||
  ldr  r3, [r3, r1]
 | 
			
		||||
  str  r3, [r0, r1]
 | 
			
		||||
  adds  r1, r1, #4
 | 
			
		||||
    
 | 
			
		||||
LoopCopyDataInit:
 | 
			
		||||
  ldr  r0, =_sdata
 | 
			
		||||
  ldr  r3, =_edata
 | 
			
		||||
  adds  r2, r0, r1
 | 
			
		||||
  cmp  r2, r3
 | 
			
		||||
  bcc  CopyDataInit
 | 
			
		||||
  ldr  r2, =_sbss
 | 
			
		||||
  b  LoopFillZerobss
 | 
			
		||||
/* Zero fill the bss segment. */  
 | 
			
		||||
FillZerobss:
 | 
			
		||||
  movs  r3, #0
 | 
			
		||||
  str  r3, [r2], #4
 | 
			
		||||
    
 | 
			
		||||
LoopFillZerobss:
 | 
			
		||||
  ldr  r3, = _ebss
 | 
			
		||||
  cmp  r2, r3
 | 
			
		||||
  bcc  FillZerobss
 | 
			
		||||
 | 
			
		||||
/* Call the clock system intitialization function.*/
 | 
			
		||||
  bl  SystemInit   
 | 
			
		||||
/* Call static constructors */
 | 
			
		||||
  //bl __libc_init_array
 | 
			
		||||
/* Call the application's entry point.*/
 | 
			
		||||
  //bl  main
 | 
			
		||||
  // Calling the crt0 'cold-start' entry point. There __libc_init_array is called
 | 
			
		||||
  // and when existing hardware_init_hook() and software_init_hook() before 
 | 
			
		||||
  // starting main(). software_init_hook() is available and has to be called due 
 | 
			
		||||
  // to initializsation when using rtos.
 | 
			
		||||
  bl _start
 | 
			
		||||
  bx  lr    
 | 
			
		||||
.size  Reset_Handler, .-Reset_Handler
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief  This is the code that gets called when the processor receives an 
 | 
			
		||||
 *         unexpected interrupt.  This simply enters an infinite loop, preserving
 | 
			
		||||
 *         the system state for examination by a debugger.
 | 
			
		||||
 * @param  None     
 | 
			
		||||
 * @retval None       
 | 
			
		||||
*/
 | 
			
		||||
    .section  .text.Default_Handler,"ax",%progbits
 | 
			
		||||
Default_Handler:
 | 
			
		||||
Infinite_Loop:
 | 
			
		||||
  b  Infinite_Loop
 | 
			
		||||
  .size  Default_Handler, .-Default_Handler
 | 
			
		||||
/******************************************************************************
 | 
			
		||||
*
 | 
			
		||||
* The minimal vector table for a Cortex M3. Note that the proper constructs
 | 
			
		||||
* must be placed on this to ensure that it ends up at physical address
 | 
			
		||||
* 0x0000.0000.
 | 
			
		||||
* 
 | 
			
		||||
*******************************************************************************/
 | 
			
		||||
   .section  .isr_vector,"a",%progbits
 | 
			
		||||
  .type  g_pfnVectors, %object
 | 
			
		||||
  .size  g_pfnVectors, .-g_pfnVectors
 | 
			
		||||
    
 | 
			
		||||
g_pfnVectors:
 | 
			
		||||
  .word  _estack
 | 
			
		||||
  .word  Reset_Handler
 | 
			
		||||
  .word  NMI_Handler
 | 
			
		||||
  .word  HardFault_Handler
 | 
			
		||||
  .word  MemManage_Handler
 | 
			
		||||
  .word  BusFault_Handler
 | 
			
		||||
  .word  UsageFault_Handler
 | 
			
		||||
  .word  0
 | 
			
		||||
  .word  0
 | 
			
		||||
  .word  0
 | 
			
		||||
  .word  0
 | 
			
		||||
  .word  SVC_Handler
 | 
			
		||||
  .word  DebugMon_Handler
 | 
			
		||||
  .word  0
 | 
			
		||||
  .word  PendSV_Handler
 | 
			
		||||
  .word  SysTick_Handler
 | 
			
		||||
  
 | 
			
		||||
  /* External Interrupts */
 | 
			
		||||
  .word     WWDG_IRQHandler                   /* Window WatchDog              */                                        
 | 
			
		||||
  .word     PVD_IRQHandler                    /* PVD through EXTI Line detection */                        
 | 
			
		||||
  .word     TAMP_STAMP_IRQHandler             /* Tamper and TimeStamps through the EXTI line */            
 | 
			
		||||
  .word     RTC_WKUP_IRQHandler               /* RTC Wakeup through the EXTI line */                      
 | 
			
		||||
  .word     FLASH_IRQHandler                  /* FLASH                        */                                          
 | 
			
		||||
  .word     RCC_IRQHandler                    /* RCC                          */                                            
 | 
			
		||||
  .word     EXTI0_IRQHandler                  /* EXTI Line0                   */                        
 | 
			
		||||
  .word     EXTI1_IRQHandler                  /* EXTI Line1                   */                          
 | 
			
		||||
  .word     EXTI2_IRQHandler                  /* EXTI Line2                   */                          
 | 
			
		||||
  .word     EXTI3_IRQHandler                  /* EXTI Line3                   */                          
 | 
			
		||||
  .word     EXTI4_IRQHandler                  /* EXTI Line4                   */                          
 | 
			
		||||
  .word     DMA1_Stream0_IRQHandler           /* DMA1 Stream 0                */                  
 | 
			
		||||
  .word     DMA1_Stream1_IRQHandler           /* DMA1 Stream 1                */                   
 | 
			
		||||
  .word     DMA1_Stream2_IRQHandler           /* DMA1 Stream 2                */                   
 | 
			
		||||
  .word     DMA1_Stream3_IRQHandler           /* DMA1 Stream 3                */                   
 | 
			
		||||
  .word     DMA1_Stream4_IRQHandler           /* DMA1 Stream 4                */                   
 | 
			
		||||
  .word     DMA1_Stream5_IRQHandler           /* DMA1 Stream 5                */                   
 | 
			
		||||
  .word     DMA1_Stream6_IRQHandler           /* DMA1 Stream 6                */                   
 | 
			
		||||
  .word     ADC_IRQHandler                    /* ADC1, ADC2 and ADC3s         */                   
 | 
			
		||||
  .word     0               				  /* Reserved                      */                         
 | 
			
		||||
  .word     0              					  /* Reserved                     */                          
 | 
			
		||||
  .word     0                                 /* Reserved                     */                          
 | 
			
		||||
  .word     0                                 /* Reserved                     */                          
 | 
			
		||||
  .word     EXTI9_5_IRQHandler                /* External Line[9:5]s          */                          
 | 
			
		||||
  .word     TIM1_BRK_TIM9_IRQHandler          /* TIM1 Break and TIM9          */         
 | 
			
		||||
  .word     TIM1_UP_TIM10_IRQHandler          /* TIM1 Update and TIM10        */         
 | 
			
		||||
  .word     TIM1_TRG_COM_TIM11_IRQHandler     /* TIM1 Trigger and Commutation and TIM11 */
 | 
			
		||||
  .word     TIM1_CC_IRQHandler                /* TIM1 Capture Compare         */                          
 | 
			
		||||
  .word     TIM2_IRQHandler                   /* TIM2                         */                   
 | 
			
		||||
  .word     TIM3_IRQHandler                   /* TIM3                         */                   
 | 
			
		||||
  .word     TIM4_IRQHandler                   /* TIM4                         */                   
 | 
			
		||||
  .word     I2C1_EV_IRQHandler                /* I2C1 Event                   */                          
 | 
			
		||||
  .word     I2C1_ER_IRQHandler                /* I2C1 Error                   */                          
 | 
			
		||||
  .word     I2C2_EV_IRQHandler                /* I2C2 Event                   */                          
 | 
			
		||||
  .word     I2C2_ER_IRQHandler                /* I2C2 Error                   */                            
 | 
			
		||||
  .word     SPI1_IRQHandler                   /* SPI1                         */                   
 | 
			
		||||
  .word     SPI2_IRQHandler                   /* SPI2                         */                   
 | 
			
		||||
  .word     USART1_IRQHandler                 /* USART1                       */                   
 | 
			
		||||
  .word     USART2_IRQHandler                 /* USART2                       */                   
 | 
			
		||||
  .word     0               				  /* Reserved                       */                   
 | 
			
		||||
  .word     EXTI15_10_IRQHandler              /* External Line[15:10]s        */                          
 | 
			
		||||
  .word     RTC_Alarm_IRQHandler              /* RTC Alarm (A and B) through EXTI Line */                 
 | 
			
		||||
  .word     OTG_FS_WKUP_IRQHandler            /* USB OTG FS Wakeup through EXTI line */                       
 | 
			
		||||
  .word     0                                 /* Reserved     				  */         
 | 
			
		||||
  .word     0                                 /* Reserved       			  */         
 | 
			
		||||
  .word     0                                 /* Reserved 					  */
 | 
			
		||||
  .word     0                                 /* Reserved                     */                          
 | 
			
		||||
  .word     DMA1_Stream7_IRQHandler           /* DMA1 Stream7                 */                          
 | 
			
		||||
  .word     0                                 /* Reserved                     */                   
 | 
			
		||||
  .word     SDIO_IRQHandler                   /* SDIO                         */                   
 | 
			
		||||
  .word     TIM5_IRQHandler                   /* TIM5                         */                   
 | 
			
		||||
  .word     SPI3_IRQHandler                   /* SPI3                         */                   
 | 
			
		||||
  .word     0                                 /* Reserved                     */                   
 | 
			
		||||
  .word     0                                 /* Reserved                     */                   
 | 
			
		||||
  .word     0                                 /* Reserved                     */                   
 | 
			
		||||
  .word     0                                 /* Reserved                     */
 | 
			
		||||
  .word     DMA2_Stream0_IRQHandler           /* DMA2 Stream 0                */                   
 | 
			
		||||
  .word     DMA2_Stream1_IRQHandler           /* DMA2 Stream 1                */                   
 | 
			
		||||
  .word     DMA2_Stream2_IRQHandler           /* DMA2 Stream 2                */                   
 | 
			
		||||
  .word     DMA2_Stream3_IRQHandler           /* DMA2 Stream 3                */                   
 | 
			
		||||
  .word     DMA2_Stream4_IRQHandler           /* DMA2 Stream 4                */                   
 | 
			
		||||
  .word     0                    			  /* Reserved                     */                   
 | 
			
		||||
  .word     0              					  /* Reserved                     */                     
 | 
			
		||||
  .word     0              					  /* Reserved                     */                          
 | 
			
		||||
  .word     0             					  /* Reserved                     */                          
 | 
			
		||||
  .word     0              					  /* Reserved                     */                          
 | 
			
		||||
  .word     0              					  /* Reserved                     */                          
 | 
			
		||||
  .word     OTG_FS_IRQHandler                 /* USB OTG FS                   */                   
 | 
			
		||||
  .word     DMA2_Stream5_IRQHandler           /* DMA2 Stream 5                */                   
 | 
			
		||||
  .word     DMA2_Stream6_IRQHandler           /* DMA2 Stream 6                */                   
 | 
			
		||||
  .word     DMA2_Stream7_IRQHandler           /* DMA2 Stream 7                */                   
 | 
			
		||||
  .word     USART6_IRQHandler                 /* USART6                       */                    
 | 
			
		||||
  .word     I2C3_EV_IRQHandler                /* I2C3 event                   */                          
 | 
			
		||||
  .word     I2C3_ER_IRQHandler                /* I2C3 error                   */                          
 | 
			
		||||
  .word     0                                 /* Reserved                     */                   
 | 
			
		||||
  .word     0                                 /* Reserved                     */                   
 | 
			
		||||
  .word     0                                 /* Reserved                     */                         
 | 
			
		||||
  .word     0                                 /* Reserved                     */                   
 | 
			
		||||
  .word     0                                 /* Reserved                     */                   
 | 
			
		||||
  .word     0                                 /* Reserved                     */                   
 | 
			
		||||
  .word     0                                 /* Reserved                     */
 | 
			
		||||
  .word     FPU_IRQHandler                    /* FPU                          */
 | 
			
		||||
  .word     0                                 /* Reserved                     */                   
 | 
			
		||||
  .word     0                                 /* Reserved                     */
 | 
			
		||||
  .word     SPI4_IRQHandler                   /* SPI4                         */
 | 
			
		||||
  .word     SPI5_IRQHandler                   /* SPI5                         */  
 | 
			
		||||
                    
 | 
			
		||||
/*******************************************************************************
 | 
			
		||||
*
 | 
			
		||||
* Provide weak aliases for each Exception handler to the Default_Handler. 
 | 
			
		||||
* As they are weak aliases, any function with the same name will override 
 | 
			
		||||
* this definition.
 | 
			
		||||
* 
 | 
			
		||||
*******************************************************************************/
 | 
			
		||||
   .weak      NMI_Handler
 | 
			
		||||
   .thumb_set NMI_Handler,Default_Handler
 | 
			
		||||
  
 | 
			
		||||
   .weak      HardFault_Handler
 | 
			
		||||
   .thumb_set HardFault_Handler,Default_Handler
 | 
			
		||||
  
 | 
			
		||||
   .weak      MemManage_Handler
 | 
			
		||||
   .thumb_set MemManage_Handler,Default_Handler
 | 
			
		||||
  
 | 
			
		||||
   .weak      BusFault_Handler
 | 
			
		||||
   .thumb_set BusFault_Handler,Default_Handler
 | 
			
		||||
 | 
			
		||||
   .weak      UsageFault_Handler
 | 
			
		||||
   .thumb_set UsageFault_Handler,Default_Handler
 | 
			
		||||
 | 
			
		||||
   .weak      SVC_Handler
 | 
			
		||||
   .thumb_set SVC_Handler,Default_Handler
 | 
			
		||||
 | 
			
		||||
   .weak      DebugMon_Handler
 | 
			
		||||
   .thumb_set DebugMon_Handler,Default_Handler
 | 
			
		||||
 | 
			
		||||
   .weak      PendSV_Handler
 | 
			
		||||
   .thumb_set PendSV_Handler,Default_Handler
 | 
			
		||||
 | 
			
		||||
   .weak      SysTick_Handler
 | 
			
		||||
   .thumb_set SysTick_Handler,Default_Handler              
 | 
			
		||||
  
 | 
			
		||||
   .weak      WWDG_IRQHandler                   
 | 
			
		||||
   .thumb_set WWDG_IRQHandler,Default_Handler      
 | 
			
		||||
                  
 | 
			
		||||
   .weak      PVD_IRQHandler      
 | 
			
		||||
   .thumb_set PVD_IRQHandler,Default_Handler
 | 
			
		||||
               
 | 
			
		||||
   .weak      TAMP_STAMP_IRQHandler            
 | 
			
		||||
   .thumb_set TAMP_STAMP_IRQHandler,Default_Handler
 | 
			
		||||
            
 | 
			
		||||
   .weak      RTC_WKUP_IRQHandler                  
 | 
			
		||||
   .thumb_set RTC_WKUP_IRQHandler,Default_Handler
 | 
			
		||||
            
 | 
			
		||||
   .weak      FLASH_IRQHandler         
 | 
			
		||||
   .thumb_set FLASH_IRQHandler,Default_Handler
 | 
			
		||||
                  
 | 
			
		||||
   .weak      RCC_IRQHandler      
 | 
			
		||||
   .thumb_set RCC_IRQHandler,Default_Handler
 | 
			
		||||
                  
 | 
			
		||||
   .weak      EXTI0_IRQHandler         
 | 
			
		||||
   .thumb_set EXTI0_IRQHandler,Default_Handler
 | 
			
		||||
                  
 | 
			
		||||
   .weak      EXTI1_IRQHandler         
 | 
			
		||||
   .thumb_set EXTI1_IRQHandler,Default_Handler
 | 
			
		||||
                     
 | 
			
		||||
   .weak      EXTI2_IRQHandler         
 | 
			
		||||
   .thumb_set EXTI2_IRQHandler,Default_Handler 
 | 
			
		||||
                 
 | 
			
		||||
   .weak      EXTI3_IRQHandler         
 | 
			
		||||
   .thumb_set EXTI3_IRQHandler,Default_Handler
 | 
			
		||||
                        
 | 
			
		||||
   .weak      EXTI4_IRQHandler         
 | 
			
		||||
   .thumb_set EXTI4_IRQHandler,Default_Handler
 | 
			
		||||
                  
 | 
			
		||||
   .weak      DMA1_Stream0_IRQHandler               
 | 
			
		||||
   .thumb_set DMA1_Stream0_IRQHandler,Default_Handler
 | 
			
		||||
         
 | 
			
		||||
   .weak      DMA1_Stream1_IRQHandler               
 | 
			
		||||
   .thumb_set DMA1_Stream1_IRQHandler,Default_Handler
 | 
			
		||||
                  
 | 
			
		||||
   .weak      DMA1_Stream2_IRQHandler               
 | 
			
		||||
   .thumb_set DMA1_Stream2_IRQHandler,Default_Handler
 | 
			
		||||
                  
 | 
			
		||||
   .weak      DMA1_Stream3_IRQHandler               
 | 
			
		||||
   .thumb_set DMA1_Stream3_IRQHandler,Default_Handler 
 | 
			
		||||
                 
 | 
			
		||||
   .weak      DMA1_Stream4_IRQHandler              
 | 
			
		||||
   .thumb_set DMA1_Stream4_IRQHandler,Default_Handler
 | 
			
		||||
                  
 | 
			
		||||
   .weak      DMA1_Stream5_IRQHandler               
 | 
			
		||||
   .thumb_set DMA1_Stream5_IRQHandler,Default_Handler
 | 
			
		||||
                  
 | 
			
		||||
   .weak      DMA1_Stream6_IRQHandler               
 | 
			
		||||
   .thumb_set DMA1_Stream6_IRQHandler,Default_Handler
 | 
			
		||||
                  
 | 
			
		||||
   .weak      ADC_IRQHandler      
 | 
			
		||||
   .thumb_set ADC_IRQHandler,Default_Handler
 | 
			
		||||
            
 | 
			
		||||
   .weak      EXTI9_5_IRQHandler   
 | 
			
		||||
   .thumb_set EXTI9_5_IRQHandler,Default_Handler
 | 
			
		||||
            
 | 
			
		||||
   .weak      TIM1_BRK_TIM9_IRQHandler            
 | 
			
		||||
   .thumb_set TIM1_BRK_TIM9_IRQHandler,Default_Handler
 | 
			
		||||
            
 | 
			
		||||
   .weak      TIM1_UP_TIM10_IRQHandler            
 | 
			
		||||
   .thumb_set TIM1_UP_TIM10_IRQHandler,Default_Handler
 | 
			
		||||
      
 | 
			
		||||
   .weak      TIM1_TRG_COM_TIM11_IRQHandler      
 | 
			
		||||
   .thumb_set TIM1_TRG_COM_TIM11_IRQHandler,Default_Handler
 | 
			
		||||
      
 | 
			
		||||
   .weak      TIM1_CC_IRQHandler   
 | 
			
		||||
   .thumb_set TIM1_CC_IRQHandler,Default_Handler
 | 
			
		||||
                  
 | 
			
		||||
   .weak      TIM2_IRQHandler            
 | 
			
		||||
   .thumb_set TIM2_IRQHandler,Default_Handler
 | 
			
		||||
                  
 | 
			
		||||
   .weak      TIM3_IRQHandler            
 | 
			
		||||
   .thumb_set TIM3_IRQHandler,Default_Handler
 | 
			
		||||
                  
 | 
			
		||||
   .weak      TIM4_IRQHandler            
 | 
			
		||||
   .thumb_set TIM4_IRQHandler,Default_Handler
 | 
			
		||||
                  
 | 
			
		||||
   .weak      I2C1_EV_IRQHandler   
 | 
			
		||||
   .thumb_set I2C1_EV_IRQHandler,Default_Handler
 | 
			
		||||
                     
 | 
			
		||||
   .weak      I2C1_ER_IRQHandler   
 | 
			
		||||
   .thumb_set I2C1_ER_IRQHandler,Default_Handler
 | 
			
		||||
                     
 | 
			
		||||
   .weak      I2C2_EV_IRQHandler   
 | 
			
		||||
   .thumb_set I2C2_EV_IRQHandler,Default_Handler
 | 
			
		||||
                  
 | 
			
		||||
   .weak      I2C2_ER_IRQHandler   
 | 
			
		||||
   .thumb_set I2C2_ER_IRQHandler,Default_Handler
 | 
			
		||||
                           
 | 
			
		||||
   .weak      SPI1_IRQHandler            
 | 
			
		||||
   .thumb_set SPI1_IRQHandler,Default_Handler
 | 
			
		||||
                        
 | 
			
		||||
   .weak      SPI2_IRQHandler            
 | 
			
		||||
   .thumb_set SPI2_IRQHandler,Default_Handler
 | 
			
		||||
                  
 | 
			
		||||
   .weak      USART1_IRQHandler      
 | 
			
		||||
   .thumb_set USART1_IRQHandler,Default_Handler
 | 
			
		||||
                     
 | 
			
		||||
   .weak      USART2_IRQHandler      
 | 
			
		||||
   .thumb_set USART2_IRQHandler,Default_Handler
 | 
			
		||||
                                  
 | 
			
		||||
   .weak      EXTI15_10_IRQHandler               
 | 
			
		||||
   .thumb_set EXTI15_10_IRQHandler,Default_Handler
 | 
			
		||||
               
 | 
			
		||||
   .weak      RTC_Alarm_IRQHandler               
 | 
			
		||||
   .thumb_set RTC_Alarm_IRQHandler,Default_Handler
 | 
			
		||||
            
 | 
			
		||||
   .weak      OTG_FS_WKUP_IRQHandler         
 | 
			
		||||
   .thumb_set OTG_FS_WKUP_IRQHandler,Default_Handler
 | 
			
		||||
            
 | 
			
		||||
   .weak      DMA1_Stream7_IRQHandler               
 | 
			
		||||
   .thumb_set DMA1_Stream7_IRQHandler,Default_Handler
 | 
			
		||||
                     
 | 
			
		||||
   .weak      SDIO_IRQHandler            
 | 
			
		||||
   .thumb_set SDIO_IRQHandler,Default_Handler
 | 
			
		||||
                     
 | 
			
		||||
   .weak      TIM5_IRQHandler            
 | 
			
		||||
   .thumb_set TIM5_IRQHandler,Default_Handler
 | 
			
		||||
                     
 | 
			
		||||
   .weak      SPI3_IRQHandler            
 | 
			
		||||
   .thumb_set SPI3_IRQHandler,Default_Handler
 | 
			
		||||
                     
 | 
			
		||||
   .weak      DMA2_Stream0_IRQHandler               
 | 
			
		||||
   .thumb_set DMA2_Stream0_IRQHandler,Default_Handler
 | 
			
		||||
               
 | 
			
		||||
   .weak      DMA2_Stream1_IRQHandler               
 | 
			
		||||
   .thumb_set DMA2_Stream1_IRQHandler,Default_Handler
 | 
			
		||||
                  
 | 
			
		||||
   .weak      DMA2_Stream2_IRQHandler               
 | 
			
		||||
   .thumb_set DMA2_Stream2_IRQHandler,Default_Handler
 | 
			
		||||
            
 | 
			
		||||
   .weak      DMA2_Stream3_IRQHandler               
 | 
			
		||||
   .thumb_set DMA2_Stream3_IRQHandler,Default_Handler
 | 
			
		||||
            
 | 
			
		||||
   .weak      DMA2_Stream4_IRQHandler               
 | 
			
		||||
   .thumb_set DMA2_Stream4_IRQHandler,Default_Handler
 | 
			
		||||
            
 | 
			
		||||
   .weak      OTG_FS_IRQHandler      
 | 
			
		||||
   .thumb_set OTG_FS_IRQHandler,Default_Handler
 | 
			
		||||
                     
 | 
			
		||||
   .weak      DMA2_Stream5_IRQHandler               
 | 
			
		||||
   .thumb_set DMA2_Stream5_IRQHandler,Default_Handler
 | 
			
		||||
                  
 | 
			
		||||
   .weak      DMA2_Stream6_IRQHandler               
 | 
			
		||||
   .thumb_set DMA2_Stream6_IRQHandler,Default_Handler
 | 
			
		||||
                  
 | 
			
		||||
   .weak      DMA2_Stream7_IRQHandler               
 | 
			
		||||
   .thumb_set DMA2_Stream7_IRQHandler,Default_Handler
 | 
			
		||||
                  
 | 
			
		||||
   .weak      USART6_IRQHandler      
 | 
			
		||||
   .thumb_set USART6_IRQHandler,Default_Handler
 | 
			
		||||
                        
 | 
			
		||||
   .weak      I2C3_EV_IRQHandler   
 | 
			
		||||
   .thumb_set I2C3_EV_IRQHandler,Default_Handler
 | 
			
		||||
                        
 | 
			
		||||
   .weak      I2C3_ER_IRQHandler   
 | 
			
		||||
   .thumb_set I2C3_ER_IRQHandler,Default_Handler
 | 
			
		||||
                        
 | 
			
		||||
   .weak      FPU_IRQHandler                  
 | 
			
		||||
   .thumb_set FPU_IRQHandler,Default_Handler  
 | 
			
		||||
 | 
			
		||||
   .weak      SPI4_IRQHandler                  
 | 
			
		||||
   .thumb_set SPI4_IRQHandler,Default_Handler
 | 
			
		||||
 | 
			
		||||
   .weak      SPI5_IRQHandler                  
 | 
			
		||||
   .thumb_set SPI5_IRQHandler,Default_Handler    
 | 
			
		||||
 | 
			
		||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,38 @@
 | 
			
		|||
/* mbed Microcontroller Library
 | 
			
		||||
 * A generic CMSIS include header
 | 
			
		||||
 *******************************************************************************
 | 
			
		||||
 * Copyright (c) 2014, STMicroelectronics
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
 *    this list of conditions and the following disclaimer.
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 | 
			
		||||
 *    this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
 *    and/or other materials provided with the distribution.
 | 
			
		||||
 * 3. Neither the name of STMicroelectronics nor the names of its contributors
 | 
			
		||||
 *    may be used to endorse or promote products derived from this software
 | 
			
		||||
 *    without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 | 
			
		||||
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 | 
			
		||||
 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 | 
			
		||||
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 *******************************************************************************
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef MBED_CMSIS_H
 | 
			
		||||
#define MBED_CMSIS_H
 | 
			
		||||
 | 
			
		||||
#include "stm32f4xx.h"
 | 
			
		||||
#include "cmsis_nvic.h"
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,55 @@
 | 
			
		|||
/* mbed Microcontroller Library
 | 
			
		||||
 * CMSIS-style functionality to support dynamic vectors
 | 
			
		||||
 *******************************************************************************
 | 
			
		||||
 * Copyright (c) 2014, STMicroelectronics
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
 *    this list of conditions and the following disclaimer.
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 | 
			
		||||
 *    this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
 *    and/or other materials provided with the distribution.
 | 
			
		||||
 * 3. Neither the name of STMicroelectronics nor the names of its contributors
 | 
			
		||||
 *    may be used to endorse or promote products derived from this software
 | 
			
		||||
 *    without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 | 
			
		||||
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 | 
			
		||||
 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 | 
			
		||||
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 *******************************************************************************
 | 
			
		||||
 */ 
 | 
			
		||||
#include "cmsis_nvic.h"
 | 
			
		||||
 | 
			
		||||
#define NVIC_RAM_VECTOR_ADDRESS   (0x20000000)  // Vectors positioned at start of RAM
 | 
			
		||||
#define NVIC_FLASH_VECTOR_ADDRESS (0x08000000)  // Initial vector position in flash
 | 
			
		||||
 | 
			
		||||
void NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) {
 | 
			
		||||
    uint32_t *vectors = (uint32_t *)SCB->VTOR;
 | 
			
		||||
    uint32_t i;
 | 
			
		||||
 | 
			
		||||
    // Copy and switch to dynamic vectors if the first time called
 | 
			
		||||
    if (SCB->VTOR == NVIC_FLASH_VECTOR_ADDRESS) {
 | 
			
		||||
        uint32_t *old_vectors = vectors;
 | 
			
		||||
        vectors = (uint32_t*)NVIC_RAM_VECTOR_ADDRESS;
 | 
			
		||||
        for (i=0; i<NVIC_NUM_VECTORS; i++) {
 | 
			
		||||
            vectors[i] = old_vectors[i];
 | 
			
		||||
        }
 | 
			
		||||
        SCB->VTOR = (uint32_t)NVIC_RAM_VECTOR_ADDRESS;
 | 
			
		||||
    }
 | 
			
		||||
    vectors[IRQn + NVIC_USER_IRQ_OFFSET] = vector;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uint32_t NVIC_GetVector(IRQn_Type IRQn) {
 | 
			
		||||
    uint32_t *vectors = (uint32_t*)SCB->VTOR;
 | 
			
		||||
    return vectors[IRQn + NVIC_USER_IRQ_OFFSET];
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,55 @@
 | 
			
		|||
/* mbed Microcontroller Library
 | 
			
		||||
 * CMSIS-style functionality to support dynamic vectors
 | 
			
		||||
 *******************************************************************************
 | 
			
		||||
 * Copyright (c) 2014, STMicroelectronics
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
 *    this list of conditions and the following disclaimer.
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 | 
			
		||||
 *    this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
 *    and/or other materials provided with the distribution.
 | 
			
		||||
 * 3. Neither the name of STMicroelectronics nor the names of its contributors
 | 
			
		||||
 *    may be used to endorse or promote products derived from this software
 | 
			
		||||
 *    without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 | 
			
		||||
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 | 
			
		||||
 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 | 
			
		||||
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 *******************************************************************************
 | 
			
		||||
 */ 
 | 
			
		||||
 | 
			
		||||
#ifndef MBED_CMSIS_NVIC_H
 | 
			
		||||
#define MBED_CMSIS_NVIC_H
 | 
			
		||||
 | 
			
		||||
// STM32F411RE
 | 
			
		||||
// CORE: 16 vectors = 64 bytes from 0x00 to 0x3F
 | 
			
		||||
// MCU Peripherals: 86 vectors = 344 bytes from 0x40 to 0x197
 | 
			
		||||
// Total: 102 vectors = 408 bytes (0x198) to be reserved in RAM
 | 
			
		||||
#define NVIC_NUM_VECTORS      102
 | 
			
		||||
#define NVIC_USER_IRQ_OFFSET  16
 | 
			
		||||
 | 
			
		||||
#include "cmsis.h"
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
void NVIC_SetVector(IRQn_Type IRQn, uint32_t vector);
 | 
			
		||||
uint32_t NVIC_GetVector(IRQn_Type IRQn);
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,122 @@
 | 
			
		|||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    hal_tick.c
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   Initialization of HAL tick
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * <h2><center>© COPYRIGHT 2014 STMicroelectronics</center></h2>
 | 
			
		||||
  *
 | 
			
		||||
  * Redistribution and use in source and binary forms, with or without modification,
 | 
			
		||||
  * are permitted provided that the following conditions are met:
 | 
			
		||||
  *   1. Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
  *      this list of conditions and the following disclaimer.
 | 
			
		||||
  *   2. Redistributions in binary form must reproduce the above copyright notice,
 | 
			
		||||
  *      this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
  *      and/or other materials provided with the distribution.
 | 
			
		||||
  *   3. Neither the name of STMicroelectronics nor the names of its contributors
 | 
			
		||||
  *      may be used to endorse or promote products derived from this software
 | 
			
		||||
  *      without specific prior written permission.
 | 
			
		||||
  *
 | 
			
		||||
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 | 
			
		||||
  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 | 
			
		||||
  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 | 
			
		||||
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
  *
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  */
 | 
			
		||||
#include "hal_tick.h"
 | 
			
		||||
 | 
			
		||||
TIM_HandleTypeDef TimMasterHandle;
 | 
			
		||||
uint32_t PreviousVal = 0;
 | 
			
		||||
 | 
			
		||||
void us_ticker_irq_handler(void);
 | 
			
		||||
 | 
			
		||||
void timer_irq_handler(void) {
 | 
			
		||||
    // Channel 1 for mbed timeout
 | 
			
		||||
    if (__HAL_TIM_GET_ITSTATUS(&TimMasterHandle, TIM_IT_CC1) == SET) {
 | 
			
		||||
        us_ticker_irq_handler();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Channel 2 for HAL tick
 | 
			
		||||
    if (__HAL_TIM_GET_ITSTATUS(&TimMasterHandle, TIM_IT_CC2) == SET) {
 | 
			
		||||
        __HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC2);
 | 
			
		||||
        uint32_t val = __HAL_TIM_GetCounter(&TimMasterHandle);
 | 
			
		||||
        if ((val - PreviousVal) >= HAL_TICK_DELAY) {
 | 
			
		||||
            // Increment HAL variable
 | 
			
		||||
            HAL_IncTick();
 | 
			
		||||
            // Prepare next interrupt
 | 
			
		||||
            __HAL_TIM_SetCompare(&TimMasterHandle, TIM_CHANNEL_2, val + HAL_TICK_DELAY);
 | 
			
		||||
            PreviousVal = val;
 | 
			
		||||
#if 0 // For DEBUG only
 | 
			
		||||
            HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_6);
 | 
			
		||||
#endif
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Reconfigure the HAL tick using a standard timer instead of systick.
 | 
			
		||||
HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) {
 | 
			
		||||
    // Enable timer clock
 | 
			
		||||
    TIM_MST_RCC;
 | 
			
		||||
 | 
			
		||||
    // Reset timer
 | 
			
		||||
    TIM_MST_RESET_ON;
 | 
			
		||||
    TIM_MST_RESET_OFF;
 | 
			
		||||
 | 
			
		||||
    // Update the SystemCoreClock variable
 | 
			
		||||
    SystemCoreClockUpdate();
 | 
			
		||||
 | 
			
		||||
    // Configure time base
 | 
			
		||||
    TimMasterHandle.Instance = TIM_MST;
 | 
			
		||||
    TimMasterHandle.Init.Period            = 0xFFFFFFFF;
 | 
			
		||||
    TimMasterHandle.Init.Prescaler         = (uint32_t)(SystemCoreClock / 1000000) - 1; // 1 µs tick
 | 
			
		||||
    TimMasterHandle.Init.ClockDivision     = 0;
 | 
			
		||||
    TimMasterHandle.Init.CounterMode       = TIM_COUNTERMODE_UP;
 | 
			
		||||
    TimMasterHandle.Init.RepetitionCounter = 0;
 | 
			
		||||
    HAL_TIM_OC_Init(&TimMasterHandle);
 | 
			
		||||
 | 
			
		||||
    NVIC_SetVector(TIM_MST_IRQ, (uint32_t)timer_irq_handler);
 | 
			
		||||
    NVIC_EnableIRQ(TIM_MST_IRQ);
 | 
			
		||||
 | 
			
		||||
    // Channel 1 for mbed timeout
 | 
			
		||||
    HAL_TIM_OC_Start(&TimMasterHandle, TIM_CHANNEL_1);
 | 
			
		||||
 | 
			
		||||
    // Channel 2 for HAL tick
 | 
			
		||||
    HAL_TIM_OC_Start(&TimMasterHandle, TIM_CHANNEL_2);
 | 
			
		||||
    PreviousVal = __HAL_TIM_GetCounter(&TimMasterHandle);
 | 
			
		||||
    __HAL_TIM_SetCompare(&TimMasterHandle, TIM_CHANNEL_2, PreviousVal + HAL_TICK_DELAY);
 | 
			
		||||
    __HAL_TIM_ENABLE_IT(&TimMasterHandle, TIM_IT_CC2);
 | 
			
		||||
 | 
			
		||||
#if 0 // For DEBUG only
 | 
			
		||||
    __GPIOB_CLK_ENABLE();
 | 
			
		||||
    GPIO_InitTypeDef GPIO_InitStruct;
 | 
			
		||||
    GPIO_InitStruct.Pin = GPIO_PIN_6;
 | 
			
		||||
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
 | 
			
		||||
    GPIO_InitStruct.Pull = GPIO_PULLUP;
 | 
			
		||||
    GPIO_InitStruct.Speed = GPIO_SPEED_FAST;
 | 
			
		||||
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    return HAL_OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
  
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */    
 | 
			
		||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,60 @@
 | 
			
		|||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    hal_tick.h
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   Initialization of HAL tick
 | 
			
		||||
  ******************************************************************************  
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
 | 
			
		||||
  *
 | 
			
		||||
  * Redistribution and use in source and binary forms, with or without modification,
 | 
			
		||||
  * are permitted provided that the following conditions are met:
 | 
			
		||||
  *   1. Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
  *      this list of conditions and the following disclaimer.
 | 
			
		||||
  *   2. Redistributions in binary form must reproduce the above copyright notice,
 | 
			
		||||
  *      this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
  *      and/or other materials provided with the distribution.
 | 
			
		||||
  *   3. Neither the name of STMicroelectronics nor the names of its contributors
 | 
			
		||||
  *      may be used to endorse or promote products derived from this software
 | 
			
		||||
  *      without specific prior written permission.
 | 
			
		||||
  *
 | 
			
		||||
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 | 
			
		||||
  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 | 
			
		||||
  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 | 
			
		||||
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
  *
 | 
			
		||||
  ******************************************************************************  
 | 
			
		||||
  */ 
 | 
			
		||||
#ifndef __HAL_TICK_H
 | 
			
		||||
#define __HAL_TICK_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
 extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "stm32f4xx.h"
 | 
			
		||||
#include "cmsis_nvic.h"
 | 
			
		||||
   
 | 
			
		||||
#define TIM_MST      TIM5
 | 
			
		||||
#define TIM_MST_IRQ  TIM5_IRQn
 | 
			
		||||
#define TIM_MST_RCC  __TIM5_CLK_ENABLE()
 | 
			
		||||
 | 
			
		||||
#define TIM_MST_RESET_ON   __TIM5_FORCE_RESET()
 | 
			
		||||
#define TIM_MST_RESET_OFF  __TIM5_RELEASE_RESET()
 | 
			
		||||
 | 
			
		||||
#define HAL_TICK_DELAY (1000) // 1 ms
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif // __HAL_TICK_H
 | 
			
		||||
 | 
			
		||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| 
						 | 
				
			
			@ -0,0 +1,232 @@
 | 
			
		|||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32f4xx.h
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @version V2.3.0
 | 
			
		||||
  * @date    02-March-2015
 | 
			
		||||
  * @brief   CMSIS STM32F4xx Device Peripheral Access Layer Header File.           
 | 
			
		||||
  *            
 | 
			
		||||
  *          The file is the unique include file that the application programmer
 | 
			
		||||
  *          is using in the C source code, usually in main.c. This file contains:
 | 
			
		||||
  *           - Configuration section that allows to select:
 | 
			
		||||
  *              - The STM32F4xx device used in the target application
 | 
			
		||||
  *              - To use or not the peripheral’s drivers in application code(i.e. 
 | 
			
		||||
  *                code will be based on direct access to peripheral’s registers 
 | 
			
		||||
  *                rather than drivers API), this option is controlled by 
 | 
			
		||||
  *                "#define USE_HAL_DRIVER"
 | 
			
		||||
  *  
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * <h2><center>© COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
 | 
			
		||||
  *
 | 
			
		||||
  * Redistribution and use in source and binary forms, with or without modification,
 | 
			
		||||
  * are permitted provided that the following conditions are met:
 | 
			
		||||
  *   1. Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
  *      this list of conditions and the following disclaimer.
 | 
			
		||||
  *   2. Redistributions in binary form must reproduce the above copyright notice,
 | 
			
		||||
  *      this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
  *      and/or other materials provided with the distribution.
 | 
			
		||||
  *   3. Neither the name of STMicroelectronics nor the names of its contributors
 | 
			
		||||
  *      may be used to endorse or promote products derived from this software
 | 
			
		||||
  *      without specific prior written permission.
 | 
			
		||||
  *
 | 
			
		||||
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 | 
			
		||||
  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 | 
			
		||||
  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 | 
			
		||||
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
  *
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup CMSIS
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup stm32f4xx
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
    
 | 
			
		||||
#ifndef __STM32F4xx_H
 | 
			
		||||
#define __STM32F4xx_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
 extern "C" {
 | 
			
		||||
#endif /* __cplusplus */
 | 
			
		||||
   
 | 
			
		||||
/** @addtogroup Library_configuration_section
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
  
 | 
			
		||||
/**
 | 
			
		||||
  * @brief STM32 Family
 | 
			
		||||
  */
 | 
			
		||||
#if !defined  (STM32F4)
 | 
			
		||||
#define STM32F4
 | 
			
		||||
#endif /* STM32F4 */
 | 
			
		||||
 | 
			
		||||
/* Uncomment the line below according to the target STM32 device used in your
 | 
			
		||||
   application 
 | 
			
		||||
  */
 | 
			
		||||
#if !defined (STM32F405xx) && !defined (STM32F415xx) && !defined (STM32F407xx) && !defined (STM32F417xx) && \
 | 
			
		||||
    !defined (STM32F427xx) && !defined (STM32F437xx) && !defined (STM32F429xx) && !defined (STM32F439xx) && \
 | 
			
		||||
    !defined (STM32F401xC) && !defined (STM32F401xE) && !defined (STM32F411xE) && !defined (STM32F446xx)
 | 
			
		||||
  /* #define STM32F405xx */   /*!< STM32F405RG, STM32F405VG and STM32F405ZG Devices */
 | 
			
		||||
  /* #define STM32F415xx */   /*!< STM32F415RG, STM32F415VG and STM32F415ZG Devices */
 | 
			
		||||
  /* #define STM32F407xx */   /*!< STM32F407VG, STM32F407VE, STM32F407ZG, STM32F407ZE, STM32F407IG  and STM32F407IE Devices */
 | 
			
		||||
  /* #define STM32F417xx */   /*!< STM32F417VG, STM32F417VE, STM32F417ZG, STM32F417ZE, STM32F417IG and STM32F417IE Devices */
 | 
			
		||||
  /* #define STM32F427xx */   /*!< STM32F427VG, STM32F427VI, STM32F427ZG, STM32F427ZI, STM32F427IG and STM32F427II Devices */
 | 
			
		||||
  /* #define STM32F437xx */   /*!< STM32F437VG, STM32F437VI, STM32F437ZG, STM32F437ZI, STM32F437IG and STM32F437II Devices */
 | 
			
		||||
  /* #define STM32F429xx */   /*!< STM32F429VG, STM32F429VI, STM32F429ZG, STM32F429ZI, STM32F429BG, STM32F429BI, STM32F429NG, 
 | 
			
		||||
                                   STM32F439NI, STM32F429IG  and STM32F429II Devices */
 | 
			
		||||
  /* #define STM32F439xx */   /*!< STM32F439VG, STM32F439VI, STM32F439ZG, STM32F439ZI, STM32F439BG, STM32F439BI, STM32F439NG, 
 | 
			
		||||
                                   STM32F439NI, STM32F439IG and STM32F439II Devices */
 | 
			
		||||
  /* #define STM32F401xC */   /*!< STM32F401CB, STM32F401CC, STM32F401RB, STM32F401RC, STM32F401VB and STM32F401VC Devices */
 | 
			
		||||
  /* #define STM32F401xE */   /*!< STM32F401CD, STM32F401RD, STM32F401VD, STM32F401CE, STM32F401RE and STM32F401VE Devices */
 | 
			
		||||
  /* #define STM32F411xE */   /*!< STM32F411CD, STM32F411RD, STM32F411VD, STM32F411CE, STM32F411RE and STM32F411VE Devices */
 | 
			
		||||
  #define STM32F446xx         /*!< STM32F446MC, STM32F446ME, STM32F446RC, STM32F446RE, STM32F446VC, STM32F446VE, STM32F446ZC, 
 | 
			
		||||
                                   and STM32F446ZE Devices */ 
 | 
			
		||||
#endif
 | 
			
		||||
   
 | 
			
		||||
/*  Tip: To avoid modifying this file each time you need to switch between these
 | 
			
		||||
        devices, you can define the device in your toolchain compiler preprocessor.
 | 
			
		||||
  */
 | 
			
		||||
#if !defined  (USE_HAL_DRIVER)
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Comment the line below if you will not use the peripherals drivers.
 | 
			
		||||
   In this case, these drivers will not be included and the application code will 
 | 
			
		||||
   be based on direct access to peripherals registers 
 | 
			
		||||
   */
 | 
			
		||||
  #define USE_HAL_DRIVER
 | 
			
		||||
#endif /* USE_HAL_DRIVER */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief CMSIS Device version number V2.3.0
 | 
			
		||||
  */
 | 
			
		||||
#define __STM32F4xx_CMSIS_DEVICE_VERSION_MAIN   (0x02) /*!< [31:24] main version */                                  
 | 
			
		||||
#define __STM32F4xx_CMSIS_DEVICE_VERSION_SUB1   (0x03) /*!< [23:16] sub1 version */
 | 
			
		||||
#define __STM32F4xx_CMSIS_DEVICE_VERSION_SUB2   (0x00) /*!< [15:8]  sub2 version */
 | 
			
		||||
#define __STM32F4xx_CMSIS_DEVICE_VERSION_RC     (0x00) /*!< [7:0]  release candidate */ 
 | 
			
		||||
#define __STM32F4xx_CMSIS_DEVICE_VERSION        ((__STM32F4xx_CMSIS_DEVICE_VERSION_MAIN << 24)\
 | 
			
		||||
                                                |(__STM32F4xx_CMSIS_DEVICE_VERSION_SUB1 << 16)\
 | 
			
		||||
                                                |(__STM32F4xx_CMSIS_DEVICE_VERSION_SUB2 << 8 )\
 | 
			
		||||
                                                |(__STM32F4xx_CMSIS_DEVICE_VERSION))
 | 
			
		||||
                                             
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup Device_Included
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#if defined(STM32F405xx)
 | 
			
		||||
  #include "stm32f405xx.h"
 | 
			
		||||
#elif defined(STM32F415xx)
 | 
			
		||||
  #include "stm32f415xx.h"
 | 
			
		||||
#elif defined(STM32F407xx)
 | 
			
		||||
  #include "stm32f407xx.h"
 | 
			
		||||
#elif defined(STM32F417xx)
 | 
			
		||||
  #include "stm32f417xx.h"
 | 
			
		||||
#elif defined(STM32F427xx)
 | 
			
		||||
  #include "stm32f427xx.h"
 | 
			
		||||
#elif defined(STM32F437xx)
 | 
			
		||||
  #include "stm32f437xx.h"
 | 
			
		||||
#elif defined(STM32F429xx)
 | 
			
		||||
  #include "stm32f429xx.h"
 | 
			
		||||
#elif defined(STM32F439xx)
 | 
			
		||||
  #include "stm32f439xx.h"
 | 
			
		||||
#elif defined(STM32F401xC)
 | 
			
		||||
  #include "stm32f401xc.h"
 | 
			
		||||
#elif defined(STM32F401xE)
 | 
			
		||||
  #include "stm32f401xe.h"
 | 
			
		||||
#elif defined(STM32F411xE)
 | 
			
		||||
  #include "stm32f411xe.h"
 | 
			
		||||
#elif defined(STM32F446xx)
 | 
			
		||||
  #include "stm32f446xx.h"
 | 
			
		||||
#else
 | 
			
		||||
 #error "Please select first the target STM32F4xx device used in your application (in stm32f4xx.h file)"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup Exported_types
 | 
			
		||||
  * @{
 | 
			
		||||
  */ 
 | 
			
		||||
typedef enum 
 | 
			
		||||
{
 | 
			
		||||
  RESET = 0, 
 | 
			
		||||
  SET = !RESET
 | 
			
		||||
} FlagStatus, ITStatus;
 | 
			
		||||
 | 
			
		||||
typedef enum 
 | 
			
		||||
{
 | 
			
		||||
  DISABLE = 0, 
 | 
			
		||||
  ENABLE = !DISABLE
 | 
			
		||||
} FunctionalState;
 | 
			
		||||
#define IS_FUNCTIONAL_STATE(STATE) (((STATE) == DISABLE) || ((STATE) == ENABLE))
 | 
			
		||||
 | 
			
		||||
typedef enum 
 | 
			
		||||
{
 | 
			
		||||
  ERROR = 0, 
 | 
			
		||||
  SUCCESS = !ERROR
 | 
			
		||||
} ErrorStatus;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/** @addtogroup Exported_macro
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define SET_BIT(REG, BIT)     ((REG) |= (BIT))
 | 
			
		||||
 | 
			
		||||
#define CLEAR_BIT(REG, BIT)   ((REG) &= ~(BIT))
 | 
			
		||||
 | 
			
		||||
#define READ_BIT(REG, BIT)    ((REG) & (BIT))
 | 
			
		||||
 | 
			
		||||
#define CLEAR_REG(REG)        ((REG) = (0x0))
 | 
			
		||||
 | 
			
		||||
#define WRITE_REG(REG, VAL)   ((REG) = (VAL))
 | 
			
		||||
 | 
			
		||||
#define READ_REG(REG)         ((REG))
 | 
			
		||||
 | 
			
		||||
#define MODIFY_REG(REG, CLEARMASK, SETMASK)  WRITE_REG((REG), (((READ_REG(REG)) & (~(CLEARMASK))) | (SETMASK)))
 | 
			
		||||
 | 
			
		||||
#define POSITION_VAL(VAL)     (__CLZ(__RBIT(VAL))) 
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#if defined (USE_HAL_DRIVER)
 | 
			
		||||
 #include "stm32f4xx_hal.h"
 | 
			
		||||
#endif /* USE_HAL_DRIVER */
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif /* __cplusplus */
 | 
			
		||||
 | 
			
		||||
#endif /* __STM32F4xx_H */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,405 @@
 | 
			
		|||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32f4xx_hal_conf.h
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @version V1.1.0
 | 
			
		||||
  * @date    26-December-2014
 | 
			
		||||
  * @brief   HAL configuration file
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
 | 
			
		||||
  *
 | 
			
		||||
  * Redistribution and use in source and binary forms, with or without modification,
 | 
			
		||||
  * are permitted provided that the following conditions are met:
 | 
			
		||||
  *   1. Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
  *      this list of conditions and the following disclaimer.
 | 
			
		||||
  *   2. Redistributions in binary form must reproduce the above copyright notice,
 | 
			
		||||
  *      this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
  *      and/or other materials provided with the distribution.
 | 
			
		||||
  *   3. Neither the name of STMicroelectronics nor the names of its contributors
 | 
			
		||||
  *      may be used to endorse or promote products derived from this software
 | 
			
		||||
  *      without specific prior written permission.
 | 
			
		||||
  *
 | 
			
		||||
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 | 
			
		||||
  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 | 
			
		||||
  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 | 
			
		||||
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
  *
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  */ 
 | 
			
		||||
 | 
			
		||||
/* Define to prevent recursive inclusion -------------------------------------*/
 | 
			
		||||
#ifndef __STM32F4xx_HAL_CONF_H
 | 
			
		||||
#define __STM32F4xx_HAL_CONF_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
 extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Exported types ------------------------------------------------------------*/
 | 
			
		||||
/* Exported constants --------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/* ########################## Module Selection ############################## */
 | 
			
		||||
/**
 | 
			
		||||
  * @brief This is the list of modules to be used in the HAL driver 
 | 
			
		||||
  */
 | 
			
		||||
#define HAL_MODULE_ENABLED         
 | 
			
		||||
#define HAL_ADC_MODULE_ENABLED
 | 
			
		||||
#define HAL_CAN_MODULE_ENABLED
 | 
			
		||||
#define HAL_CRC_MODULE_ENABLED
 | 
			
		||||
#define HAL_CRYP_MODULE_ENABLED
 | 
			
		||||
#define HAL_DAC_MODULE_ENABLED
 | 
			
		||||
#define HAL_DCMI_MODULE_ENABLED
 | 
			
		||||
#define HAL_DMA_MODULE_ENABLED
 | 
			
		||||
#define HAL_DMA2D_MODULE_ENABLED
 | 
			
		||||
#define HAL_ETH_MODULE_ENABLED
 | 
			
		||||
#define HAL_FLASH_MODULE_ENABLED 
 | 
			
		||||
#define HAL_NAND_MODULE_ENABLED
 | 
			
		||||
#define HAL_NOR_MODULE_ENABLED
 | 
			
		||||
#define HAL_PCCARD_MODULE_ENABLED
 | 
			
		||||
#define HAL_SRAM_MODULE_ENABLED
 | 
			
		||||
#define HAL_SDRAM_MODULE_ENABLED
 | 
			
		||||
#define HAL_HASH_MODULE_ENABLED
 | 
			
		||||
#define HAL_GPIO_MODULE_ENABLED
 | 
			
		||||
#define HAL_I2C_MODULE_ENABLED
 | 
			
		||||
#define HAL_I2S_MODULE_ENABLED
 | 
			
		||||
#define HAL_IWDG_MODULE_ENABLED
 | 
			
		||||
#define HAL_LTDC_MODULE_ENABLED
 | 
			
		||||
#define HAL_PWR_MODULE_ENABLED
 | 
			
		||||
#define HAL_RCC_MODULE_ENABLED
 | 
			
		||||
#define HAL_RNG_MODULE_ENABLED
 | 
			
		||||
#define HAL_RTC_MODULE_ENABLED
 | 
			
		||||
#define HAL_SAI_MODULE_ENABLED
 | 
			
		||||
#define HAL_SD_MODULE_ENABLED
 | 
			
		||||
#define HAL_SPI_MODULE_ENABLED
 | 
			
		||||
#define HAL_TIM_MODULE_ENABLED
 | 
			
		||||
#define HAL_UART_MODULE_ENABLED
 | 
			
		||||
#define HAL_USART_MODULE_ENABLED
 | 
			
		||||
#define HAL_IRDA_MODULE_ENABLED
 | 
			
		||||
#define HAL_SMARTCARD_MODULE_ENABLED
 | 
			
		||||
#define HAL_WWDG_MODULE_ENABLED
 | 
			
		||||
#define HAL_CORTEX_MODULE_ENABLED   
 | 
			
		||||
#define HAL_PCD_MODULE_ENABLED
 | 
			
		||||
#define HAL_HCD_MODULE_ENABLED
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* ########################## HSE/HSI Values adaptation ##################### */
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Adjust the value of External High Speed oscillator (HSE) used in your application.
 | 
			
		||||
  *        This value is used by the RCC HAL module to compute the system frequency
 | 
			
		||||
  *        (when HSE is used as system clock source, directly or through the PLL).  
 | 
			
		||||
  */
 | 
			
		||||
#if !defined  (HSE_VALUE) 
 | 
			
		||||
  #define HSE_VALUE    ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
 | 
			
		||||
#endif /* HSE_VALUE */
 | 
			
		||||
 | 
			
		||||
#if !defined  (HSE_STARTUP_TIMEOUT)
 | 
			
		||||
  #define HSE_STARTUP_TIMEOUT    ((uint32_t)5000)   /*!< Time out for HSE start up, in ms */
 | 
			
		||||
#endif /* HSE_STARTUP_TIMEOUT */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Internal High Speed oscillator (HSI) value.
 | 
			
		||||
  *        This value is used by the RCC HAL module to compute the system frequency
 | 
			
		||||
  *        (when HSI is used as system clock source, directly or through the PLL). 
 | 
			
		||||
  */
 | 
			
		||||
#if !defined  (HSI_VALUE)
 | 
			
		||||
  #define HSI_VALUE    ((uint32_t)16000000) /*!< Value of the Internal oscillator in Hz*/
 | 
			
		||||
#endif /* HSI_VALUE */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Internal Low Speed oscillator (LSI) value.
 | 
			
		||||
  */
 | 
			
		||||
#if !defined  (LSI_VALUE) 
 | 
			
		||||
 #define LSI_VALUE  ((uint32_t)32000)    
 | 
			
		||||
#endif /* LSI_VALUE */                      /*!< Value of the Internal Low Speed oscillator in Hz
 | 
			
		||||
                                             The real value may vary depending on the variations
 | 
			
		||||
                                             in voltage and temperature.  */
 | 
			
		||||
/**
 | 
			
		||||
  * @brief External Low Speed oscillator (LSE) value.
 | 
			
		||||
  */
 | 
			
		||||
#if !defined  (LSE_VALUE)
 | 
			
		||||
 #define LSE_VALUE  ((uint32_t)32768)    /*!< Value of the External Low Speed oscillator in Hz */
 | 
			
		||||
#endif /* LSE_VALUE */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief External clock source for I2S peripheral
 | 
			
		||||
  *        This value is used by the I2S HAL module to compute the I2S clock source 
 | 
			
		||||
  *        frequency, this source is inserted directly through I2S_CKIN pad. 
 | 
			
		||||
  */
 | 
			
		||||
#if !defined  (EXTERNAL_CLOCK_VALUE)
 | 
			
		||||
  #define EXTERNAL_CLOCK_VALUE    ((uint32_t)12288000) /*!< Value of the Internal oscillator in Hz*/
 | 
			
		||||
#endif /* EXTERNAL_CLOCK_VALUE */
 | 
			
		||||
 | 
			
		||||
/* Tip: To avoid modifying this file each time you need to use different HSE,
 | 
			
		||||
   ===  you can define the HSE value in your toolchain compiler preprocessor. */
 | 
			
		||||
 | 
			
		||||
/* ########################### System Configuration ######################### */
 | 
			
		||||
/**
 | 
			
		||||
  * @brief This is the HAL system configuration section
 | 
			
		||||
  */     
 | 
			
		||||
#define  VDD_VALUE                    ((uint32_t)3300) /*!< Value of VDD in mv */
 | 
			
		||||
#define  TICK_INT_PRIORITY            ((uint32_t)0x0F) /*!< tick interrupt priority */           
 | 
			
		||||
#define  USE_RTOS                     0     
 | 
			
		||||
#define  PREFETCH_ENABLE              1              
 | 
			
		||||
#define  INSTRUCTION_CACHE_ENABLE     1
 | 
			
		||||
#define  DATA_CACHE_ENABLE            1
 | 
			
		||||
 | 
			
		||||
/* ########################## Assert Selection ############################## */
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Uncomment the line below to expanse the "assert_param" macro in the 
 | 
			
		||||
  *        HAL drivers code
 | 
			
		||||
  */
 | 
			
		||||
/* #define USE_FULL_ASSERT    1 */
 | 
			
		||||
 | 
			
		||||
/* ################## Ethernet peripheral configuration ##################### */
 | 
			
		||||
 | 
			
		||||
/* Section 1 : Ethernet peripheral configuration */
 | 
			
		||||
 | 
			
		||||
/* MAC ADDRESS: MAC_ADDR0:MAC_ADDR1:MAC_ADDR2:MAC_ADDR3:MAC_ADDR4:MAC_ADDR5 */
 | 
			
		||||
#define MAC_ADDR0   2
 | 
			
		||||
#define MAC_ADDR1   0
 | 
			
		||||
#define MAC_ADDR2   0
 | 
			
		||||
#define MAC_ADDR3   0
 | 
			
		||||
#define MAC_ADDR4   0
 | 
			
		||||
#define MAC_ADDR5   0
 | 
			
		||||
 | 
			
		||||
/* Definition of the Ethernet driver buffers size and count */   
 | 
			
		||||
#define ETH_RX_BUF_SIZE                ETH_MAX_PACKET_SIZE /* buffer size for receive               */
 | 
			
		||||
#define ETH_TX_BUF_SIZE                ETH_MAX_PACKET_SIZE /* buffer size for transmit              */
 | 
			
		||||
#define ETH_RXBUFNB                    ((uint32_t)4)       /* 4 Rx buffers of size ETH_RX_BUF_SIZE  */
 | 
			
		||||
#define ETH_TXBUFNB                    ((uint32_t)4)       /* 4 Tx buffers of size ETH_TX_BUF_SIZE  */
 | 
			
		||||
 | 
			
		||||
/* Section 2: PHY configuration section */
 | 
			
		||||
 | 
			
		||||
/* DP83848 PHY Address*/ 
 | 
			
		||||
#define DP83848_PHY_ADDRESS             0x01
 | 
			
		||||
/* PHY Reset delay these values are based on a 1 ms Systick interrupt*/ 
 | 
			
		||||
#define PHY_RESET_DELAY                 ((uint32_t)0x000000FF)
 | 
			
		||||
/* PHY Configuration delay */
 | 
			
		||||
#define PHY_CONFIG_DELAY                ((uint32_t)0x00000FFF)
 | 
			
		||||
 | 
			
		||||
#define PHY_READ_TO                     ((uint32_t)0x0000FFFF)
 | 
			
		||||
#define PHY_WRITE_TO                    ((uint32_t)0x0000FFFF)
 | 
			
		||||
 | 
			
		||||
/* Section 3: Common PHY Registers */
 | 
			
		||||
 | 
			
		||||
#define PHY_BCR                         ((uint16_t)0x00)    /*!< Transceiver Basic Control Register   */
 | 
			
		||||
#define PHY_BSR                         ((uint16_t)0x01)    /*!< Transceiver Basic Status Register    */
 | 
			
		||||
 
 | 
			
		||||
#define PHY_RESET                       ((uint16_t)0x8000)  /*!< PHY Reset */
 | 
			
		||||
#define PHY_LOOPBACK                    ((uint16_t)0x4000)  /*!< Select loop-back mode */
 | 
			
		||||
#define PHY_FULLDUPLEX_100M             ((uint16_t)0x2100)  /*!< Set the full-duplex mode at 100 Mb/s */
 | 
			
		||||
#define PHY_HALFDUPLEX_100M             ((uint16_t)0x2000)  /*!< Set the half-duplex mode at 100 Mb/s */
 | 
			
		||||
#define PHY_FULLDUPLEX_10M              ((uint16_t)0x0100)  /*!< Set the full-duplex mode at 10 Mb/s  */
 | 
			
		||||
#define PHY_HALFDUPLEX_10M              ((uint16_t)0x0000)  /*!< Set the half-duplex mode at 10 Mb/s  */
 | 
			
		||||
#define PHY_AUTONEGOTIATION             ((uint16_t)0x1000)  /*!< Enable auto-negotiation function     */
 | 
			
		||||
#define PHY_RESTART_AUTONEGOTIATION     ((uint16_t)0x0200)  /*!< Restart auto-negotiation function    */
 | 
			
		||||
#define PHY_POWERDOWN                   ((uint16_t)0x0800)  /*!< Select the power down mode           */
 | 
			
		||||
#define PHY_ISOLATE                     ((uint16_t)0x0400)  /*!< Isolate PHY from MII                 */
 | 
			
		||||
 | 
			
		||||
#define PHY_AUTONEGO_COMPLETE           ((uint16_t)0x0020)  /*!< Auto-Negotiation process completed   */
 | 
			
		||||
#define PHY_LINKED_STATUS               ((uint16_t)0x0004)  /*!< Valid link established               */
 | 
			
		||||
#define PHY_JABBER_DETECTION            ((uint16_t)0x0002)  /*!< Jabber condition detected            */
 | 
			
		||||
  
 | 
			
		||||
/* Section 4: Extended PHY Registers */
 | 
			
		||||
 | 
			
		||||
#define PHY_SR                          ((uint16_t)0x10)    /*!< PHY status register Offset                      */
 | 
			
		||||
#define PHY_MICR                        ((uint16_t)0x11)    /*!< MII Interrupt Control Register                  */
 | 
			
		||||
#define PHY_MISR                        ((uint16_t)0x12)    /*!< MII Interrupt Status and Misc. Control Register */
 | 
			
		||||
 
 | 
			
		||||
#define PHY_LINK_STATUS                 ((uint16_t)0x0001)  /*!< PHY Link mask                                   */
 | 
			
		||||
#define PHY_SPEED_STATUS                ((uint16_t)0x0002)  /*!< PHY Speed mask                                  */
 | 
			
		||||
#define PHY_DUPLEX_STATUS               ((uint16_t)0x0004)  /*!< PHY Duplex mask                                 */
 | 
			
		||||
 | 
			
		||||
#define PHY_MICR_INT_EN                 ((uint16_t)0x0002)  /*!< PHY Enable interrupts                           */
 | 
			
		||||
#define PHY_MICR_INT_OE                 ((uint16_t)0x0001)  /*!< PHY Enable output interrupt events              */
 | 
			
		||||
 | 
			
		||||
#define PHY_MISR_LINK_INT_EN            ((uint16_t)0x0020)  /*!< Enable Interrupt on change of link status       */
 | 
			
		||||
#define PHY_LINK_INTERRUPT              ((uint16_t)0x2000)  /*!< PHY link status interrupt mask                  */
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Include module's header file 
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_RCC_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_rcc.h"
 | 
			
		||||
#endif /* HAL_RCC_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_GPIO_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_gpio.h"
 | 
			
		||||
#endif /* HAL_GPIO_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_DMA_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_dma.h"
 | 
			
		||||
#endif /* HAL_DMA_MODULE_ENABLED */
 | 
			
		||||
   
 | 
			
		||||
#ifdef HAL_CORTEX_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_cortex.h"
 | 
			
		||||
#endif /* HAL_CORTEX_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_ADC_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_adc.h"
 | 
			
		||||
#endif /* HAL_ADC_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_CAN_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_can.h"
 | 
			
		||||
#endif /* HAL_CAN_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_CRC_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_crc.h"
 | 
			
		||||
#endif /* HAL_CRC_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_CRYP_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_cryp.h" 
 | 
			
		||||
#endif /* HAL_CRYP_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_DMA2D_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_dma2d.h"
 | 
			
		||||
#endif /* HAL_DMA2D_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_DAC_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_dac.h"
 | 
			
		||||
#endif /* HAL_DAC_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_DCMI_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_dcmi.h"
 | 
			
		||||
#endif /* HAL_DCMI_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_ETH_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_eth.h"
 | 
			
		||||
#endif /* HAL_ETH_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_FLASH_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_flash.h"
 | 
			
		||||
#endif /* HAL_FLASH_MODULE_ENABLED */
 | 
			
		||||
 
 | 
			
		||||
#ifdef HAL_SRAM_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_sram.h"
 | 
			
		||||
#endif /* HAL_SRAM_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_NOR_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_nor.h"
 | 
			
		||||
#endif /* HAL_NOR_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_NAND_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_nand.h"
 | 
			
		||||
#endif /* HAL_NAND_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_PCCARD_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_pccard.h"
 | 
			
		||||
#endif /* HAL_PCCARD_MODULE_ENABLED */ 
 | 
			
		||||
  
 | 
			
		||||
#ifdef HAL_SDRAM_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_sdram.h"
 | 
			
		||||
#endif /* HAL_SDRAM_MODULE_ENABLED */      
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_HASH_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_hash.h"
 | 
			
		||||
#endif /* HAL_HASH_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_I2C_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_i2c.h"
 | 
			
		||||
#endif /* HAL_I2C_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_I2S_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_i2s.h"
 | 
			
		||||
#endif /* HAL_I2S_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_IWDG_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_iwdg.h"
 | 
			
		||||
#endif /* HAL_IWDG_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_LTDC_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_ltdc.h"
 | 
			
		||||
#endif /* HAL_LTDC_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_PWR_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_pwr.h"
 | 
			
		||||
#endif /* HAL_PWR_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_RNG_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_rng.h"
 | 
			
		||||
#endif /* HAL_RNG_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_RTC_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_rtc.h"
 | 
			
		||||
#endif /* HAL_RTC_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_SAI_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_sai.h"
 | 
			
		||||
#endif /* HAL_SAI_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_SD_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_sd.h"
 | 
			
		||||
#endif /* HAL_SD_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_SPI_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_spi.h"
 | 
			
		||||
#endif /* HAL_SPI_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_TIM_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_tim.h"
 | 
			
		||||
#endif /* HAL_TIM_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_UART_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_uart.h"
 | 
			
		||||
#endif /* HAL_UART_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_USART_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_usart.h"
 | 
			
		||||
#endif /* HAL_USART_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_IRDA_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_irda.h"
 | 
			
		||||
#endif /* HAL_IRDA_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_SMARTCARD_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_smartcard.h"
 | 
			
		||||
#endif /* HAL_SMARTCARD_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_WWDG_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_wwdg.h"
 | 
			
		||||
#endif /* HAL_WWDG_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_PCD_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_pcd.h"
 | 
			
		||||
#endif /* HAL_PCD_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_HCD_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_hcd.h"
 | 
			
		||||
#endif /* HAL_HCD_MODULE_ENABLED */
 | 
			
		||||
   
 | 
			
		||||
/* Exported macro ------------------------------------------------------------*/
 | 
			
		||||
#ifdef  USE_FULL_ASSERT
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  The assert_param macro is used for function's parameters check.
 | 
			
		||||
  * @param  expr: If expr is false, it calls assert_failed function
 | 
			
		||||
  *         which reports the name of the source file and the source
 | 
			
		||||
  *         line number of the call that failed. 
 | 
			
		||||
  *         If expr is true, it returns no value.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
  #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))
 | 
			
		||||
/* Exported functions ------------------------------------------------------- */
 | 
			
		||||
  void assert_failed(uint8_t* file, uint32_t line);
 | 
			
		||||
#else
 | 
			
		||||
  #define assert_param(expr) ((void)0)
 | 
			
		||||
#endif /* USE_FULL_ASSERT */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* __STM32F4xx_HAL_CONF_H */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,706 @@
 | 
			
		|||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    system_stm32f4xx.c
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @version V2.1.0
 | 
			
		||||
  * @date    19-June-2014
 | 
			
		||||
  * @brief   CMSIS Cortex-M4 Device Peripheral Access Layer System Source File.
 | 
			
		||||
  *
 | 
			
		||||
  *   This file provides two functions and one global variable to be called from 
 | 
			
		||||
  *   user application:
 | 
			
		||||
  *      - SystemInit(): This function is called at startup just after reset and 
 | 
			
		||||
  *                      before branch to main program. This call is made inside
 | 
			
		||||
  *                      the "startup_stm32f4xx.s" file.
 | 
			
		||||
  *
 | 
			
		||||
  *      - SystemCoreClock variable: Contains the core clock (HCLK), it can be used
 | 
			
		||||
  *                                  by the user application to setup the SysTick 
 | 
			
		||||
  *                                  timer or configure other parameters.
 | 
			
		||||
  *                                     
 | 
			
		||||
  *      - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must
 | 
			
		||||
  *                                 be called whenever the core clock is changed
 | 
			
		||||
  *                                 during program execution.
 | 
			
		||||
  *
 | 
			
		||||
  * This file configures the system clock as follows:
 | 
			
		||||
  *-----------------------------------------------------------------------------
 | 
			
		||||
  * System clock source                | 1- PLL_HSE_EXTC        | 3- PLL_HSI
 | 
			
		||||
  *                                    | (external 8 MHz clock) | (internal 16 MHz)
 | 
			
		||||
  *                                    | 2- PLL_HSE_XTAL        |
 | 
			
		||||
  *                                    | (external 8 MHz xtal)  |
 | 
			
		||||
  *-----------------------------------------------------------------------------
 | 
			
		||||
  * SYSCLK(MHz)                        | 96                     | 96
 | 
			
		||||
  *-----------------------------------------------------------------------------
 | 
			
		||||
  * AHBCLK (MHz)                       | 96                     | 96
 | 
			
		||||
  *-----------------------------------------------------------------------------
 | 
			
		||||
  * APB1CLK (MHz)                      | 48                     | 48
 | 
			
		||||
  *-----------------------------------------------------------------------------
 | 
			
		||||
  * APB2CLK (MHz)                      | 96                     | 96
 | 
			
		||||
  *-----------------------------------------------------------------------------
 | 
			
		||||
  * USB capable (48 MHz precise clock) | YES                    | YES
 | 
			
		||||
  *-----------------------------------------------------------------------------  
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * <h2><center>© COPYRIGHT 2014 STMicroelectronics</center></h2>
 | 
			
		||||
  *
 | 
			
		||||
  * Redistribution and use in source and binary forms, with or without modification,
 | 
			
		||||
  * are permitted provided that the following conditions are met:
 | 
			
		||||
  *   1. Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
  *      this list of conditions and the following disclaimer.
 | 
			
		||||
  *   2. Redistributions in binary form must reproduce the above copyright notice,
 | 
			
		||||
  *      this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
  *      and/or other materials provided with the distribution.
 | 
			
		||||
  *   3. Neither the name of STMicroelectronics nor the names of its contributors
 | 
			
		||||
  *      may be used to endorse or promote products derived from this software
 | 
			
		||||
  *      without specific prior written permission.
 | 
			
		||||
  *
 | 
			
		||||
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 | 
			
		||||
  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 | 
			
		||||
  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 | 
			
		||||
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
  *
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup CMSIS
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup stm32f4xx_system
 | 
			
		||||
  * @{
 | 
			
		||||
  */  
 | 
			
		||||
  
 | 
			
		||||
/** @addtogroup STM32F4xx_System_Private_Includes
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "stm32f4xx.h"
 | 
			
		||||
#include "hal_tick.h"
 | 
			
		||||
 | 
			
		||||
#if !defined  (HSE_VALUE) 
 | 
			
		||||
  #define HSE_VALUE    ((uint32_t)8000000) /*!< Default value of the External oscillator in Hz */
 | 
			
		||||
#endif /* HSE_VALUE */
 | 
			
		||||
 | 
			
		||||
#if !defined  (HSI_VALUE)
 | 
			
		||||
  #define HSI_VALUE    ((uint32_t)16000000) /*!< Value of the Internal oscillator in Hz*/
 | 
			
		||||
#endif /* HSI_VALUE */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32F4xx_System_Private_TypesDefinitions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32F4xx_System_Private_Defines
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/************************* Miscellaneous Configuration ************************/
 | 
			
		||||
/*!< Uncomment the following line if you need to use external SRAM or SDRAM mounted
 | 
			
		||||
     on STM324xG_EVAL/STM324x9I_EVAL boards as data memory  */
 | 
			
		||||
#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) || defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)
 | 
			
		||||
/* #define DATA_IN_ExtSRAM */
 | 
			
		||||
#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */
 | 
			
		||||
 
 | 
			
		||||
#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)
 | 
			
		||||
/* #define DATA_IN_ExtSDRAM */
 | 
			
		||||
#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */
 | 
			
		||||
 | 
			
		||||
#if defined(DATA_IN_ExtSRAM) && defined(DATA_IN_ExtSDRAM)
 | 
			
		||||
 #error "Please select DATA_IN_ExtSRAM or DATA_IN_ExtSDRAM " 
 | 
			
		||||
#endif /* DATA_IN_ExtSRAM && DATA_IN_ExtSDRAM */
 | 
			
		||||
 | 
			
		||||
/*!< Uncomment the following line if you need to relocate your vector Table in
 | 
			
		||||
     Internal SRAM. */
 | 
			
		||||
/* #define VECT_TAB_SRAM */
 | 
			
		||||
#define VECT_TAB_OFFSET  0x00 /*!< Vector Table base offset field. 
 | 
			
		||||
                                   This value must be a multiple of 0x200. */
 | 
			
		||||
/******************************************************************************/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32F4xx_System_Private_Macros
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Select the clock sources (other than HSI) to start with (0=OFF, 1=ON) */
 | 
			
		||||
#define USE_PLL_HSE_EXTC (1) /* Use external clock */
 | 
			
		||||
#define USE_PLL_HSE_XTAL (1) /* Use external xtal */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32F4xx_System_Private_Variables
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
  /* This variable is updated in three ways:
 | 
			
		||||
      1) by calling CMSIS function SystemCoreClockUpdate()
 | 
			
		||||
      2) by calling HAL API function HAL_RCC_GetHCLKFreq()
 | 
			
		||||
      3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency 
 | 
			
		||||
         Note: If you use this function to configure the system clock; then there
 | 
			
		||||
               is no need to call the 2 first functions listed above, since SystemCoreClock
 | 
			
		||||
               variable is updated automatically.
 | 
			
		||||
  */
 | 
			
		||||
uint32_t SystemCoreClock = 16000000;
 | 
			
		||||
const uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32F4xx_System_Private_FunctionPrototypes
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#if defined (DATA_IN_ExtSRAM) || defined (DATA_IN_ExtSDRAM)
 | 
			
		||||
  static void SystemInit_ExtMemCtl(void); 
 | 
			
		||||
#endif /* DATA_IN_ExtSRAM || DATA_IN_ExtSDRAM */
 | 
			
		||||
 | 
			
		||||
#if (USE_PLL_HSE_XTAL != 0) || (USE_PLL_HSE_EXTC != 0)
 | 
			
		||||
uint8_t SetSysClock_PLL_HSE(uint8_t bypass);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
uint8_t SetSysClock_PLL_HSI(void);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32F4xx_System_Private_Functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Setup the microcontroller system
 | 
			
		||||
  *         Initialize the FPU setting, vector table location and External memory 
 | 
			
		||||
  *         configuration.
 | 
			
		||||
  * @param  None
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void SystemInit(void)
 | 
			
		||||
{
 | 
			
		||||
  /* FPU settings ------------------------------------------------------------*/
 | 
			
		||||
  #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
 | 
			
		||||
    SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2));  /* set CP10 and CP11 Full Access */
 | 
			
		||||
  #endif
 | 
			
		||||
  /* Reset the RCC clock configuration to the default reset state ------------*/
 | 
			
		||||
  /* Set HSION bit */
 | 
			
		||||
  RCC->CR |= (uint32_t)0x00000001;
 | 
			
		||||
 | 
			
		||||
  /* Reset CFGR register */
 | 
			
		||||
  RCC->CFGR = 0x00000000;
 | 
			
		||||
 | 
			
		||||
  /* Reset HSEON, CSSON and PLLON bits */
 | 
			
		||||
  RCC->CR &= (uint32_t)0xFEF6FFFF;
 | 
			
		||||
 | 
			
		||||
  /* Reset PLLCFGR register */
 | 
			
		||||
  RCC->PLLCFGR = 0x24003010;
 | 
			
		||||
 | 
			
		||||
  /* Reset HSEBYP bit */
 | 
			
		||||
  RCC->CR &= (uint32_t)0xFFFBFFFF;
 | 
			
		||||
 | 
			
		||||
  /* Disable all interrupts */
 | 
			
		||||
  RCC->CIR = 0x00000000;
 | 
			
		||||
 | 
			
		||||
#if defined (DATA_IN_ExtSRAM) || defined (DATA_IN_ExtSDRAM)
 | 
			
		||||
  SystemInit_ExtMemCtl(); 
 | 
			
		||||
#endif /* DATA_IN_ExtSRAM || DATA_IN_ExtSDRAM */
 | 
			
		||||
 | 
			
		||||
  /* Configure the Vector Table location add offset address ------------------*/
 | 
			
		||||
#ifdef VECT_TAB_SRAM
 | 
			
		||||
  SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */
 | 
			
		||||
#else
 | 
			
		||||
  SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  /* Configure the Cube driver */
 | 
			
		||||
  SystemCoreClock = 16000000; // At this stage the HSI is used as system clock
 | 
			
		||||
  HAL_Init();
 | 
			
		||||
 | 
			
		||||
  /* Configure the System clock source, PLL Multiplier and Divider factors,
 | 
			
		||||
     AHB/APBx prescalers and Flash settings */
 | 
			
		||||
  SetSysClock();
 | 
			
		||||
  
 | 
			
		||||
  /* Reset the timer to avoid issues after the RAM initialization */
 | 
			
		||||
  TIM_MST_RESET_ON;
 | 
			
		||||
  TIM_MST_RESET_OFF;  
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
   * @brief  Update SystemCoreClock variable according to Clock Register Values.
 | 
			
		||||
  *         The SystemCoreClock variable contains the core clock (HCLK), it can
 | 
			
		||||
  *         be used by the user application to setup the SysTick timer or configure
 | 
			
		||||
  *         other parameters.
 | 
			
		||||
  *           
 | 
			
		||||
  * @note   Each time the core clock (HCLK) changes, this function must be called
 | 
			
		||||
  *         to update SystemCoreClock variable value. Otherwise, any configuration
 | 
			
		||||
  *         based on this variable will be incorrect.         
 | 
			
		||||
  *     
 | 
			
		||||
  * @note   - The system frequency computed by this function is not the real 
 | 
			
		||||
  *           frequency in the chip. It is calculated based on the predefined 
 | 
			
		||||
  *           constant and the selected clock source:
 | 
			
		||||
  *             
 | 
			
		||||
  *           - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*)
 | 
			
		||||
  *                                              
 | 
			
		||||
  *           - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**)
 | 
			
		||||
  *                          
 | 
			
		||||
  *           - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) 
 | 
			
		||||
  *             or HSI_VALUE(*) multiplied/divided by the PLL factors.
 | 
			
		||||
  *         
 | 
			
		||||
  *         (*) HSI_VALUE is a constant defined in stm32f4xx_hal_conf.h file (default value
 | 
			
		||||
  *             16 MHz) but the real value may vary depending on the variations
 | 
			
		||||
  *             in voltage and temperature.   
 | 
			
		||||
  *    
 | 
			
		||||
  *         (**) HSE_VALUE is a constant defined in stm32f4xx_hal_conf.h file (its value
 | 
			
		||||
  *              depends on the application requirements), user has to ensure that HSE_VALUE
 | 
			
		||||
  *              is same as the real frequency of the crystal used. Otherwise, this function
 | 
			
		||||
  *              may have wrong result.
 | 
			
		||||
  *                
 | 
			
		||||
  *         - The result of this function could be not correct when using fractional
 | 
			
		||||
  *           value for HSE crystal.
 | 
			
		||||
  *     
 | 
			
		||||
  * @param  None
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void SystemCoreClockUpdate(void)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2;
 | 
			
		||||
  
 | 
			
		||||
  /* Get SYSCLK source -------------------------------------------------------*/
 | 
			
		||||
  tmp = RCC->CFGR & RCC_CFGR_SWS;
 | 
			
		||||
 | 
			
		||||
  switch (tmp)
 | 
			
		||||
  {
 | 
			
		||||
    case 0x00:  /* HSI used as system clock source */
 | 
			
		||||
      SystemCoreClock = HSI_VALUE;
 | 
			
		||||
      break;
 | 
			
		||||
    case 0x04:  /* HSE used as system clock source */
 | 
			
		||||
      SystemCoreClock = HSE_VALUE;
 | 
			
		||||
      break;
 | 
			
		||||
    case 0x08:  /* PLL used as system clock source */
 | 
			
		||||
 | 
			
		||||
      /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N
 | 
			
		||||
         SYSCLK = PLL_VCO / PLL_P
 | 
			
		||||
         */    
 | 
			
		||||
      pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22;
 | 
			
		||||
      pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM;
 | 
			
		||||
      
 | 
			
		||||
      if (pllsource != 0)
 | 
			
		||||
      {
 | 
			
		||||
        /* HSE used as PLL clock source */
 | 
			
		||||
        pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);
 | 
			
		||||
      }
 | 
			
		||||
      else
 | 
			
		||||
      {
 | 
			
		||||
        /* HSI used as PLL clock source */
 | 
			
		||||
        pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2;
 | 
			
		||||
      SystemCoreClock = pllvco/pllp;
 | 
			
		||||
      break;
 | 
			
		||||
    default:
 | 
			
		||||
      SystemCoreClock = HSI_VALUE;
 | 
			
		||||
      break;
 | 
			
		||||
  }
 | 
			
		||||
  /* Compute HCLK frequency --------------------------------------------------*/
 | 
			
		||||
  /* Get HCLK prescaler */
 | 
			
		||||
  tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)];
 | 
			
		||||
  /* HCLK frequency */
 | 
			
		||||
  SystemCoreClock >>= tmp;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#if defined (DATA_IN_ExtSRAM) || defined (DATA_IN_ExtSDRAM)
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Setup the external memory controller.
 | 
			
		||||
  *         Called in startup_stm32f4xx.s before jump to main.
 | 
			
		||||
  *         This function configures the external memories (SRAM/SDRAM)
 | 
			
		||||
  *         This SRAM/SDRAM will be used as program data memory (including heap and stack).
 | 
			
		||||
  * @param  None
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void SystemInit_ExtMemCtl(void)
 | 
			
		||||
{
 | 
			
		||||
#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)
 | 
			
		||||
#if defined (DATA_IN_ExtSDRAM)
 | 
			
		||||
  register uint32_t tmpreg = 0, timeout = 0xFFFF;
 | 
			
		||||
  register uint32_t index;
 | 
			
		||||
 | 
			
		||||
  /* Enable GPIOC, GPIOD, GPIOE, GPIOF, GPIOG, GPIOH and GPIOI interface 
 | 
			
		||||
      clock */
 | 
			
		||||
  RCC->AHB1ENR |= 0x000001F8;
 | 
			
		||||
  
 | 
			
		||||
  /* Connect PDx pins to FMC Alternate function */
 | 
			
		||||
  GPIOD->AFR[0]  = 0x000000CC;
 | 
			
		||||
  GPIOD->AFR[1]  = 0xCC000CCC;
 | 
			
		||||
  /* Configure PDx pins in Alternate function mode */  
 | 
			
		||||
  GPIOD->MODER   = 0xA02A000A;
 | 
			
		||||
  /* Configure PDx pins speed to 50 MHz */  
 | 
			
		||||
  GPIOD->OSPEEDR = 0xA02A000A;
 | 
			
		||||
  /* Configure PDx pins Output type to push-pull */  
 | 
			
		||||
  GPIOD->OTYPER  = 0x00000000;
 | 
			
		||||
  /* No pull-up, pull-down for PDx pins */ 
 | 
			
		||||
  GPIOD->PUPDR   = 0x00000000;
 | 
			
		||||
 | 
			
		||||
  /* Connect PEx pins to FMC Alternate function */
 | 
			
		||||
  GPIOE->AFR[0]  = 0xC00000CC;
 | 
			
		||||
  GPIOE->AFR[1]  = 0xCCCCCCCC;
 | 
			
		||||
  /* Configure PEx pins in Alternate function mode */ 
 | 
			
		||||
  GPIOE->MODER   = 0xAAAA800A;
 | 
			
		||||
  /* Configure PEx pins speed to 50 MHz */ 
 | 
			
		||||
  GPIOE->OSPEEDR = 0xAAAA800A;
 | 
			
		||||
  /* Configure PEx pins Output type to push-pull */  
 | 
			
		||||
  GPIOE->OTYPER  = 0x00000000;
 | 
			
		||||
  /* No pull-up, pull-down for PEx pins */ 
 | 
			
		||||
  GPIOE->PUPDR   = 0x00000000;
 | 
			
		||||
 | 
			
		||||
  /* Connect PFx pins to FMC Alternate function */
 | 
			
		||||
  GPIOF->AFR[0]  = 0xCCCCCCCC;
 | 
			
		||||
  GPIOF->AFR[1]  = 0xCCCCCCCC;
 | 
			
		||||
  /* Configure PFx pins in Alternate function mode */   
 | 
			
		||||
  GPIOF->MODER   = 0xAA800AAA;
 | 
			
		||||
  /* Configure PFx pins speed to 50 MHz */ 
 | 
			
		||||
  GPIOF->OSPEEDR = 0xAA800AAA;
 | 
			
		||||
  /* Configure PFx pins Output type to push-pull */  
 | 
			
		||||
  GPIOF->OTYPER  = 0x00000000;
 | 
			
		||||
  /* No pull-up, pull-down for PFx pins */ 
 | 
			
		||||
  GPIOF->PUPDR   = 0x00000000;
 | 
			
		||||
 | 
			
		||||
  /* Connect PGx pins to FMC Alternate function */
 | 
			
		||||
  GPIOG->AFR[0]  = 0xCCCCCCCC;
 | 
			
		||||
  GPIOG->AFR[1]  = 0xCCCCCCCC;
 | 
			
		||||
  /* Configure PGx pins in Alternate function mode */ 
 | 
			
		||||
  GPIOG->MODER   = 0xAAAAAAAA;
 | 
			
		||||
  /* Configure PGx pins speed to 50 MHz */ 
 | 
			
		||||
  GPIOG->OSPEEDR = 0xAAAAAAAA;
 | 
			
		||||
  /* Configure PGx pins Output type to push-pull */  
 | 
			
		||||
  GPIOG->OTYPER  = 0x00000000;
 | 
			
		||||
  /* No pull-up, pull-down for PGx pins */ 
 | 
			
		||||
  GPIOG->PUPDR   = 0x00000000;
 | 
			
		||||
  
 | 
			
		||||
  /* Connect PHx pins to FMC Alternate function */
 | 
			
		||||
  GPIOH->AFR[0]  = 0x00C0CC00;
 | 
			
		||||
  GPIOH->AFR[1]  = 0xCCCCCCCC;
 | 
			
		||||
  /* Configure PHx pins in Alternate function mode */ 
 | 
			
		||||
  GPIOH->MODER   = 0xAAAA08A0;
 | 
			
		||||
  /* Configure PHx pins speed to 50 MHz */ 
 | 
			
		||||
  GPIOH->OSPEEDR = 0xAAAA08A0;
 | 
			
		||||
  /* Configure PHx pins Output type to push-pull */  
 | 
			
		||||
  GPIOH->OTYPER  = 0x00000000;
 | 
			
		||||
  /* No pull-up, pull-down for PHx pins */ 
 | 
			
		||||
  GPIOH->PUPDR   = 0x00000000;
 | 
			
		||||
  
 | 
			
		||||
  /* Connect PIx pins to FMC Alternate function */
 | 
			
		||||
  GPIOI->AFR[0]  = 0xCCCCCCCC;
 | 
			
		||||
  GPIOI->AFR[1]  = 0x00000CC0;
 | 
			
		||||
  /* Configure PIx pins in Alternate function mode */ 
 | 
			
		||||
  GPIOI->MODER   = 0x0028AAAA;
 | 
			
		||||
  /* Configure PIx pins speed to 50 MHz */ 
 | 
			
		||||
  GPIOI->OSPEEDR = 0x0028AAAA;
 | 
			
		||||
  /* Configure PIx pins Output type to push-pull */  
 | 
			
		||||
  GPIOI->OTYPER  = 0x00000000;
 | 
			
		||||
  /* No pull-up, pull-down for PIx pins */ 
 | 
			
		||||
  GPIOI->PUPDR   = 0x00000000;
 | 
			
		||||
  
 | 
			
		||||
/*-- FMC Configuration ------------------------------------------------------*/
 | 
			
		||||
  /* Enable the FMC interface clock */
 | 
			
		||||
  RCC->AHB3ENR |= 0x00000001;
 | 
			
		||||
  
 | 
			
		||||
  /* Configure and enable SDRAM bank1 */
 | 
			
		||||
  FMC_Bank5_6->SDCR[0] = 0x000019E0;
 | 
			
		||||
  FMC_Bank5_6->SDTR[0] = 0x01115351;      
 | 
			
		||||
  
 | 
			
		||||
  /* SDRAM initialization sequence */
 | 
			
		||||
  /* Clock enable command */
 | 
			
		||||
  FMC_Bank5_6->SDCMR = 0x00000011; 
 | 
			
		||||
  tmpreg = FMC_Bank5_6->SDSR & 0x00000020; 
 | 
			
		||||
  while((tmpreg != 0) && (timeout-- > 0))
 | 
			
		||||
  {
 | 
			
		||||
    tmpreg = FMC_Bank5_6->SDSR & 0x00000020; 
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* Delay */
 | 
			
		||||
  for (index = 0; index<1000; index++);
 | 
			
		||||
  
 | 
			
		||||
  /* PALL command */
 | 
			
		||||
  FMC_Bank5_6->SDCMR = 0x00000012;           
 | 
			
		||||
  timeout = 0xFFFF;
 | 
			
		||||
  while((tmpreg != 0) && (timeout-- > 0))
 | 
			
		||||
  {
 | 
			
		||||
    tmpreg = FMC_Bank5_6->SDSR & 0x00000020; 
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  /* Auto refresh command */
 | 
			
		||||
  FMC_Bank5_6->SDCMR = 0x00000073;
 | 
			
		||||
  timeout = 0xFFFF;
 | 
			
		||||
  while((tmpreg != 0) && (timeout-- > 0))
 | 
			
		||||
  {
 | 
			
		||||
    tmpreg = FMC_Bank5_6->SDSR & 0x00000020; 
 | 
			
		||||
  }
 | 
			
		||||
 
 | 
			
		||||
  /* MRD register program */
 | 
			
		||||
  FMC_Bank5_6->SDCMR = 0x00046014;
 | 
			
		||||
  timeout = 0xFFFF;
 | 
			
		||||
  while((tmpreg != 0) && (timeout-- > 0))
 | 
			
		||||
  {
 | 
			
		||||
    tmpreg = FMC_Bank5_6->SDSR & 0x00000020; 
 | 
			
		||||
  } 
 | 
			
		||||
  
 | 
			
		||||
  /* Set refresh count */
 | 
			
		||||
  tmpreg = FMC_Bank5_6->SDRTR;
 | 
			
		||||
  FMC_Bank5_6->SDRTR = (tmpreg | (0x0000027C<<1));
 | 
			
		||||
  
 | 
			
		||||
  /* Disable write protection */
 | 
			
		||||
  tmpreg = FMC_Bank5_6->SDCR[0]; 
 | 
			
		||||
  FMC_Bank5_6->SDCR[0] = (tmpreg & 0xFFFFFDFF);
 | 
			
		||||
#endif /* DATA_IN_ExtSDRAM */
 | 
			
		||||
#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */
 | 
			
		||||
 | 
			
		||||
#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) || defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)
 | 
			
		||||
#if defined(DATA_IN_ExtSRAM)
 | 
			
		||||
/*-- GPIOs Configuration -----------------------------------------------------*/
 | 
			
		||||
   /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */
 | 
			
		||||
  RCC->AHB1ENR   |= 0x00000078;
 | 
			
		||||
  
 | 
			
		||||
  /* Connect PDx pins to FMC Alternate function */
 | 
			
		||||
  GPIOD->AFR[0]  = 0x00CCC0CC;
 | 
			
		||||
  GPIOD->AFR[1]  = 0xCCCCCCCC;
 | 
			
		||||
  /* Configure PDx pins in Alternate function mode */  
 | 
			
		||||
  GPIOD->MODER   = 0xAAAA0A8A;
 | 
			
		||||
  /* Configure PDx pins speed to 100 MHz */  
 | 
			
		||||
  GPIOD->OSPEEDR = 0xFFFF0FCF;
 | 
			
		||||
  /* Configure PDx pins Output type to push-pull */  
 | 
			
		||||
  GPIOD->OTYPER  = 0x00000000;
 | 
			
		||||
  /* No pull-up, pull-down for PDx pins */ 
 | 
			
		||||
  GPIOD->PUPDR   = 0x00000000;
 | 
			
		||||
 | 
			
		||||
  /* Connect PEx pins to FMC Alternate function */
 | 
			
		||||
  GPIOE->AFR[0]  = 0xC00CC0CC;
 | 
			
		||||
  GPIOE->AFR[1]  = 0xCCCCCCCC;
 | 
			
		||||
  /* Configure PEx pins in Alternate function mode */ 
 | 
			
		||||
  GPIOE->MODER   = 0xAAAA828A;
 | 
			
		||||
  /* Configure PEx pins speed to 100 MHz */ 
 | 
			
		||||
  GPIOE->OSPEEDR = 0xFFFFC3CF;
 | 
			
		||||
  /* Configure PEx pins Output type to push-pull */  
 | 
			
		||||
  GPIOE->OTYPER  = 0x00000000;
 | 
			
		||||
  /* No pull-up, pull-down for PEx pins */ 
 | 
			
		||||
  GPIOE->PUPDR   = 0x00000000;
 | 
			
		||||
 | 
			
		||||
  /* Connect PFx pins to FMC Alternate function */
 | 
			
		||||
  GPIOF->AFR[0]  = 0x00CCCCCC;
 | 
			
		||||
  GPIOF->AFR[1]  = 0xCCCC0000;
 | 
			
		||||
  /* Configure PFx pins in Alternate function mode */   
 | 
			
		||||
  GPIOF->MODER   = 0xAA000AAA;
 | 
			
		||||
  /* Configure PFx pins speed to 100 MHz */ 
 | 
			
		||||
  GPIOF->OSPEEDR = 0xFF000FFF;
 | 
			
		||||
  /* Configure PFx pins Output type to push-pull */  
 | 
			
		||||
  GPIOF->OTYPER  = 0x00000000;
 | 
			
		||||
  /* No pull-up, pull-down for PFx pins */ 
 | 
			
		||||
  GPIOF->PUPDR   = 0x00000000;
 | 
			
		||||
 | 
			
		||||
  /* Connect PGx pins to FMC Alternate function */
 | 
			
		||||
  GPIOG->AFR[0]  = 0x00CCCCCC;
 | 
			
		||||
  GPIOG->AFR[1]  = 0x000000C0;
 | 
			
		||||
  /* Configure PGx pins in Alternate function mode */ 
 | 
			
		||||
  GPIOG->MODER   = 0x00085AAA;
 | 
			
		||||
  /* Configure PGx pins speed to 100 MHz */ 
 | 
			
		||||
  GPIOG->OSPEEDR = 0x000CAFFF;
 | 
			
		||||
  /* Configure PGx pins Output type to push-pull */  
 | 
			
		||||
  GPIOG->OTYPER  = 0x00000000;
 | 
			
		||||
  /* No pull-up, pull-down for PGx pins */ 
 | 
			
		||||
  GPIOG->PUPDR   = 0x00000000;
 | 
			
		||||
  
 | 
			
		||||
/*-- FMC/FSMC Configuration --------------------------------------------------*/                                                                               
 | 
			
		||||
  /* Enable the FMC/FSMC interface clock */
 | 
			
		||||
  RCC->AHB3ENR         |= 0x00000001;
 | 
			
		||||
  
 | 
			
		||||
#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) 
 | 
			
		||||
  /* Configure and enable Bank1_SRAM2 */
 | 
			
		||||
  FMC_Bank1->BTCR[2]  = 0x00001011;
 | 
			
		||||
  FMC_Bank1->BTCR[3]  = 0x00000201;
 | 
			
		||||
  FMC_Bank1E->BWTR[2] = 0x0fffffff;
 | 
			
		||||
#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */ 
 | 
			
		||||
 | 
			
		||||
#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx)|| defined(STM32F417xx)
 | 
			
		||||
  /* Configure and enable Bank1_SRAM2 */
 | 
			
		||||
  FSMC_Bank1->BTCR[2]  = 0x00001011;
 | 
			
		||||
  FSMC_Bank1->BTCR[3]  = 0x00000201;
 | 
			
		||||
  FSMC_Bank1E->BWTR[2] = 0x0FFFFFFF;
 | 
			
		||||
#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx */
 | 
			
		||||
 | 
			
		||||
#endif /* DATA_IN_ExtSRAM */
 | 
			
		||||
#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */ 
 | 
			
		||||
}
 | 
			
		||||
#endif /* DATA_IN_ExtSRAM || DATA_IN_ExtSDRAM */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Configures the System clock source, PLL Multiplier and Divider factors,
 | 
			
		||||
  *               AHB/APBx prescalers and Flash settings
 | 
			
		||||
  * @note   This function should be called only once the RCC clock configuration  
 | 
			
		||||
  *         is reset to the default reset state (done in SystemInit() function).             
 | 
			
		||||
  * @param  None
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void SetSysClock(void)
 | 
			
		||||
{
 | 
			
		||||
  /* 1- Try to start with HSE and external clock */
 | 
			
		||||
#if USE_PLL_HSE_EXTC != 0
 | 
			
		||||
  if (SetSysClock_PLL_HSE(1) == 0)
 | 
			
		||||
#endif
 | 
			
		||||
  {
 | 
			
		||||
    /* 2- If fail try to start with HSE and external xtal */
 | 
			
		||||
    #if USE_PLL_HSE_XTAL != 0
 | 
			
		||||
    if (SetSysClock_PLL_HSE(0) == 0)
 | 
			
		||||
    #endif
 | 
			
		||||
    {
 | 
			
		||||
      /* 3- If fail start with HSI clock */
 | 
			
		||||
      if (SetSysClock_PLL_HSI() == 0)
 | 
			
		||||
      {
 | 
			
		||||
        while(1)
 | 
			
		||||
        {
 | 
			
		||||
          // [TODO] Put something here to tell the user that a problem occured...
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  /* Output clock on MCO2 pin(PC9) for debugging purpose */
 | 
			
		||||
  //HAL_RCC_MCOConfig(RCC_MCO2, RCC_MCO2SOURCE_SYSCLK, RCC_MCODIV_4); // 100 MHz / 4 = 25 MHz
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#if (USE_PLL_HSE_XTAL != 0) || (USE_PLL_HSE_EXTC != 0)
 | 
			
		||||
/******************************************************************************/
 | 
			
		||||
/*            PLL (clocked by HSE) used as System clock source                */
 | 
			
		||||
/******************************************************************************/
 | 
			
		||||
uint8_t SetSysClock_PLL_HSE(uint8_t bypass)
 | 
			
		||||
{
 | 
			
		||||
  RCC_ClkInitTypeDef RCC_ClkInitStruct;
 | 
			
		||||
  RCC_OscInitTypeDef RCC_OscInitStruct;
 | 
			
		||||
 | 
			
		||||
  /* The voltage scaling allows optimizing the power consumption when the device is 
 | 
			
		||||
     clocked below the maximum system frequency, to update the voltage scaling value 
 | 
			
		||||
     regarding system frequency refer to product datasheet. */
 | 
			
		||||
  __PWR_CLK_ENABLE();
 | 
			
		||||
  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE2);
 | 
			
		||||
  
 | 
			
		||||
  /* Enable HSE oscillator and activate PLL with HSE as source */
 | 
			
		||||
  RCC_OscInitStruct.OscillatorType      = RCC_OSCILLATORTYPE_HSE;
 | 
			
		||||
  if (bypass == 0)
 | 
			
		||||
  {
 | 
			
		||||
    RCC_OscInitStruct.HSEState          = RCC_HSE_ON; /* External 8 MHz xtal on OSC_IN/OSC_OUT */
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    RCC_OscInitStruct.HSEState          = RCC_HSE_BYPASS; /* External 8 MHz clock on OSC_IN */
 | 
			
		||||
  }
 | 
			
		||||
  RCC_OscInitStruct.PLL.PLLState        = RCC_PLL_ON;
 | 
			
		||||
  RCC_OscInitStruct.PLL.PLLSource       = RCC_PLLSOURCE_HSE;
 | 
			
		||||
  //RCC_OscInitStruct.PLL.PLLM          = 8;             // VCO input clock = 1 MHz (8 MHz / 8)
 | 
			
		||||
  //RCC_OscInitStruct.PLL.PLLN          = 384;           // VCO output clock = 384 MHz (1 MHz * 384)
 | 
			
		||||
  RCC_OscInitStruct.PLL.PLLM            = 4;             // VCO input clock = 2 MHz (8 MHz / 4)
 | 
			
		||||
  RCC_OscInitStruct.PLL.PLLN            = 192;           // VCO output clock = 384 MHz (2 MHz * 192)
 | 
			
		||||
  RCC_OscInitStruct.PLL.PLLP            = RCC_PLLP_DIV4; // PLLCLK = 96 MHz (384 MHz / 4)
 | 
			
		||||
  RCC_OscInitStruct.PLL.PLLQ            = 8;             // USB clock = 48 MHz (384 MHz / 8) --> Good for USB
 | 
			
		||||
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
 | 
			
		||||
  {
 | 
			
		||||
    return 0; // FAIL
 | 
			
		||||
  }
 | 
			
		||||
 
 | 
			
		||||
  /* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2 clocks dividers */
 | 
			
		||||
  RCC_ClkInitStruct.ClockType      = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
 | 
			
		||||
  RCC_ClkInitStruct.SYSCLKSource   = RCC_SYSCLKSOURCE_PLLCLK; // 96 MHz
 | 
			
		||||
  RCC_ClkInitStruct.AHBCLKDivider  = RCC_SYSCLK_DIV1;         // 96 MHz
 | 
			
		||||
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;           // 48 MHz
 | 
			
		||||
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;           // 96 MHz
 | 
			
		||||
  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3) != HAL_OK)
 | 
			
		||||
  {
 | 
			
		||||
    return 0; // FAIL
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* Output clock on MCO1 pin(PA8) for debugging purpose */
 | 
			
		||||
  
 | 
			
		||||
  //if (bypass == 0)
 | 
			
		||||
  //  HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_HSE, RCC_MCODIV_2); // 4 MHz with xtal
 | 
			
		||||
  //else
 | 
			
		||||
  //  HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_HSE, RCC_MCODIV_1); // 8 MHz with external clock
 | 
			
		||||
  
 | 
			
		||||
  return 1; // OK
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/******************************************************************************/
 | 
			
		||||
/*            PLL (clocked by HSI) used as System clock source                */
 | 
			
		||||
/******************************************************************************/
 | 
			
		||||
uint8_t SetSysClock_PLL_HSI(void)
 | 
			
		||||
{
 | 
			
		||||
  RCC_ClkInitTypeDef RCC_ClkInitStruct;
 | 
			
		||||
  RCC_OscInitTypeDef RCC_OscInitStruct;
 | 
			
		||||
 | 
			
		||||
  /* The voltage scaling allows optimizing the power consumption when the device is 
 | 
			
		||||
     clocked below the maximum system frequency, to update the voltage scaling value 
 | 
			
		||||
     regarding system frequency refer to product datasheet. */
 | 
			
		||||
  __PWR_CLK_ENABLE();
 | 
			
		||||
  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE2);
 | 
			
		||||
 
 | 
			
		||||
  /* Enable HSI oscillator and activate PLL with HSI as source */
 | 
			
		||||
  RCC_OscInitStruct.OscillatorType      = RCC_OSCILLATORTYPE_HSI | RCC_OSCILLATORTYPE_HSE;
 | 
			
		||||
  RCC_OscInitStruct.HSIState            = RCC_HSI_ON;
 | 
			
		||||
  RCC_OscInitStruct.HSEState            = RCC_HSE_OFF;
 | 
			
		||||
  RCC_OscInitStruct.HSICalibrationValue = 16;
 | 
			
		||||
  RCC_OscInitStruct.PLL.PLLState        = RCC_PLL_ON;
 | 
			
		||||
  RCC_OscInitStruct.PLL.PLLSource       = RCC_PLLSOURCE_HSI;   
 | 
			
		||||
  //RCC_OscInitStruct.PLL.PLLM          = 16;            // VCO input clock = 1 MHz (16 MHz / 16)
 | 
			
		||||
  //RCC_OscInitStruct.PLL.PLLN          = 384;           // VCO output clock = 384 MHz (1 MHz * 384)
 | 
			
		||||
  RCC_OscInitStruct.PLL.PLLM            = 8;             // VCO input clock = 2 MHz (16 MHz / 8)
 | 
			
		||||
  RCC_OscInitStruct.PLL.PLLN            = 192;           // VCO output clock = 384 MHz (2 MHz * 192)
 | 
			
		||||
  RCC_OscInitStruct.PLL.PLLP            = RCC_PLLP_DIV4; // PLLCLK = 96 MHz (384 MHz / 4)
 | 
			
		||||
  RCC_OscInitStruct.PLL.PLLQ            = 8;             // USB clock = 48 MHz (384 MHz / 8) --> Good for USB
 | 
			
		||||
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
 | 
			
		||||
  {
 | 
			
		||||
    return 0; // FAIL
 | 
			
		||||
  }
 | 
			
		||||
 
 | 
			
		||||
  /* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2 clocks dividers */
 | 
			
		||||
  RCC_ClkInitStruct.ClockType      = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
 | 
			
		||||
  RCC_ClkInitStruct.SYSCLKSource   = RCC_SYSCLKSOURCE_PLLCLK; // 96 MHz
 | 
			
		||||
  RCC_ClkInitStruct.AHBCLKDivider  = RCC_SYSCLK_DIV1;         // 96 MHz
 | 
			
		||||
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;           // 48 MHz
 | 
			
		||||
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;           // 96 MHz
 | 
			
		||||
  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3) != HAL_OK)
 | 
			
		||||
  {
 | 
			
		||||
    return 0; // FAIL
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* Output clock on MCO1 pin(PA8) for debugging purpose */
 | 
			
		||||
  //HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_HSI, RCC_MCODIV_1); // 16 MHz
 | 
			
		||||
 | 
			
		||||
  return 1; // OK
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
  
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */    
 | 
			
		||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,123 @@
 | 
			
		|||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    system_stm32f4xx.h
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @version V2.3.0
 | 
			
		||||
  * @date    02-March-2015
 | 
			
		||||
  * @brief   CMSIS Cortex-M4 Device System Source File for STM32F4xx devices.       
 | 
			
		||||
  ******************************************************************************  
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * <h2><center>© COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
 | 
			
		||||
  *
 | 
			
		||||
  * Redistribution and use in source and binary forms, with or without modification,
 | 
			
		||||
  * are permitted provided that the following conditions are met:
 | 
			
		||||
  *   1. Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
  *      this list of conditions and the following disclaimer.
 | 
			
		||||
  *   2. Redistributions in binary form must reproduce the above copyright notice,
 | 
			
		||||
  *      this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
  *      and/or other materials provided with the distribution.
 | 
			
		||||
  *   3. Neither the name of STMicroelectronics nor the names of its contributors
 | 
			
		||||
  *      may be used to endorse or promote products derived from this software
 | 
			
		||||
  *      without specific prior written permission.
 | 
			
		||||
  *
 | 
			
		||||
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 | 
			
		||||
  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 | 
			
		||||
  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 | 
			
		||||
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
  *
 | 
			
		||||
  ******************************************************************************  
 | 
			
		||||
  */ 
 | 
			
		||||
 | 
			
		||||
/** @addtogroup CMSIS
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup stm32f4xx_system
 | 
			
		||||
  * @{
 | 
			
		||||
  */  
 | 
			
		||||
  
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Define to prevent recursive inclusion
 | 
			
		||||
  */
 | 
			
		||||
#ifndef __SYSTEM_STM32F4XX_H
 | 
			
		||||
#define __SYSTEM_STM32F4XX_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
 extern "C" {
 | 
			
		||||
#endif 
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32F4xx_System_Includes
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32F4xx_System_Exported_types
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
  /* This variable is updated in three ways:
 | 
			
		||||
      1) by calling CMSIS function SystemCoreClockUpdate()
 | 
			
		||||
      2) by calling HAL API function HAL_RCC_GetSysClockFreq()
 | 
			
		||||
      3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency 
 | 
			
		||||
         Note: If you use this function to configure the system clock; then there
 | 
			
		||||
               is no need to call the 2 first functions listed above, since SystemCoreClock
 | 
			
		||||
               variable is updated automatically.
 | 
			
		||||
  */
 | 
			
		||||
extern uint32_t SystemCoreClock;          /*!< System Clock Frequency (Core Clock) */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32F4xx_System_Exported_Constants
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32F4xx_System_Exported_Macros
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32F4xx_System_Exported_Functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
  
 | 
			
		||||
extern void SystemInit(void);
 | 
			
		||||
extern void SystemCoreClockUpdate(void);
 | 
			
		||||
extern void SetSysClock(void);
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /*__SYSTEM_STM32F4XX_H */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
  
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */  
 | 
			
		||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,87 @@
 | 
			
		|||
/* mbed Microcontroller Library
 | 
			
		||||
 *******************************************************************************
 | 
			
		||||
 * Copyright (c) 2014, STMicroelectronics
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
 *    this list of conditions and the following disclaimer.
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 | 
			
		||||
 *    this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
 *    and/or other materials provided with the distribution.
 | 
			
		||||
 * 3. Neither the name of STMicroelectronics nor the names of its contributors
 | 
			
		||||
 *    may be used to endorse or promote products derived from this software
 | 
			
		||||
 *    without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 | 
			
		||||
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 | 
			
		||||
 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 | 
			
		||||
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 *******************************************************************************
 | 
			
		||||
 */
 | 
			
		||||
#ifndef MBED_PERIPHERALNAMES_H
 | 
			
		||||
#define MBED_PERIPHERALNAMES_H
 | 
			
		||||
 | 
			
		||||
#include "cmsis.h"
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
typedef enum {
 | 
			
		||||
    ADC_1 = (int)ADC1_BASE
 | 
			
		||||
} ADCName;
 | 
			
		||||
 | 
			
		||||
typedef enum {
 | 
			
		||||
    UART_1 = (int)USART1_BASE,
 | 
			
		||||
    UART_2 = (int)USART2_BASE,
 | 
			
		||||
    UART_3 = (int)USART3_BASE,
 | 
			
		||||
    UART_4 = (int)UART4_BASE,
 | 
			
		||||
    UART_5 = (int)UART5_BASE,
 | 
			
		||||
    UART_6 = (int)USART6_BASE
 | 
			
		||||
} UARTName;
 | 
			
		||||
 | 
			
		||||
#define STDIO_UART_TX  PA_2
 | 
			
		||||
#define STDIO_UART_RX  PA_3
 | 
			
		||||
#define STDIO_UART     UART_2
 | 
			
		||||
 | 
			
		||||
typedef enum {
 | 
			
		||||
    SPI_1 = (int)SPI1_BASE,
 | 
			
		||||
    SPI_2 = (int)SPI2_BASE,
 | 
			
		||||
    SPI_3 = (int)SPI3_BASE,
 | 
			
		||||
    SPI_4 = (int)SPI4_BASE
 | 
			
		||||
} SPIName;
 | 
			
		||||
 | 
			
		||||
typedef enum {
 | 
			
		||||
    I2C_1 = (int)I2C1_BASE,
 | 
			
		||||
    I2C_2 = (int)I2C2_BASE,
 | 
			
		||||
    I2C_3 = (int)I2C3_BASE
 | 
			
		||||
} I2CName;
 | 
			
		||||
 | 
			
		||||
typedef enum {
 | 
			
		||||
    PWM_1  = (int)TIM1_BASE,
 | 
			
		||||
    PWM_2  = (int)TIM2_BASE,
 | 
			
		||||
    PWM_3  = (int)TIM3_BASE,
 | 
			
		||||
    PWM_4  = (int)TIM4_BASE,
 | 
			
		||||
    PWM_5  = (int)TIM5_BASE,
 | 
			
		||||
    PWM_8  = (int)TIM8_BASE,
 | 
			
		||||
    PWM_9  = (int)TIM9_BASE,
 | 
			
		||||
    PWM_10 = (int)TIM10_BASE,
 | 
			
		||||
    PWM_11 = (int)TIM11_BASE,
 | 
			
		||||
    PWM_13 = (int)TIM13_BASE,
 | 
			
		||||
    PWM_14 = (int)TIM14_BASE
 | 
			
		||||
} PWMName;
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,200 @@
 | 
			
		|||
/* mbed Microcontroller Library
 | 
			
		||||
 *******************************************************************************
 | 
			
		||||
 * Copyright (c) 2014, STMicroelectronics
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
 *    this list of conditions and the following disclaimer.
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 | 
			
		||||
 *    this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
 *    and/or other materials provided with the distribution.
 | 
			
		||||
 * 3. Neither the name of STMicroelectronics nor the names of its contributors
 | 
			
		||||
 *    may be used to endorse or promote products derived from this software
 | 
			
		||||
 *    without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 | 
			
		||||
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 | 
			
		||||
 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 | 
			
		||||
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 *******************************************************************************
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "PeripheralPins.h"
 | 
			
		||||
 | 
			
		||||
// =====
 | 
			
		||||
// Note: Commented lines are alternative possibilities which are not used per default.
 | 
			
		||||
//       If you change them, you will have also to modify the corresponding xxx_api.c file
 | 
			
		||||
//       for pwmout, analogin, analogout, ...
 | 
			
		||||
// =====
 | 
			
		||||
 | 
			
		||||
//*** ADC ***
 | 
			
		||||
 | 
			
		||||
const PinMap PinMap_ADC[] = {
 | 
			
		||||
    {PA_0, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 0,  0)}, // ADC1_IN0
 | 
			
		||||
    {PA_1, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 1,  0)}, // ADC1_IN1
 | 
			
		||||
    {PA_2, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 2,  0)}, // ADC1_IN2
 | 
			
		||||
    {PA_3, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 3,  0)}, // ADC1_IN3
 | 
			
		||||
    {PA_4, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 4,  0)}, // ADC1_IN4
 | 
			
		||||
    {PA_5, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 5,  0)}, // ADC1_IN5
 | 
			
		||||
    {PA_6, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 6,  0)}, // ADC1_IN6
 | 
			
		||||
    {PA_7, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 7,  0)}, // ADC1_IN7
 | 
			
		||||
    {PB_0, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 8,  0)}, // ADC1_IN8
 | 
			
		||||
    {PB_1, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 9,  0)}, // ADC1_IN9
 | 
			
		||||
    {PC_0, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 10, 0)}, // ADC1_IN10
 | 
			
		||||
    {PC_1, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 11, 0)}, // ADC1_IN11
 | 
			
		||||
    {PC_2, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 12, 0)}, // ADC1_IN12
 | 
			
		||||
    {PC_3, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 13, 0)}, // ADC1_IN13
 | 
			
		||||
    {PC_4, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 14, 0)}, // ADC1_IN14
 | 
			
		||||
    {PC_5, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 15, 0)}, // ADC1_IN15
 | 
			
		||||
    {NC,   NC,    0}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
//*** I2C ***
 | 
			
		||||
 | 
			
		||||
const PinMap PinMap_I2C_SDA[] = {
 | 
			
		||||
//OH    {PB_3,  I2C_2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF9_I2C2)},
 | 
			
		||||
//OH    {PB_4,  I2C_3, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF9_I2C3)},
 | 
			
		||||
    {PB_7,  I2C_1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)},
 | 
			
		||||
//  {PB_8,  I2C_3, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF9_I2C3)}, // Warning: also on SCL
 | 
			
		||||
    {PB_9,  I2C_1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)}, // ARDUINO
 | 
			
		||||
//  {PB_9,  I2C_2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF9_I2C2)},
 | 
			
		||||
    {PC_9,  I2C_3, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C3)},
 | 
			
		||||
    {NC,    NC,    0}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const PinMap PinMap_I2C_SCL[] = {
 | 
			
		||||
    {PA_8,  I2C_3, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C3)},
 | 
			
		||||
    {PB_6,  I2C_1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)},
 | 
			
		||||
    {PB_8,  I2C_1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)}, // ARDUINO
 | 
			
		||||
    {PB_10, I2C_2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)},
 | 
			
		||||
    {NC,    NC,    0}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
//*** PWM ***
 | 
			
		||||
 | 
			
		||||
// TIM5 cannot be used because already used by the us_ticker
 | 
			
		||||
const PinMap PinMap_PWM[] = {
 | 
			
		||||
    {PA_0,  PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 1, 0)}, // TIM2_CH1
 | 
			
		||||
//  {PA_0,  PWM_5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 1, 0)}, // TIM5_CH1
 | 
			
		||||
    {PA_1,  PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 2, 0)}, // TIM2_CH2
 | 
			
		||||
//  {PA_1,  PWM_5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 2, 0)}, // TIM5_CH2
 | 
			
		||||
    {PA_2,  PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 3, 0)}, // TIM2_CH3
 | 
			
		||||
//  {PA_2,  PWM_5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 3, 0)}, // TIM5_CH3
 | 
			
		||||
//  {PA_2,  PWM_9, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM9, 1, 0)}, // TIM9_CH1
 | 
			
		||||
    {PA_3,  PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 4, 0)}, // TIM2_CH4
 | 
			
		||||
//  {PA_3,  PWM_5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 4, 0)}, // TIM5_CH4
 | 
			
		||||
//  {PA_3,  PWM_9, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM9, 2, 0)}, // TIM9_CH2
 | 
			
		||||
    {PA_5,  PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 1, 0)}, // TIM2_CH1
 | 
			
		||||
    {PA_6,  PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 1, 0)}, // TIM3_CH1
 | 
			
		||||
    {PA_7,  PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 1, 1)}, // TIM1_CH1N - ARDUINO
 | 
			
		||||
//  {PA_7,  PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2 - ARDUINO
 | 
			
		||||
    {PA_8,  PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 1, 0)}, // TIM1_CH1
 | 
			
		||||
    {PA_9,  PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 2, 0)}, // TIM1_CH2
 | 
			
		||||
    {PA_10, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 3, 0)}, // TIM1_CH3
 | 
			
		||||
    {PA_11, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 4, 0)}, // TIM1_CH4
 | 
			
		||||
    {PA_15, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 1, 0)}, // TIM2_CH1
 | 
			
		||||
 | 
			
		||||
    {PB_0,  PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 2, 1)},  // TIM1_CH2N
 | 
			
		||||
//  {PB_0,  PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 3, 0)},  // TIM3_CH3
 | 
			
		||||
    {PB_1,  PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 3, 1)},  // TIM1_CH3N
 | 
			
		||||
//  {PB_1,  PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 4, 0)},  // TIM3_CH4
 | 
			
		||||
    {PB_3,  PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 2, 0)},  // TIM2_CH2 - ARDUINO
 | 
			
		||||
    {PB_4,  PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 1, 0)},  // TIM3_CH1 - ARDUINO
 | 
			
		||||
    {PB_5,  PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 2, 0)},  // TIM3_CH2
 | 
			
		||||
    {PB_6,  PWM_4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 1, 0)},  // TIM4_CH1 - ARDUINO
 | 
			
		||||
    {PB_7,  PWM_4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 2, 0)},  // TIM4_CH2
 | 
			
		||||
    {PB_8,  PWM_4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 3, 0)},  // TIM4_CH3
 | 
			
		||||
//  {PB_8,  PWM_10,STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM1, 1, 0)}, // TIM10_CH1
 | 
			
		||||
    {PB_9,  PWM_4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 4, 0)},  // TIM4_CH4
 | 
			
		||||
//  {PB_9,  PWM_11,STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM11,1, 0)},  // TIM11_CH1
 | 
			
		||||
    {PB_10, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 3, 0)},  // TIM2_CH3 - ARDUINO
 | 
			
		||||
    {PB_13, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 1, 1)},  // TIM1_CH1N
 | 
			
		||||
    {PB_14, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 2, 1)},  // TIM1_CH2N
 | 
			
		||||
    {PB_15, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 3, 1)},  // TIM1_CH3N
 | 
			
		||||
 | 
			
		||||
    {PC_6,  PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 1, 0)},  // TIM3_CH1
 | 
			
		||||
    {PC_7,  PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 2, 0)},  // TIM3_CH2 - ARDUINO
 | 
			
		||||
    {PC_8,  PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 3, 0)},  // TIM3_CH3
 | 
			
		||||
    {PC_9,  PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 4, 0)},  // TIM3_CH4
 | 
			
		||||
 | 
			
		||||
    {NC,    NC,    0}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
//*** SERIAL ***
 | 
			
		||||
 | 
			
		||||
const PinMap PinMap_UART_TX[] = {
 | 
			
		||||
    {PA_2,  UART_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)},
 | 
			
		||||
    {PA_9,  UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)},
 | 
			
		||||
    {PA_11, UART_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)},
 | 
			
		||||
    {PA_15, UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)},
 | 
			
		||||
    {PB_6,  UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)},
 | 
			
		||||
    {PC_6,  UART_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)},
 | 
			
		||||
    {NC,    NC,     0}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const PinMap PinMap_UART_RX[] = {
 | 
			
		||||
    {PA_3,  UART_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)},
 | 
			
		||||
    {PA_10, UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)},
 | 
			
		||||
    {PA_12, UART_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)},
 | 
			
		||||
    {PB_3,  UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)},
 | 
			
		||||
    {PB_7,  UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)},
 | 
			
		||||
    {PC_7,  UART_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)},
 | 
			
		||||
    {NC,    NC,     0}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
//*** SPI ***
 | 
			
		||||
 | 
			
		||||
const PinMap PinMap_SPI_MOSI[] = {
 | 
			
		||||
    {PA_1,  SPI_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI4)},
 | 
			
		||||
    {PA_7,  SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, // ARDUINO
 | 
			
		||||
//  {PB_5,  SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)},
 | 
			
		||||
    {PB_5,  SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)},
 | 
			
		||||
    {PB_15, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)},
 | 
			
		||||
    {PC_3,  SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)},
 | 
			
		||||
    {PC_12, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)},
 | 
			
		||||
    {NC,    NC,    0}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const PinMap PinMap_SPI_MISO[] = {
 | 
			
		||||
    {PA_6,  SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, // ARDUINO
 | 
			
		||||
    {PA_11, SPI_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI4)},
 | 
			
		||||
//  {PB_4,  SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)},
 | 
			
		||||
    {PB_4,  SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)},
 | 
			
		||||
    {PB_14, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)},
 | 
			
		||||
    {PC_2,  SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)},
 | 
			
		||||
    {PC_11, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)},
 | 
			
		||||
    {NC,    NC,    0}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const PinMap PinMap_SPI_SCLK[] = {
 | 
			
		||||
    {PA_5,  SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, // ARDUINO
 | 
			
		||||
//  {PB_3,  SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)},
 | 
			
		||||
    {PB_3,  SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)},
 | 
			
		||||
    {PB_10, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)},
 | 
			
		||||
//  {PB_12, SPI_3, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, GPIO_AF7_SPI3)}, // Warning: also on NSS
 | 
			
		||||
    {PB_13, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)},
 | 
			
		||||
//  {PB_13, SPI_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI4)},
 | 
			
		||||
    {PC_7,  SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)},
 | 
			
		||||
    {PC_10, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)},
 | 
			
		||||
    {NC,    NC,    0}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const PinMap PinMap_SPI_SSEL[] = {
 | 
			
		||||
    {PA_4,  SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)},
 | 
			
		||||
//  {PA_4,  SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF6_SPI3)},
 | 
			
		||||
    {PA_15, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)},
 | 
			
		||||
//  {PA_15, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF6_SPI3)},
 | 
			
		||||
    {PB_9,  SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI2)},
 | 
			
		||||
    {PB_12, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI2)}, // Warning: also on SCLK
 | 
			
		||||
//  {PB_12, SPI_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF6_SPI4)}, // Warning: also on SCLK
 | 
			
		||||
    {NC,    NC,    0}
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,185 @@
 | 
			
		|||
/* mbed Microcontroller Library
 | 
			
		||||
 *******************************************************************************
 | 
			
		||||
 * Copyright (c) 2014, STMicroelectronics
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
 *    this list of conditions and the following disclaimer.
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 | 
			
		||||
 *    this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
 *    and/or other materials provided with the distribution.
 | 
			
		||||
 * 3. Neither the name of STMicroelectronics nor the names of its contributors
 | 
			
		||||
 *    may be used to endorse or promote products derived from this software
 | 
			
		||||
 *    without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 | 
			
		||||
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 | 
			
		||||
 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 | 
			
		||||
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 *******************************************************************************
 | 
			
		||||
 */
 | 
			
		||||
#ifndef MBED_PINNAMES_H
 | 
			
		||||
#define MBED_PINNAMES_H
 | 
			
		||||
 | 
			
		||||
#include "cmsis.h"
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// See stm32f4xx_hal_gpio.h and stm32f4xx_hal_gpio_ex.h for values of MODE, PUPD and AFNUM
 | 
			
		||||
#define STM_PIN_DATA(MODE, PUPD, AFNUM)  ((int)(((AFNUM) << 7) | ((PUPD) << 4) | ((MODE) << 0)))
 | 
			
		||||
#define STM_PIN_DATA_EXT(MODE, PUPD, AFNUM, CHANNEL, INVERTED)  ((int)(((INVERTED & 0x01) << 15) | ((CHANNEL & 0x0F) << 11) | ((AFNUM & 0x0F) << 7) | ((PUPD & 0x07) << 4) | ((MODE & 0x0F) << 0)))
 | 
			
		||||
#define STM_PIN_MODE(X)   (((X) >> 0) & 0x0F)
 | 
			
		||||
#define STM_PIN_PUPD(X)   (((X) >> 4) & 0x07)
 | 
			
		||||
#define STM_PIN_AFNUM(X)  (((X) >> 7) & 0x0F)
 | 
			
		||||
#define STM_PIN_CHANNEL(X)  (((X) >> 11) & 0x0F)
 | 
			
		||||
#define STM_PIN_INVERTED(X) (((X) >> 15) & 0x01)
 | 
			
		||||
#define STM_MODE_INPUT              (0)
 | 
			
		||||
#define STM_MODE_OUTPUT_PP          (1)
 | 
			
		||||
#define STM_MODE_OUTPUT_OD          (2)
 | 
			
		||||
#define STM_MODE_AF_PP              (3)
 | 
			
		||||
#define STM_MODE_AF_OD              (4)
 | 
			
		||||
#define STM_MODE_ANALOG             (5)
 | 
			
		||||
#define STM_MODE_IT_RISING          (6)
 | 
			
		||||
#define STM_MODE_IT_FALLING         (7)
 | 
			
		||||
#define STM_MODE_IT_RISING_FALLING  (8)
 | 
			
		||||
#define STM_MODE_EVT_RISING         (9)
 | 
			
		||||
#define STM_MODE_EVT_FALLING        (10)
 | 
			
		||||
#define STM_MODE_EVT_RISING_FALLING (11)
 | 
			
		||||
#define STM_MODE_IT_EVT_RESET       (12)
 | 
			
		||||
 | 
			
		||||
// High nibble = port number (0=A, 1=B, 2=C, 3=D, 4=E, 5=F, 6=G, 7=H)
 | 
			
		||||
// Low nibble  = pin number
 | 
			
		||||
#define STM_PORT(X) (((uint32_t)(X) >> 4) & 0xF)
 | 
			
		||||
#define STM_PIN(X)  ((uint32_t)(X) & 0xF)
 | 
			
		||||
 | 
			
		||||
typedef enum {
 | 
			
		||||
    PIN_INPUT,
 | 
			
		||||
    PIN_OUTPUT
 | 
			
		||||
} PinDirection;
 | 
			
		||||
 | 
			
		||||
typedef enum {
 | 
			
		||||
    PA_0  = 0x00,
 | 
			
		||||
    PA_1  = 0x01,
 | 
			
		||||
    PA_2  = 0x02,
 | 
			
		||||
    PA_3  = 0x03,
 | 
			
		||||
    PA_4  = 0x04,
 | 
			
		||||
    PA_5  = 0x05,
 | 
			
		||||
    PA_6  = 0x06,
 | 
			
		||||
    PA_7  = 0x07,
 | 
			
		||||
    PA_8  = 0x08,
 | 
			
		||||
    PA_9  = 0x09,
 | 
			
		||||
    PA_10 = 0x0A,
 | 
			
		||||
    PA_11 = 0x0B,
 | 
			
		||||
    PA_12 = 0x0C,
 | 
			
		||||
    PA_13 = 0x0D,
 | 
			
		||||
    PA_14 = 0x0E,
 | 
			
		||||
    PA_15 = 0x0F,
 | 
			
		||||
 | 
			
		||||
    PB_0  = 0x10,
 | 
			
		||||
    PB_1  = 0x11,
 | 
			
		||||
    PB_2  = 0x12,
 | 
			
		||||
    PB_3  = 0x13,
 | 
			
		||||
    PB_4  = 0x14,
 | 
			
		||||
    PB_5  = 0x15,
 | 
			
		||||
    PB_6  = 0x16,
 | 
			
		||||
    PB_7  = 0x17,
 | 
			
		||||
    PB_8  = 0x18,
 | 
			
		||||
    PB_9  = 0x19,
 | 
			
		||||
    PB_10 = 0x1A,
 | 
			
		||||
    PB_12 = 0x1C,
 | 
			
		||||
    PB_13 = 0x1D,
 | 
			
		||||
    PB_14 = 0x1E,
 | 
			
		||||
    PB_15 = 0x1F,
 | 
			
		||||
 | 
			
		||||
    PC_0  = 0x20,
 | 
			
		||||
    PC_1  = 0x21,
 | 
			
		||||
    PC_2  = 0x22,
 | 
			
		||||
    PC_3  = 0x23,
 | 
			
		||||
    PC_4  = 0x24,
 | 
			
		||||
    PC_5  = 0x25,
 | 
			
		||||
    PC_6  = 0x26,
 | 
			
		||||
    PC_7  = 0x27,
 | 
			
		||||
    PC_8  = 0x28,
 | 
			
		||||
    PC_9  = 0x29,
 | 
			
		||||
    PC_10 = 0x2A,
 | 
			
		||||
    PC_11 = 0x2B,
 | 
			
		||||
    PC_12 = 0x2C,
 | 
			
		||||
    PC_13 = 0x2D,
 | 
			
		||||
    PC_14 = 0x2E,
 | 
			
		||||
    PC_15 = 0x2F,
 | 
			
		||||
 | 
			
		||||
    PD_2  = 0x32,
 | 
			
		||||
 | 
			
		||||
    PH_0  = 0x70,
 | 
			
		||||
    PH_1  = 0x71,
 | 
			
		||||
 | 
			
		||||
    // Arduino connector namings
 | 
			
		||||
    A0          = PA_0,
 | 
			
		||||
    A1          = PA_1,
 | 
			
		||||
    A2          = PA_4,
 | 
			
		||||
    A3          = PB_0,
 | 
			
		||||
    A4          = PC_1,
 | 
			
		||||
    A5          = PC_0,
 | 
			
		||||
    D0          = PA_3,
 | 
			
		||||
    D1          = PA_2,
 | 
			
		||||
    D2          = PA_10,
 | 
			
		||||
    D3          = PB_3,
 | 
			
		||||
    D4          = PB_5,
 | 
			
		||||
    D5          = PB_4,
 | 
			
		||||
    D6          = PB_10,
 | 
			
		||||
    D7          = PA_8,
 | 
			
		||||
    D8          = PA_9,
 | 
			
		||||
    D9          = PC_7,
 | 
			
		||||
    D10         = PB_6,
 | 
			
		||||
    D11         = PA_7,
 | 
			
		||||
    D12         = PA_6,
 | 
			
		||||
    D13         = PA_5,
 | 
			
		||||
    D14         = PB_9,
 | 
			
		||||
    D15         = PB_8,
 | 
			
		||||
 | 
			
		||||
    // Generic signals namings
 | 
			
		||||
    LED1        = PA_5,
 | 
			
		||||
    LED2        = PA_5,
 | 
			
		||||
    LED3        = PA_5,
 | 
			
		||||
    LED4        = PA_5,
 | 
			
		||||
    USER_BUTTON = PC_13,
 | 
			
		||||
    SERIAL_TX   = PA_2,
 | 
			
		||||
    SERIAL_RX   = PA_3,
 | 
			
		||||
    USBTX       = PA_2,
 | 
			
		||||
    USBRX       = PA_3,
 | 
			
		||||
    I2C_SCL     = PB_8,
 | 
			
		||||
    I2C_SDA     = PB_9,
 | 
			
		||||
    SPI_MOSI    = PA_7,
 | 
			
		||||
    SPI_MISO    = PA_6,
 | 
			
		||||
    SPI_SCK     = PA_5,
 | 
			
		||||
    SPI_CS      = PB_6,
 | 
			
		||||
    PWM_OUT     = PB_3,
 | 
			
		||||
 | 
			
		||||
    // Not connected
 | 
			
		||||
    NC = (int)0xFFFFFFFF
 | 
			
		||||
} PinName;
 | 
			
		||||
 | 
			
		||||
typedef enum {
 | 
			
		||||
    PullNone  = 0,
 | 
			
		||||
    PullUp    = 1,
 | 
			
		||||
    PullDown  = 2,
 | 
			
		||||
    OpenDrain = 3,
 | 
			
		||||
    PullDefault = PullNone
 | 
			
		||||
} PinMode;
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,51 @@
 | 
			
		|||
/* mbed Microcontroller Library
 | 
			
		||||
 *******************************************************************************
 | 
			
		||||
 * Copyright (c) 2014, STMicroelectronics
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
 *    this list of conditions and the following disclaimer.
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 | 
			
		||||
 *    this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
 *    and/or other materials provided with the distribution.
 | 
			
		||||
 * 3. Neither the name of STMicroelectronics nor the names of its contributors
 | 
			
		||||
 *    may be used to endorse or promote products derived from this software
 | 
			
		||||
 *    without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 | 
			
		||||
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 | 
			
		||||
 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 | 
			
		||||
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 *******************************************************************************
 | 
			
		||||
 */
 | 
			
		||||
#ifndef MBED_PORTNAMES_H
 | 
			
		||||
#define MBED_PORTNAMES_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
typedef enum {
 | 
			
		||||
    PortA = 0,
 | 
			
		||||
    PortB = 1,
 | 
			
		||||
    PortC = 2,
 | 
			
		||||
    PortD = 3,
 | 
			
		||||
    PortE = 4,
 | 
			
		||||
    PortF = 5,
 | 
			
		||||
    PortG = 6,
 | 
			
		||||
    PortH = 7
 | 
			
		||||
} PortName;
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,70 @@
 | 
			
		|||
/* mbed Microcontroller Library
 | 
			
		||||
 *******************************************************************************
 | 
			
		||||
 * Copyright (c) 2014, STMicroelectronics
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
 *    this list of conditions and the following disclaimer.
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 | 
			
		||||
 *    this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
 *    and/or other materials provided with the distribution.
 | 
			
		||||
 * 3. Neither the name of STMicroelectronics nor the names of its contributors
 | 
			
		||||
 *    may be used to endorse or promote products derived from this software
 | 
			
		||||
 *    without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 | 
			
		||||
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 | 
			
		||||
 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 | 
			
		||||
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 *******************************************************************************
 | 
			
		||||
 */
 | 
			
		||||
#ifndef MBED_DEVICE_H
 | 
			
		||||
#define MBED_DEVICE_H
 | 
			
		||||
 | 
			
		||||
#define DEVICE_PORTIN           1
 | 
			
		||||
#define DEVICE_PORTOUT          1
 | 
			
		||||
#define DEVICE_PORTINOUT        1
 | 
			
		||||
 | 
			
		||||
#define DEVICE_INTERRUPTIN      1
 | 
			
		||||
 | 
			
		||||
#define DEVICE_ANALOGIN         1
 | 
			
		||||
#define DEVICE_ANALOGOUT        0 // Not present on this device
 | 
			
		||||
 | 
			
		||||
#define DEVICE_SERIAL           1
 | 
			
		||||
 | 
			
		||||
#define DEVICE_I2C              1
 | 
			
		||||
#define DEVICE_I2CSLAVE         1
 | 
			
		||||
 | 
			
		||||
#define DEVICE_SPI              1
 | 
			
		||||
#define DEVICE_SPISLAVE         1
 | 
			
		||||
 | 
			
		||||
#define DEVICE_RTC              1
 | 
			
		||||
 | 
			
		||||
#define DEVICE_PWMOUT           1
 | 
			
		||||
 | 
			
		||||
#define DEVICE_SLEEP            1
 | 
			
		||||
 | 
			
		||||
//=======================================
 | 
			
		||||
 | 
			
		||||
#define DEVICE_SEMIHOST         0
 | 
			
		||||
#define DEVICE_LOCALFILESYSTEM  0
 | 
			
		||||
#define DEVICE_ID_LENGTH       24
 | 
			
		||||
 | 
			
		||||
#define DEVICE_DEBUG_AWARENESS  0
 | 
			
		||||
 | 
			
		||||
#define DEVICE_STDIO_MESSAGES   1
 | 
			
		||||
 | 
			
		||||
#define DEVICE_ERROR_RED        0
 | 
			
		||||
 | 
			
		||||
#include "objects.h"
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,108 @@
 | 
			
		|||
/* mbed Microcontroller Library
 | 
			
		||||
 *******************************************************************************
 | 
			
		||||
 * Copyright (c) 2014, STMicroelectronics
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
 *    this list of conditions and the following disclaimer.
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 | 
			
		||||
 *    this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
 *    and/or other materials provided with the distribution.
 | 
			
		||||
 * 3. Neither the name of STMicroelectronics nor the names of its contributors
 | 
			
		||||
 *    may be used to endorse or promote products derived from this software
 | 
			
		||||
 *    without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 | 
			
		||||
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 | 
			
		||||
 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 | 
			
		||||
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 *******************************************************************************
 | 
			
		||||
 */
 | 
			
		||||
#ifndef MBED_OBJECTS_H
 | 
			
		||||
#define MBED_OBJECTS_H
 | 
			
		||||
 | 
			
		||||
#include "cmsis.h"
 | 
			
		||||
#include "PortNames.h"
 | 
			
		||||
#include "PeripheralNames.h"
 | 
			
		||||
#include "PinNames.h"
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
struct gpio_irq_s {
 | 
			
		||||
    IRQn_Type irq_n;
 | 
			
		||||
    uint32_t irq_index;
 | 
			
		||||
    uint32_t event;
 | 
			
		||||
    PinName pin;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct port_s {
 | 
			
		||||
    PortName port;
 | 
			
		||||
    uint32_t mask;
 | 
			
		||||
    PinDirection direction;
 | 
			
		||||
    __IO uint32_t *reg_in;
 | 
			
		||||
    __IO uint32_t *reg_out;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct analogin_s {
 | 
			
		||||
    ADCName adc;
 | 
			
		||||
    PinName pin;
 | 
			
		||||
    uint8_t channel;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct serial_s {
 | 
			
		||||
    UARTName uart;
 | 
			
		||||
    int index; // Used by irq
 | 
			
		||||
    uint32_t baudrate;
 | 
			
		||||
    uint32_t databits;
 | 
			
		||||
    uint32_t stopbits;
 | 
			
		||||
    uint32_t parity;
 | 
			
		||||
    PinName pin_tx;
 | 
			
		||||
    PinName pin_rx;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct spi_s {
 | 
			
		||||
    SPIName spi;
 | 
			
		||||
    uint32_t bits;
 | 
			
		||||
    uint32_t cpol;
 | 
			
		||||
    uint32_t cpha;
 | 
			
		||||
    uint32_t mode;
 | 
			
		||||
    uint32_t nss;
 | 
			
		||||
    uint32_t br_presc;
 | 
			
		||||
    PinName pin_miso;
 | 
			
		||||
    PinName pin_mosi;
 | 
			
		||||
    PinName pin_sclk;
 | 
			
		||||
    PinName pin_ssel;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct i2c_s {
 | 
			
		||||
    I2CName  i2c;
 | 
			
		||||
    uint32_t slave;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct pwmout_s {
 | 
			
		||||
    PWMName pwm;
 | 
			
		||||
    PinName pin;
 | 
			
		||||
    uint32_t period;
 | 
			
		||||
    uint32_t pulse;
 | 
			
		||||
    uint8_t channel;
 | 
			
		||||
    uint8_t inverted;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#include "gpio_object.h"
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -41,6 +41,7 @@ class CoIDE(Exporter):
 | 
			
		|||
        'NUCLEO_F334R8',
 | 
			
		||||
        'NUCLEO_F401RE',
 | 
			
		||||
        'NUCLEO_F411RE',
 | 
			
		||||
        'NUCLEO_F446RE',
 | 
			
		||||
        'DISCO_L053C8',
 | 
			
		||||
        'DISCO_F051R8',
 | 
			
		||||
        'DISCO_F100RB',
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,90 @@
 | 
			
		|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 | 
			
		||||
<Project version="2G - 1.7.5" name="{{name}}">
 | 
			
		||||
  <Target name="{{name}}" isCurrent="1">
 | 
			
		||||
    <Device manufacturerId="9" manufacturerName="ST" chipId="499" chipName="STM32F446RE" boardId="" boardName=""/>
 | 
			
		||||
    <BuildOption>
 | 
			
		||||
      <Compile>
 | 
			
		||||
        <Option name="OptimizationLevel" value="4"/>
 | 
			
		||||
        <Option name="UseFPU" value="0"/>
 | 
			
		||||
        <Option name="UserEditCompiler" value="-fno-common; -fmessage-length=0; -Wall; -fno-strict-aliasing; -fno-rtti; -fno-exceptions; -ffunction-sections; -fdata-sections; -std=gnu++98"/>
 | 
			
		||||
        <Option name="FPU" value="1"/>
 | 
			
		||||
        <Option name="SupportCPlusplus" value="1"/>
 | 
			
		||||
        <Includepaths>
 | 
			
		||||
          {% for path in include_paths %} <Includepath path="{{path}}"/> {% endfor %}
 | 
			
		||||
        </Includepaths>
 | 
			
		||||
        <DefinedSymbols>
 | 
			
		||||
          {% for s in symbols %} <Define name="{{s}}"/> {% endfor %}
 | 
			
		||||
        </DefinedSymbols>
 | 
			
		||||
      </Compile>
 | 
			
		||||
      <Link useDefault="0">
 | 
			
		||||
        <Option name="DiscardUnusedSection" value="1"/>
 | 
			
		||||
        <Option name="UserEditLinkder" value=""/>
 | 
			
		||||
        <Option name="UseMemoryLayout" value="0"/>
 | 
			
		||||
        <Option name="LTO" value="0"/>
 | 
			
		||||
        <Option name="IsNewStartupCode" value="1"/>
 | 
			
		||||
        <Option name="Library" value="Not use C Library"/>
 | 
			
		||||
        <Option name="nostartfiles" value="0"/>
 | 
			
		||||
        <Option name="UserEditLinker" value="-Wl,--wrap,main; --specs=nano.specs; -u _printf_float; -u _scanf_float; {% for file in object_files %}
 | 
			
		||||
        ${project.path}/{{file}}; {% endfor %} {% for p in library_paths %}-L${project.path}/{{p}}; {% endfor %}"/>
 | 
			
		||||
        <LinkedLibraries>
 | 
			
		||||
          {% for lib in libraries %}
 | 
			
		||||
          <Libset dir="" libs="{{lib}}"/>
 | 
			
		||||
          {% endfor %}
 | 
			
		||||
          <Libset dir="" libs="stdc++"/>
 | 
			
		||||
          <Libset dir="" libs="supc++"/>
 | 
			
		||||
          <Libset dir="" libs="m"/>
 | 
			
		||||
          <Libset dir="" libs="gcc"/>
 | 
			
		||||
          <Libset dir="" libs="c"/>
 | 
			
		||||
          <Libset dir="" libs="nosys"/>
 | 
			
		||||
        </LinkedLibraries>
 | 
			
		||||
        <MemoryAreas debugInFlashNotRAM="1">
 | 
			
		||||
          <Memory name="IROM1" type="ReadOnly" size="0x00080000" startValue="0x08000000"/>
 | 
			
		||||
          <Memory name="IRAM1" type="ReadWrite" size="0x0001FE68" startValue="0x20000198"/>
 | 
			
		||||
          <Memory name="IROM2" type="ReadOnly" size="" startValue=""/>
 | 
			
		||||
          <Memory name="IRAM2" type="ReadWrite" size="" startValue=""/>
 | 
			
		||||
        </MemoryAreas>
 | 
			
		||||
        <LocateLinkFile path="{{scatter_file}}" type="0"/>
 | 
			
		||||
      </Link>
 | 
			
		||||
      <Output>
 | 
			
		||||
        <Option name="OutputFileType" value="0"/>
 | 
			
		||||
        <Option name="Path" value="./"/>
 | 
			
		||||
        <Option name="Name" value="{{name}}"/>
 | 
			
		||||
        <Option name="HEX" value="1"/>
 | 
			
		||||
        <Option name="BIN" value="1"/>
 | 
			
		||||
      </Output>
 | 
			
		||||
      <User>
 | 
			
		||||
        <UserRun name="Run#1" type="Before" checked="0" value=""/>
 | 
			
		||||
        <UserRun name="Run#1" type="After" checked="0" value=""/>
 | 
			
		||||
      </User>
 | 
			
		||||
    </BuildOption>
 | 
			
		||||
    <DebugOption>
 | 
			
		||||
      <Option name="org.coocox.codebugger.gdbjtag.core.adapter" value="ST-Link"/>
 | 
			
		||||
      <Option name="org.coocox.codebugger.gdbjtag.core.debugMode" value="SWD"/>
 | 
			
		||||
      <Option name="org.coocox.codebugger.gdbjtag.core.clockDiv" value="1M"/>
 | 
			
		||||
      <Option name="org.coocox.codebugger.gdbjtag.corerunToMain" value="1"/>
 | 
			
		||||
      <Option name="org.coocox.codebugger.gdbjtag.core.jlinkgdbserver" value=""/>
 | 
			
		||||
      <Option name="org.coocox.codebugger.gdbjtag.core.userDefineGDBScript" value=""/>
 | 
			
		||||
      <Option name="org.coocox.codebugger.gdbjtag.core.targetEndianess" value="0"/>
 | 
			
		||||
      <Option name="org.coocox.codebugger.gdbjtag.core.jlinkResetMode" value="Type 0: Normal"/>
 | 
			
		||||
      <Option name="org.coocox.codebugger.gdbjtag.core.resetMode" value="SYSRESETREQ"/>
 | 
			
		||||
      <Option name="org.coocox.codebugger.gdbjtag.core.ifSemihost" value="0"/>
 | 
			
		||||
      <Option name="org.coocox.codebugger.gdbjtag.core.ifCacheRom" value="1"/>
 | 
			
		||||
      <Option name="org.coocox.codebugger.gdbjtag.core.ipAddress" value="127.0.0.1"/>
 | 
			
		||||
      <Option name="org.coocox.codebugger.gdbjtag.core.portNumber" value="2009"/>
 | 
			
		||||
      <Option name="org.coocox.codebugger.gdbjtag.core.autoDownload" value="1"/>
 | 
			
		||||
      <Option name="org.coocox.codebugger.gdbjtag.core.verify" value="1"/>
 | 
			
		||||
      <Option name="org.coocox.codebugger.gdbjtag.core.downloadFuction" value="Erase Effected"/>
 | 
			
		||||
      <Option name="org.coocox.codebugger.gdbjtag.core.defaultAlgorithm" value="stm32f4xx_512.elf"/>
 | 
			
		||||
    </DebugOption>
 | 
			
		||||
    <ExcludeFile/>
 | 
			
		||||
  </Target>
 | 
			
		||||
  <Components path="./"/>
 | 
			
		||||
  <Files>
 | 
			
		||||
    {% for file in source_files %}
 | 
			
		||||
    <File name="sources/{{file.path}}" path="{{file.path}}" type="{{file.type}}"/>
 | 
			
		||||
    {% endfor %}
 | 
			
		||||
    {% for file in header_files %}
 | 
			
		||||
    <File name="headers/{{file.path}}" path="{{file.path}}" type="{{file.type}}"/>
 | 
			
		||||
    {% endfor %}
 | 
			
		||||
  </Files>
 | 
			
		||||
</Project>
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,78 @@
 | 
			
		|||
# This file was automagically generated by mbed.org. For more information, 
 | 
			
		||||
# see http://mbed.org/handbook/Exporting-to-GCC-ARM-Embedded
 | 
			
		||||
 | 
			
		||||
GCC_BIN = 
 | 
			
		||||
PROJECT = {{name}}
 | 
			
		||||
OBJECTS = {% for f in to_be_compiled %}{{f}} {% endfor %}
 | 
			
		||||
SYS_OBJECTS = {% for f in object_files %}{{f}} {% endfor %}
 | 
			
		||||
INCLUDE_PATHS = {% for p in include_paths %}-I{{p}} {% endfor %}
 | 
			
		||||
LIBRARY_PATHS = {% for p in library_paths %}-L{{p}} {% endfor %}
 | 
			
		||||
LIBRARIES = {% for lib in libraries %}-l{{lib}} {% endfor %}
 | 
			
		||||
LINKER_SCRIPT = {{linker_script}}
 | 
			
		||||
 | 
			
		||||
############################################################################### 
 | 
			
		||||
AS      = $(GCC_BIN)arm-none-eabi-as
 | 
			
		||||
CC      = $(GCC_BIN)arm-none-eabi-gcc
 | 
			
		||||
CPP     = $(GCC_BIN)arm-none-eabi-g++
 | 
			
		||||
LD      = $(GCC_BIN)arm-none-eabi-gcc
 | 
			
		||||
OBJCOPY = $(GCC_BIN)arm-none-eabi-objcopy
 | 
			
		||||
OBJDUMP = $(GCC_BIN)arm-none-eabi-objdump
 | 
			
		||||
SIZE 	= $(GCC_BIN)arm-none-eabi-size
 | 
			
		||||
 | 
			
		||||
CPU = -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=$(FLOAT_ABI)
 | 
			
		||||
CC_FLAGS = $(CPU) -c -g -fno-common -fmessage-length=0 -Wall -fno-exceptions -ffunction-sections -fdata-sections -fomit-frame-pointer
 | 
			
		||||
CC_FLAGS += -MMD -MP
 | 
			
		||||
CC_SYMBOLS = {% for s in symbols %}-D{{s}} {% endfor %}
 | 
			
		||||
 | 
			
		||||
LD_FLAGS = $(CPU) -Wl,--gc-sections --specs=nano.specs -u _printf_float -u _scanf_float -Wl,--wrap,main
 | 
			
		||||
LD_FLAGS += -Wl,-Map=$(PROJECT).map,--cref
 | 
			
		||||
LD_SYS_LIBS = -lstdc++ -lsupc++ -lm -lc -lgcc -lnosys
 | 
			
		||||
 | 
			
		||||
ifeq ($(HARDFP),1)
 | 
			
		||||
	FLOAT_ABI = hard
 | 
			
		||||
else
 | 
			
		||||
	FLOAT_ABI = softfp
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(DEBUG), 1)
 | 
			
		||||
  CC_FLAGS += -DDEBUG -O0
 | 
			
		||||
else
 | 
			
		||||
  CC_FLAGS += -DNDEBUG -Os
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
all: $(PROJECT).bin $(PROJECT).hex 
 | 
			
		||||
 | 
			
		||||
clean:
 | 
			
		||||
	rm -f $(PROJECT).bin $(PROJECT).elf $(PROJECT).hex $(PROJECT).map $(PROJECT).lst $(OBJECTS) $(DEPS)
 | 
			
		||||
 | 
			
		||||
.s.o:
 | 
			
		||||
	$(AS) $(CPU) -o $@ $<
 | 
			
		||||
 | 
			
		||||
.c.o:
 | 
			
		||||
	$(CC)  $(CC_FLAGS) $(CC_SYMBOLS) -std=gnu99   $(INCLUDE_PATHS) -o $@ $<
 | 
			
		||||
 | 
			
		||||
.cpp.o:
 | 
			
		||||
	$(CPP) $(CC_FLAGS) $(CC_SYMBOLS) -std=gnu++98 -fno-rtti $(INCLUDE_PATHS) -o $@ $<
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
$(PROJECT).elf: $(OBJECTS) $(SYS_OBJECTS)
 | 
			
		||||
	$(LD) $(LD_FLAGS) -T$(LINKER_SCRIPT) $(LIBRARY_PATHS) -o $@ $^ $(LIBRARIES) $(LD_SYS_LIBS) $(LIBRARIES) $(LD_SYS_LIBS)
 | 
			
		||||
	$(SIZE) $@
 | 
			
		||||
 | 
			
		||||
$(PROJECT).bin: $(PROJECT).elf
 | 
			
		||||
	@$(OBJCOPY) -O binary $< $@
 | 
			
		||||
 | 
			
		||||
$(PROJECT).hex: $(PROJECT).elf
 | 
			
		||||
	@$(OBJCOPY) -O ihex $< $@
 | 
			
		||||
 | 
			
		||||
$(PROJECT).lst: $(PROJECT).elf
 | 
			
		||||
	@$(OBJDUMP) -Sdh $< > $@
 | 
			
		||||
 | 
			
		||||
lst: $(PROJECT).lst
 | 
			
		||||
 | 
			
		||||
size:
 | 
			
		||||
	$(SIZE) $(PROJECT).elf
 | 
			
		||||
 | 
			
		||||
DEPS = $(OBJECTS:.o=.d) $(SYS_OBJECTS:.o=.d)
 | 
			
		||||
-include $(DEPS)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -59,6 +59,7 @@ class GccArm(Exporter):
 | 
			
		|||
        'ARCH_MAX',
 | 
			
		||||
        'NUCLEO_F401RE',
 | 
			
		||||
        'NUCLEO_F411RE',
 | 
			
		||||
        'NUCLEO_F446RE',
 | 
			
		||||
        'ARCH_MAX',
 | 
			
		||||
        'DISCO_F429ZI',
 | 
			
		||||
        'NUCLEO_F030R8',
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -587,6 +587,15 @@ class NUCLEO_F411RE(Target):
 | 
			
		|||
        self.supported_form_factors = ["ARDUINO", "MORPHO"]
 | 
			
		||||
        self.detect_code = ["0740"]
 | 
			
		||||
 | 
			
		||||
class NUCLEO_F446RE(Target):
 | 
			
		||||
    def __init__(self):
 | 
			
		||||
        Target.__init__(self)
 | 
			
		||||
        self.core = "Cortex-M4F"
 | 
			
		||||
        self.extra_labels = ['STM', 'STM32F4', 'STM32F446RE']
 | 
			
		||||
        self.supported_toolchains = ["GCC_ARM"]
 | 
			
		||||
        self.default_toolchain = "uARM"
 | 
			
		||||
        self.supported_form_factors = ["ARDUINO", "MORPHO"]
 | 
			
		||||
        
 | 
			
		||||
class NUCLEO_L053R8(Target):
 | 
			
		||||
    def __init__(self):
 | 
			
		||||
        Target.__init__(self)
 | 
			
		||||
| 
						 | 
				
			
			@ -1265,6 +1274,7 @@ TARGETS = [
 | 
			
		|||
    NUCLEO_F334R8(),
 | 
			
		||||
    NUCLEO_F401RE(),
 | 
			
		||||
    NUCLEO_F411RE(),
 | 
			
		||||
    NUCLEO_F446RE(),
 | 
			
		||||
    NUCLEO_L053R8(),
 | 
			
		||||
    NUCLEO_L073RZ(),
 | 
			
		||||
    NUCLEO_L152RE(),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue