Changeset - 970a161634a0
[Not reviewed]
default
0 0 8
Ethan Zonca - 11 years ago 2014-03-29 23:49:03
ez@ethanzonca.com
Initial import of discovery project
8 files changed with 1204 insertions and 0 deletions:
0 comments (0 inline, 0 general)
Makefile
Show inline comments
 
new file 100644
 

	
 
TARGET:=Demonstration
 
TOOLCHAIN_PATH:=/usr/bin
 
TOOLCHAIN_PREFIX:=arm-none-eabi
 
OPTLVL:=3 # Optimization level, can be [0, 1, 2, 3, s].
 

	
 
#PROJECT_NAME:=$(notdir $(lastword $(CURDIR)))
 
TOP:=$(shell readlink -f "../..")
 
DISCOVERY:=$(TOP)/Utilities/STM32L100C-Discovery
 
STMLIB:=$(TOP)/Libraries
 
STD_PERIPH:=$(STMLIB)/STM32L1xx_StdPeriph_Driver
 
STARTUP:=$(STMLIB)/CMSIS/Device/ST/STM32L1xx/Source/Templates/gcc_ride7
 
LINKER_SCRIPT:=$(CURDIR)/stm32-flash.ld
 
#LINKER_SCRIPT:=$(CURDIR)/../stm32_flash.ld
 

	
 
INCLUDE=-I$(CURDIR)
 
INCLUDE+=-I$(STMLIB)/CMSIS/Include
 
INCLUDE+=-I$(STMLIB)/CMSIS/Device/ST/STM32L1xx/Include
 
INCLUDE+=-I$(STD_PERIPH)/inc
 
INCLUDE+=-I$(DISCOVERY)
 
#INCLUDE+=-I$(STMLIB)/STM32_USB_OTG_Driver/inc
 
#INCLUDE+=-I$(STMLIB)/STM32_USB_Device_Library/Class/hid/inc
 
#INCLUDE+=-I$(STMLIB)/STM32_USB_Device_Library/Core/inc
 

	
 
# vpath is used so object files are written to the current directory instead
 
# of the same directory as their source files
 
vpath %.c $(DISCOVERY) $(STD_PERIPH)/src \
 
          $(STMLIB)/STM32_USB_OTG_Driver/src \
 
          $(STMLIB)/STM32_USB_Device_Library/Class/hid/src \
 
          $(STMLIB)/STM32_USB_Device_Library/Core/src
 
vpath %.s $(STARTUP)
 

	
 
ASRC=startup_stm32l1xx_mdp.s
 

	
 
# Project Source Files
 
SRC=main.c
 
SRC+=stm32l1xx_it.c
 
SRC+=system_stm32l1xx.c
 
SRC+=stm32l100c_discovery.c
 

	
 
# Discovery Source Files
 
#SRC+=stm32f4_discovery_lis302dl.c
 
#SRC+=stm32f4_discovery.c
 
#SRC+=stm32f4_discovery_audio_codec.c
 

	
 
# Standard Peripheral Source Files
 
SRC+=stm32l1xx_syscfg.c
 
SRC+=misc.c
 
SRC+=stm32l1xx_adc.c
 
SRC+=stm32l1xx_dac.c
 
SRC+=stm32l1xx_dma.c
 
SRC+=stm32l1xx_exti.c
 
SRC+=stm32l1xx_flash.c
 
SRC+=stm32l1xx_gpio.c
 
SRC+=stm32l1xx_i2c.c
 
SRC+=stm32l1xx_rcc.c
 
SRC+=stm32l1xx_spi.c
 
SRC+=stm32l1xx_tim.c
 

	
 
# USB Source Files
 
#SRC+=usb_dcd_int.c
 
#SRC+=usb_core.c
 
#SRC+=usb_dcd.c
 
#SRC+=usbd_hid_core.c
 
#SRC+=usbd_req.c
 
#SRC+=usbd_core.c
 
#SRC+=usbd_ioreq.c
 

	
 
CDEFS=-DUSE_STDPERIPH_DRIVER
 
CDEFS+=-DSTM32L1XX
 
CDEFS+=-DMANGUSTA_DISCOVERY
 
#CDEFS+=-DUSE_USB_OTG_FS
 
CDEFS+=-DHSE_VALUE=8000000
 

	
 
MCUFLAGS=-mcpu=cortex-m3 -mthumb
 
#MCUFLAGS=-mcpu=cortex-m4 -mthumb -mlittle-endian -mfpu=fpa -mfloat-abi=hard -mthumb-interwork
 
#MCUFLAGS=-mcpu=cortex-m4 -mfpu=vfpv4-sp-d16 -mfloat-abi=hard
 
COMMONFLAGS=-O$(OPTLVL) -g -Wall
 
CFLAGS=$(COMMONFLAGS) $(MCUFLAGS) $(INCLUDE) $(CDEFS)
 

	
 
LDLIBS=
 
LDFLAGS=$(COMMONFLAGS) -fno-exceptions -ffunction-sections -fdata-sections \
 
        -nostartfiles -Wl,--gc-sections,-T$(LINKER_SCRIPT)
 

	
 
#####
 
#####
 

	
 
OBJ = $(SRC:%.c=%.o) $(ASRC:%.s=%.o)
 

	
 
CC=$(TOOLCHAIN_PATH)/$(TOOLCHAIN_PREFIX)-gcc
 
LD=$(TOOLCHAIN_PATH)/$(TOOLCHAIN_PREFIX)-gcc
 
OBJCOPY=$(TOOLCHAIN_PATH)/$(TOOLCHAIN_PREFIX)-objcopy
 
AS=$(TOOLCHAIN_PATH)/$(TOOLCHAIN_PREFIX)-as
 
AR=$(TOOLCHAIN_PATH)/$(TOOLCHAIN_PREFIX)-ar
 
GDB=$(TOOLCHAIN_PATH)/$(TOOLCHAIN_PREFIX)-gdb
 

	
 

	
 
all: $(OBJ)
 
	$(CC) -o $(TARGET).elf $(LDFLAGS) $(OBJ)	$(LDLIBS)
 
	$(OBJCOPY) -O ihex   $(TARGET).elf $(TARGET).hex
 
	$(OBJCOPY) -O binary $(TARGET).elf $(TARGET).bin
 

	
 
.PHONY: clean
 

	
 
clean:
 
	rm -f $(OBJ)
 
	rm -f $(TARGET).elf
 
	rm -f $(TARGET).hex
 
	rm -f $(TARGET).bin
main.c
Show inline comments
 
new file 100644
 
/**
 
  ******************************************************************************
 
  * @file    main.c 
 
  * @author  MCD Application Team
 
  * @version V1.0.0
 
  * @date    29-July-2013
 
  * @brief   Main program body
 
  ******************************************************************************
 
  * @attention
 
  *
 
  * <h2><center>&copy; COPYRIGHT 2013 STMicroelectronics</center></h2>
 
  *
 
  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
 
  * You may not use this file except in compliance with the License.
 
  * You may obtain a copy of the License at:
 
  *
 
  *        http://www.st.com/software_license_agreement_liberty_v2
 
  *
 
  * Unless required by applicable law or agreed to in writing, software 
 
  * distributed under the License is distributed on an "AS IS" BASIS, 
 
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
  * See the License for the specific language governing permissions and
 
  * limitations under the License.
 
  *
 
  ******************************************************************************
 
  */ 
 
 
/* Includes ------------------------------------------------------------------*/
 
#include "main.h"
 
#include "stm32l100c_discovery.h"
 
/** @addtogroup STM32L100C-Discovery_Demo
 
  * @{
 
  */
 
 
/* Private typedef -----------------------------------------------------------*/
 
/* Private define ------------------------------------------------------------*/
 
/* Private macro -------------------------------------------------------------*/
 
/* Private variables ---------------------------------------------------------*/
 
static __IO uint32_t TimingDelay;
 
uint8_t BlinkSpeed = 0;
 
 
/* Private function prototypes -----------------------------------------------*/
 
/* Private functions ---------------------------------------------------------*/
 
 
/**
 
  * @brief  Main program.
 
  * @param  None
 
  * @retval None
 
  */
 
int main(void)
 
{
 
  RCC_ClocksTypeDef RCC_Clocks;
 
  
 
  /* Configure LED3 and LED4 on STM32L100C-Discovery */
 
  STM_EVAL_LEDInit(LED3);
 
  STM_EVAL_LEDInit(LED4);
 
  
 
  /* Initialize User_Button on STM32L100C-Discovery */
 
  STM_EVAL_PBInit(BUTTON_USER, BUTTON_MODE_GPIO);
 
  
 
  /* SysTick end of count event each 1ms */
 
  RCC_GetClocksFreq(&RCC_Clocks);
 
  SysTick_Config(RCC_Clocks.HCLK_Frequency / 1000);
 
   
 
  /* Initiate Blink Speed variable */ 
 
  BlinkSpeed = 1;
 
  
 
  while(1)
 
  {  
 
    /* Check if the user button is pressed */
 
    if(STM_EVAL_PBGetState(BUTTON_USER)== SET)
 
    {
 
      /* BlinkSpeed: 1 -> 2 -> 0, then re-cycle */
 
      /* Turn on LD4 Blue LED during 1s each time User button is pressed */
 
      STM_EVAL_LEDOn(LED4);
 
      
 
      /* wait for 1s */
 
      Delay(1000);
 
      
 
      /* Turn off LD4 Blue LED after 1s each time User button is pressed */
 
      STM_EVAL_LEDOff(LED4);
 
      
 
      /* Increment the blink speed counter */
 
      BlinkSpeed++;
 
      
 
      /* Default value for blink speed counter */
 
      if(BlinkSpeed == 3)
 
      {  
 
        BlinkSpeed = 0;
 
      }
 
    }
 
    
 
    /* Test on blink speed */
 
    if(BlinkSpeed == 2)
 
    {
 
      /* LED3 toggles each 100 ms */
 
      STM_EVAL_LEDToggle(LED3);
 
      
 
      /* maintain LED3 status for 100ms */
 
      Delay(100);
 
    }
 
    else if(BlinkSpeed == 1)
 
    {
 
      /* LED3 toggles each 200 ms */
 
      STM_EVAL_LEDToggle(LED3);
 
      
 
      /* maintain LED3 status for 200ms */
 
      Delay(200);
 
    }
 
    else
 
    {  
 
      /* LED3 Off */
 
      STM_EVAL_LEDOff(LED3);
 
    }
 
  }
 
}
 
 
/**
 
  * @brief  Inserts a delay time.
 
  * @param  nTime: specifies the delay time length, in 1 ms.
 
  * @retval None
 
  */
 
void Delay(__IO uint32_t nTime)
 
{
 
  TimingDelay = nTime;
 
 
  while(TimingDelay != 0);
 
}
 
 
/**
 
  * @brief  Decrements the TimingDelay variable.
 
  * @param  None
 
  * @retval None
 
  */
 
void TimingDelay_Decrement(void)
 
{
 
  if (TimingDelay != 0x00)
 
  { 
 
    TimingDelay--;
 
  }
 
}
 
 
#ifdef  USE_FULL_ASSERT
 
 
/**
 
  * @brief  Reports the name of the source file and the source line number
 
  *   where the assert_param error has occurred.
 
  * @param  file: pointer to the source file name
 
  * @param  line: assert_param error line source number
 
  * @retval None
 
  */
 
void assert_failed(uint8_t* file, uint32_t line)
 
{ 
 
  /* User can add his own implementation to report the file name and line number,
 
     ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
 
 
  /* Infinite loop */
 
  while (1)
 
  {}
 
}
 
#endif
 
 
/**
 
  * @}
 
  */
 
 
 
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
main.h
Show inline comments
 
new file 100644
 
/**
 
  ******************************************************************************
 
  * @file    main.h 
 
  * @author  MCD Application Team
 
  * @version V1.0.0
 
  * @date    29-July-2013
 
  * @brief   Header for main.c module
 
  ******************************************************************************
 
  * @attention
 
  *
 
  * <h2><center>&copy; COPYRIGHT 2013 STMicroelectronics</center></h2>
 
  *
 
  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
 
  * You may not use this file except in compliance with the License.
 
  * You may obtain a copy of the License at:
 
  *
 
  *        http://www.st.com/software_license_agreement_liberty_v2
 
  *
 
  * Unless required by applicable law or agreed to in writing, software 
 
  * distributed under the License is distributed on an "AS IS" BASIS, 
 
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
  * See the License for the specific language governing permissions and
 
  * limitations under the License.
 
  *
 
  ******************************************************************************
 
  */ 
 
  
 
/* Define to prevent recursive inclusion -------------------------------------*/
 
#ifndef __MAIN_H
 
#define __MAIN_H
 
 
/* Includes ------------------------------------------------------------------*/
 
#include "stm32l1xx.h"
 
#include "stm32l100c_discovery.h"
 
/* Exported types ------------------------------------------------------------*/
 
/* Private define ------------------------------------------------------------*/
 
/* Exported constants --------------------------------------------------------*/
 
/* Exported macro ------------------------------------------------------------*/
 
/* Exported functions ------------------------------------------------------- */
 
void TimingDelay_Decrement(void);
 
void Delay(__IO uint32_t nTime);
 
 
#endif /* __MAIN_H */
 
 
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
stm32-flash.ld
Show inline comments
 
new file 100644
 
/*
 
*****************************************************************************
 
**
 
**  File        : STM32-FLASH.ld
 
**
 
**  Abstract    : Linker script for STM32L100xC Device with
 
**                256KByte FLASH and 16KByte RAM
 
**
 
**                Set heap size, stack size and stack location according
 
**                to application requirements.
 
**
 
**                Set memory bank area and size if external memory is used.
 
**
 
**  Target      : STMicroelectronics STM32
 
**
 
**  Environment : Atollic TrueSTUDIO(R)
 
**
 
**  Distribution: The file is distributed "as is," without any warranty
 
**                of any kind.
 
**
 
**  (c)Copyright Atollic AB.
 
**  You may use this file as-is or modify it according to the needs of your
 
**  project. Distribution of this file (unmodified or modified) is not
 
**  permitted. Atollic AB permit registered Atollic TrueSTUDIO(R) users the
 
**  rights to distribute the assembled, compiled & linked contents of this
 
**  file as part of an application binary file, provided that it is built
 
**  using the Atollic TrueSTUDIO(R) toolchain.
 
**
 
*****************************************************************************
 
*/
 
 
/* Entry Point */
 
ENTRY(Reset_Handler)
 
 
/* Highest address of the user mode stack */
 
_estack = 0x20004000;    /* end of 16K RAM */
 
 
/* Generate a link error if heap and stack don't fit into RAM */
 
_Min_Heap_Size = 0x200;      /* required amount of heap  */
 
_Min_Stack_Size = 0x400; /* required amount of stack */
 
 
/* Specify the memory areas */
 
MEMORY
 
{
 
  FLASH (rx)      : ORIGIN = 0x08000000, LENGTH = 256K
 
  RAM (xrw)       : ORIGIN = 0x20000000, LENGTH = 16K
 
  MEMORY_B1 (rx)  : ORIGIN = 0x60000000, LENGTH = 0K
 
}
 
 
/* Define output sections */
 
SECTIONS
 
{
 
  /* The startup code goes first into FLASH */
 
  .isr_vector :
 
  {
 
    . = ALIGN(4);
 
    KEEP(*(.isr_vector)) /* Startup code */
 
    . = ALIGN(4);
 
  } >FLASH
 
 
  /* The program code and other data goes into FLASH */
 
  .text :
 
  {
 
    . = ALIGN(4);
 
    *(.text)           /* .text sections (code) */
 
    *(.text*)          /* .text* sections (code) */
 
    *(.rodata)         /* .rodata sections (constants, strings, etc.) */
 
    *(.rodata*)        /* .rodata* sections (constants, strings, etc.) */
 
    *(.glue_7)         /* glue arm to thumb code */
 
    *(.glue_7t)        /* glue thumb to arm code */
 
 
    KEEP (*(.init))
 
    KEEP (*(.fini))
 
 
    . = ALIGN(4);
 
    _etext = .;        /* define a global symbols at end of code */
 
  } >FLASH
 
 
 
   .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH
 
    .ARM : {
 
    __exidx_start = .;
 
      *(.ARM.exidx*)
 
      __exidx_end = .;
 
    } >FLASH
 
 
/*  .ARM.attributes : { *(.ARM.attributes) } > FLASH */
 
 
  .preinit_array     :
 
  {
 
    PROVIDE_HIDDEN (__preinit_array_start = .);
 
    KEEP (*(.preinit_array*))
 
    PROVIDE_HIDDEN (__preinit_array_end = .);
 
  } >FLASH
 
  .init_array :
 
  {
 
    PROVIDE_HIDDEN (__init_array_start = .);
 
    KEEP (*(SORT(.init_array.*)))
 
    KEEP (*(.init_array*))
 
    PROVIDE_HIDDEN (__init_array_end = .);
 
  } >FLASH
 
  .fini_array :
 
  {
 
    PROVIDE_HIDDEN (__fini_array_start = .);
 
    KEEP (*(.fini_array*))
 
    KEEP (*(SORT(.fini_array.*)))
 
    PROVIDE_HIDDEN (__fini_array_end = .);
 
  } >FLASH
 
 
  /* used by the startup to initialize data */
 
  _sidata = .;
 
 
  /* Initialized data sections goes into RAM, load LMA copy after code */
 
  .data : AT ( _sidata )
 
  {
 
    . = ALIGN(4);
 
    _sdata = .;        /* create a global symbol at data start */
 
    *(.data)           /* .data sections */
 
    *(.data*)          /* .data* sections */
 
 
    . = ALIGN(4);
 
    _edata = .;        /* define a global symbol at data end */
 
  } >RAM
 
 
  /* Uninitialized data section */
 
  . = ALIGN(4);
 
  .bss :
 
  {
 
    /* This is used by the startup in order to initialize the .bss secion */
 
    _sbss = .;         /* define a global symbol at bss start */
 
    __bss_start__ = _sbss;
 
    *(.bss)
 
    *(.bss*)
 
    *(COMMON)
 
 
    . = ALIGN(4);
 
    _ebss = .;         /* define a global symbol at bss end */
 
    __bss_end__ = _ebss;
 
  } >RAM
 
 
  PROVIDE ( end = _ebss );
 
  PROVIDE ( _end = _ebss );
 
 
  /* User_heap_stack section, used to check that there is enough RAM left */
 
  ._user_heap_stack :
 
  {
 
    . = ALIGN(4);
 
    . = . + _Min_Heap_Size;
 
    . = . + _Min_Stack_Size;
 
    . = ALIGN(4);
 
  } >RAM
 
 
  /* MEMORY_bank1 section, code must be located here explicitly            */
 
  /* Example: extern int foo(void) __attribute__ ((section (".mb1text"))); */
 
  .memory_b1_text :
 
  {
 
    *(.mb1text)        /* .mb1text sections (code) */
 
    *(.mb1text*)       /* .mb1text* sections (code)  */
 
    *(.mb1rodata)      /* read-only data (constants) */
 
    *(.mb1rodata*)
 
  } >MEMORY_B1
 
 
  /* Remove information from the standard libraries */
 
  /DISCARD/ :
 
  {
 
    libc.a ( * )
 
    libm.a ( * )
 
    libgcc.a ( * )
 
  }
 
  
 
  .ARM.attributes 0 : { *(.ARM.attributes) }
 
 
}
stm32l1xx_conf.h
Show inline comments
 
new file 100644
 
/**
 
  ******************************************************************************
 
  * @file    stm32l1xx_conf.h 
 
  * @author  MCD Application Team
 
  * @version V1.0.0
 
  * @date    29-July-2013
 
  * @brief   Library configuration file.
 
  ******************************************************************************
 
  * @attention
 
  *
 
  * <h2><center>&copy; COPYRIGHT 2013 STMicroelectronics</center></h2>
 
  *
 
  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
 
  * You may not use this file except in compliance with the License.
 
  * You may obtain a copy of the License at:
 
  *
 
  *        http://www.st.com/software_license_agreement_liberty_v2
 
  *
 
  * Unless required by applicable law or agreed to in writing, software 
 
  * distributed under the License is distributed on an "AS IS" BASIS, 
 
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
  * See the License for the specific language governing permissions and
 
  * limitations under the License.
 
  *
 
  ******************************************************************************
 
  */
 
 
/* Define to prevent recursive inclusion -------------------------------------*/
 
#ifndef __STM32L1xx_CONF_H
 
#define __STM32L1xx_CONF_H
 
 
/* Includes ------------------------------------------------------------------*/
 
/* Uncomment/Comment the line below to enable/disable peripheral header file inclusion */
 
#include "stm32l1xx_adc.h"
 
#include "stm32l1xx_aes.h"
 
#include "stm32l1xx_comp.h"
 
#include "stm32l1xx_crc.h"
 
#include "stm32l1xx_dac.h"
 
#include "stm32l1xx_dbgmcu.h"
 
#include "stm32l1xx_dma.h"
 
#include "stm32l1xx_exti.h"
 
#include "stm32l1xx_flash.h"
 
#include "stm32l1xx_fsmc.h"
 
#include "stm32l1xx_gpio.h"
 
#include "stm32l1xx_i2c.h"
 
#include "stm32l1xx_iwdg.h"
 
#include "stm32l1xx_lcd.h"
 
#include "stm32l1xx_opamp.h"
 
#include "stm32l1xx_pwr.h"
 
#include "stm32l1xx_rcc.h"
 
#include "stm32l1xx_rtc.h"
 
#include "stm32l1xx_sdio.h"
 
#include "stm32l1xx_spi.h"
 
#include "stm32l1xx_syscfg.h"
 
#include "stm32l1xx_tim.h"
 
#include "stm32l1xx_usart.h"
 
#include "stm32l1xx_wwdg.h"
 
#include "misc.h"  /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */
 
 
/* Exported types ------------------------------------------------------------*/
 
/* Exported constants --------------------------------------------------------*/
 
/* Uncomment the line below to expanse the "assert_param" macro in the 
 
   Standard Peripheral Library drivers code */
 
/* #define USE_FULL_ASSERT    1 */
 
 
/* 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 */
 
 
#endif /* __STM32L1xx_CONF_H */
 
 
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
stm32l1xx_it.c
Show inline comments
 
new file 100644
 
/**
 
  ******************************************************************************
 
  * @file    stm32l1xx_it.c 
 
  * @author  MCD Application Team
 
  * @version V1.0.0
 
  * @date    29-July-2013
 
  * @brief   Main Interrupt Service Routines.
 
  *          This file provides template for all exceptions handler and 
 
  *          peripherals interrupt service routine.
 
  ******************************************************************************
 
  * @attention
 
  *
 
  * <h2><center>&copy; COPYRIGHT 2013 STMicroelectronics</center></h2>
 
  *
 
  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
 
  * You may not use this file except in compliance with the License.
 
  * You may obtain a copy of the License at:
 
  *
 
  *        http://www.st.com/software_license_agreement_liberty_v2
 
  *
 
  * Unless required by applicable law or agreed to in writing, software 
 
  * distributed under the License is distributed on an "AS IS" BASIS, 
 
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
  * See the License for the specific language governing permissions and
 
  * limitations under the License.
 
  *
 
  ******************************************************************************
 
  */
 
 
/* Includes ------------------------------------------------------------------*/
 
#include "stm32l1xx_it.h"
 
#include "main.h"
 
 
/** @addtogroup STM32L100C-Discovery_Demo
 
  * @{
 
  */
 
 
/* Private typedef -----------------------------------------------------------*/
 
/* Private define ------------------------------------------------------------*/
 
/* Private macro -------------------------------------------------------------*/
 
/* Private variables ---------------------------------------------------------*/
 
/* Private function prototypes -----------------------------------------------*/
 
/* Private functions ---------------------------------------------------------*/
 
 
/******************************************************************************/
 
/*            Cortex-M3 Processor Exceptions Handlers                         */
 
/******************************************************************************/
 
 
/**
 
  * @brief  This function handles NMI exception.
 
  * @param  None
 
  * @retval None
 
  */
 
void NMI_Handler(void)
 
{
 
}
 
 
/**
 
  * @brief  This function handles Hard Fault exception.
 
  * @param  None
 
  * @retval None
 
  */
 
void HardFault_Handler(void)
 
{
 
  /* Go to infinite loop when Hard Fault exception occurs */
 
  while (1)
 
  {
 
  }
 
}
 
 
/**
 
  * @brief  This function handles Memory Manage exception.
 
  * @param  None
 
  * @retval None
 
  */
 
void MemManage_Handler(void)
 
{
 
  /* Go to infinite loop when Memory Manage exception occurs */
 
  while (1)
 
  {
 
  }
 
}
 
 
/**
 
  * @brief  This function handles Bus Fault exception.
 
  * @param  None
 
  * @retval None
 
  */
 
void BusFault_Handler(void)
 
{
 
  /* Go to infinite loop when Bus Fault exception occurs */
 
  while (1)
 
  {
 
  }
 
}
 
 
/**
 
  * @brief  This function handles Usage Fault exception.
 
  * @param  None
 
  * @retval None
 
  */
 
void UsageFault_Handler(void)
 
{
 
  /* Go to infinite loop when Usage Fault exception occurs */
 
  while (1)
 
  {
 
  }
 
}
 
 
/**
 
  * @brief  This function handles SVCall exception.
 
  * @param  None
 
  * @retval None
 
  */
 
void SVC_Handler(void)
 
{
 
}
 
 
/**
 
  * @brief  This function handles Debug Monitor exception.
 
  * @param  None
 
  * @retval None
 
  */
 
void DebugMon_Handler(void)
 
{
 
}
 
 
/**
 
  * @brief  This function handles PendSVC exception.
 
  * @param  None
 
  * @retval None
 
  */
 
void PendSV_Handler(void)
 
{
 
}
 
 
/**
 
  * @brief  This function handles SysTick Handler.
 
  * @param  None
 
  * @retval None
 
  */
 
void SysTick_Handler(void)
 
{
 
  TimingDelay_Decrement();
 
}
 
 
/******************************************************************************/
 
/*                 STM32L1xx Peripherals Interrupt Handlers                   */
 
/*  Add here the Interrupt Handler for the used peripheral(s) (PPP), for the  */
 
/*  available peripheral interrupt handler's name please refer to the startup */
 
/*  file (startup_stm32l1xx_xx.s).                                            */
 
/******************************************************************************/
 
 
/**
 
  * @brief  This function handles PPP interrupt request.
 
  * @param  None
 
  * @retval None
 
  */
 
/*void PPP_IRQHandler(void)
 
{
 
}*/
 
 
/**
 
  * @}
 
  */ 
 
 
 
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
stm32l1xx_it.h
Show inline comments
 
new file 100644
 
/**
 
  ******************************************************************************
 
  * @file    stm32l1xx_it.h 
 
  * @author  MCD Application Team
 
  * @version V1.0.0
 
  * @date    29-July-2013
 
  * @brief   This file contains the headers of the interrupt handlers.
 
  ******************************************************************************
 
  * @attention
 
  *
 
  * <h2><center>&copy; COPYRIGHT 2013 STMicroelectronics</center></h2>
 
  *
 
  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
 
  * You may not use this file except in compliance with the License.
 
  * You may obtain a copy of the License at:
 
  *
 
  *        http://www.st.com/software_license_agreement_liberty_v2
 
  *
 
  * Unless required by applicable law or agreed to in writing, software 
 
  * distributed under the License is distributed on an "AS IS" BASIS, 
 
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
  * See the License for the specific language governing permissions and
 
  * limitations under the License.
 
  *
 
  ******************************************************************************
 
  */
 
 
/* Define to prevent recursive inclusion -------------------------------------*/
 
#ifndef __STM32L1xx_IT_H
 
#define __STM32L1xx_IT_H
 
 
#ifdef __cplusplus
 
 extern "C" {
 
#endif 
 
 
/* Includes ------------------------------------------------------------------*/
 
#include "stm32l1xx.h"
 
 
/* Exported types ------------------------------------------------------------*/
 
/* Exported constants --------------------------------------------------------*/
 
/* Exported macro ------------------------------------------------------------*/
 
/* Exported functions ------------------------------------------------------- */
 
 
void NMI_Handler(void);
 
void HardFault_Handler(void);
 
void MemManage_Handler(void);
 
void BusFault_Handler(void);
 
void UsageFault_Handler(void);
 
void SVC_Handler(void);
 
void DebugMon_Handler(void);
 
void PendSV_Handler(void);
 
void SysTick_Handler(void);
 
 
#ifdef __cplusplus
 
}
 
#endif
 
 
#endif /* __STM32L1xx_IT_H */
 
 
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
system_stm32l1xx.c
Show inline comments
 
new file 100644
 
/**
 
  ******************************************************************************
 
  * @file    system_stm32l1xx.c
 
  * @author  MCD Application Team
 
  * @version V1.0.0
 
  * @date    29-July-2013
 
  * @brief   CMSIS Cortex-M3 Device Peripheral Access Layer System Source File.
 
  *          This file contains the system clock configuration for STM32L1xx Ultra
 
  *          Low power devices, and is generated by the clock configuration 
 
  *          tool STM32L1xx_Clock_Configuration_V1.1.0.xls
 
  *             
 
  * 1.  This file provides two functions and one global variable to be called from 
 
  *     user application:
 
  *      - SystemInit(): Setups the system clock (System clock source, PLL Multiplier
 
  *                      and Divider factors, AHB/APBx prescalers and Flash settings),
 
  *                      depending on the configuration made in the clock xls tool. 
 
  *                      This function is called at startup just after reset and 
 
  *                      before branch to main program. This call is made inside
 
  *                      the "startup_stm32l1xx_xx.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.   
 
  *      
 
  * 2. After each device reset the MSI (2.1 MHz Range) is used as system clock source.
 
  *    Then SystemInit() function is called, in "startup_stm32l1xx_xx.s" file, to
 
  *    configure the system clock before to branch to main program.    
 
  *    
 
  * 3. If the system clock source selected by user fails to startup, the SystemInit()
 
  *    function will do nothing and MSI still used as system clock source. User can 
 
  *    add some code to deal with this issue inside the SetSysClock() function.       
 
  * 
 
  * 4. The default value of HSE crystal is set to 8MHz, refer to "HSE_VALUE" define
 
  *    in "stm32l1xx.h" file. When HSE is used as system clock source, directly or
 
  *    through PLL, and you are using different crystal you have to adapt the HSE
 
  *    value to your own configuration.
 
  * 
 
  * 5. This file configures the system clock as follows:  
 
  *=============================================================================
 
  *                         System Clock Configuration
 
  *=============================================================================
 
  *        System Clock source          | PLL(HSI)
 
  *----------------------------------------------------------------------------- 
 
  *        SYSCLK                       | 32000000 Hz
 
  *----------------------------------------------------------------------------- 
 
  *        HCLK                         | 32000000 Hz
 
  *----------------------------------------------------------------------------- 
 
  *        AHB Prescaler                | 1
 
  *----------------------------------------------------------------------------- 
 
  *        APB1 Prescaler               | 1
 
  *----------------------------------------------------------------------------- 
 
  *        APB2 Prescaler               | 1
 
  *----------------------------------------------------------------------------- 
 
  *        HSE Frequency                | 8000000 Hz
 
  *----------------------------------------------------------------------------- 
 
  *        PLL DIV                      | 2
 
  *----------------------------------------------------------------------------- 
 
  *        PLL MUL                      | 4
 
  *----------------------------------------------------------------------------- 
 
  *        VDD                          | 3.3 V
 
  *----------------------------------------------------------------------------- 
 
  *        Vcore                        | 1.8 V (Range 1)
 
  *----------------------------------------------------------------------------- 
 
  *        Flash Latency                | 1 WS
 
  *----------------------------------------------------------------------------- 
 
  *        Require 48MHz for USB clock  | Disabled
 
  *----------------------------------------------------------------------------- 
 
  *=============================================================================
 
  ******************************************************************************
 
  * @attention
 
  *
 
  * <h2><center>&copy; COPYRIGHT 2013 STMicroelectronics</center></h2>
 
  *
 
  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
 
  * You may not use this file except in compliance with the License.
 
  * You may obtain a copy of the License at:
 
  *
 
  *        http://www.st.com/software_license_agreement_liberty_v2
 
  *
 
  * Unless required by applicable law or agreed to in writing, software 
 
  * distributed under the License is distributed on an "AS IS" BASIS, 
 
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
  * See the License for the specific language governing permissions and
 
  * limitations under the License.
 
  *
 
  ******************************************************************************
 
  */ 
 
 
/** @addtogroup CMSIS
 
  * @{
 
  */
 
 
/** @addtogroup stm32l1xx_system
 
  * @{
 
  */  
 
  
 
/** @addtogroup STM32L1xx_System_Private_Includes
 
  * @{
 
  */
 
 
#include "stm32l1xx.h"
 
 
/**
 
  * @}
 
  */
 
 
/** @addtogroup STM32L1xx_System_Private_TypesDefinitions
 
  * @{
 
  */
 
 
/**
 
  * @}
 
  */
 
 
/** @addtogroup STM32L1xx_System_Private_Defines
 
  * @{
 
  */
 
 
/*!< Uncomment the following line if you need to relocate your vector Table in
 
     Internal SRAM. */ 
 
/* #define VECT_TAB_SRAM */
 
#define VECT_TAB_OFFSET  0x0 /*!< Vector Table base offset field. 
 
                                  This value must be a multiple of 0x200. */
 
/**
 
  * @}
 
  */
 
 
/** @addtogroup STM32L1xx_System_Private_Macros
 
  * @{
 
  */
 
 
/**
 
  * @}
 
  */
 
 
/** @addtogroup STM32L1xx_System_Private_Variables
 
  * @{
 
  */
 
uint32_t SystemCoreClock    = 32000000;
 
__I uint8_t PLLMulTable[9] = {3, 4, 6, 8, 12, 16, 24, 32, 48};
 
__I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9};
 
 
/**
 
  * @}
 
  */
 
 
/** @addtogroup STM32L1xx_System_Private_FunctionPrototypes
 
  * @{
 
  */
 
 
static void SetSysClock(void);
 
 
/**
 
  * @}
 
  */
 
 
/** @addtogroup STM32L1xx_System_Private_Functions
 
  * @{
 
  */
 
 
/**
 
  * @brief  Setup the microcontroller system.
 
  *         Initialize the Embedded Flash Interface, the PLL and update the 
 
  *         SystemCoreClock variable.
 
  * @param  None
 
  * @retval None
 
  */
 
void SystemInit (void)
 
{
 
  /*!< Set MSION bit */
 
  RCC->CR |= (uint32_t)0x00000100;
 
 
  /*!< Reset SW[1:0], HPRE[3:0], PPRE1[2:0], PPRE2[2:0], MCOSEL[2:0] and MCOPRE[2:0] bits */
 
  RCC->CFGR &= (uint32_t)0x88FFC00C;
 
  
 
  /*!< Reset HSION, HSEON, CSSON and PLLON bits */
 
  RCC->CR &= (uint32_t)0xEEFEFFFE;
 
 
  /*!< Reset HSEBYP bit */
 
  RCC->CR &= (uint32_t)0xFFFBFFFF;
 
 
  /*!< Reset PLLSRC, PLLMUL[3:0] and PLLDIV[1:0] bits */
 
  RCC->CFGR &= (uint32_t)0xFF02FFFF;
 
 
  /*!< Disable all interrupts */
 
  RCC->CIR = 0x00000000;
 
 
  /* Configure the System clock frequency, AHB/APBx prescalers and Flash settings */
 
  SetSysClock();
 
 
#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
 
}
 
 
/**
 
  * @brief  Update SystemCoreClock 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 MSI, SystemCoreClock will contain the MSI 
 
  *             value as defined by the MSI range.
 
  *                                   
 
  *           - 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 stm32l1xx.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 stm32l1xx.h file (default value
 
  *              8 MHz), 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, pllmul = 0, plldiv = 0, pllsource = 0, msirange = 0;
 
 
  /* Get SYSCLK source -------------------------------------------------------*/
 
  tmp = RCC->CFGR & RCC_CFGR_SWS;
 
  
 
  switch (tmp)
 
  {
 
    case 0x00:  /* MSI used as system clock */
 
      msirange = (RCC->ICSCR & RCC_ICSCR_MSIRANGE) >> 13;
 
      SystemCoreClock = (32768 * (1 << (msirange + 1)));
 
      break;
 
    case 0x04:  /* HSI used as system clock */
 
      SystemCoreClock = HSI_VALUE;
 
      break;
 
    case 0x08:  /* HSE used as system clock */
 
      SystemCoreClock = HSE_VALUE;
 
      break;
 
    case 0x0C:  /* PLL used as system clock */
 
      /* Get PLL clock source and multiplication factor ----------------------*/
 
      pllmul = RCC->CFGR & RCC_CFGR_PLLMUL;
 
      plldiv = RCC->CFGR & RCC_CFGR_PLLDIV;
 
      pllmul = PLLMulTable[(pllmul >> 18)];
 
      plldiv = (plldiv >> 22) + 1;
 
      
 
      pllsource = RCC->CFGR & RCC_CFGR_PLLSRC;
 
 
      if (pllsource == 0x00)
 
      {
 
        /* HSI oscillator clock selected as PLL clock entry */
 
        SystemCoreClock = (((HSI_VALUE) * pllmul) / plldiv);
 
      }
 
      else
 
      {
 
        /* HSE selected as PLL clock entry */
 
        SystemCoreClock = (((HSE_VALUE) * pllmul) / plldiv);
 
      }
 
      break;
 
    default: /* MSI used as system clock */
 
      msirange = (RCC->ICSCR & RCC_ICSCR_MSIRANGE) >> 13;
 
      SystemCoreClock = (32768 * (1 << (msirange + 1)));
 
      break;
 
  }
 
  /* Compute HCLK clock frequency --------------------------------------------*/
 
  /* Get HCLK prescaler */
 
  tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)];
 
  /* HCLK clock frequency */
 
  SystemCoreClock >>= tmp;
 
}
 
 
/**
 
  * @brief  Configures the System clock frequency, 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
 
  */
 
static void SetSysClock(void)
 
{
 
  __IO uint32_t StartUpCounter = 0, HSIStatus = 0;
 
  
 
  /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/
 
  /* Enable HSI */
 
  RCC->CR |= ((uint32_t)RCC_CR_HSION);
 
 
 
  /* Wait till HSI is ready and if Time out is reached exit */
 
  do
 
  {
 
    HSIStatus = RCC->CR & RCC_CR_HSIRDY;
 
  } while((HSIStatus == 0) && (StartUpCounter != HSI_STARTUP_TIMEOUT));
 
 
  if ((RCC->CR & RCC_CR_HSIRDY) != RESET)
 
  {
 
    HSIStatus = (uint32_t)0x01;
 
  }
 
  else
 
  {
 
    HSIStatus = (uint32_t)0x00;
 
  }
 
    
 
  if (HSIStatus == (uint32_t)0x01)
 
  {
 
    /* Enable 64-bit access */
 
    FLASH->ACR |= FLASH_ACR_ACC64;
 
    
 
    /* Enable Prefetch Buffer */
 
    FLASH->ACR |= FLASH_ACR_PRFTEN;
 
 
    /* Flash 1 wait state */
 
    FLASH->ACR |= FLASH_ACR_LATENCY;
 
    
 
 
    /* Power enable */
 
    RCC->APB1ENR |= RCC_APB1ENR_PWREN;
 
  
 
    /* Select the Voltage Range 1 (1.8 V) */
 
    PWR->CR = PWR_CR_VOS_0;
 
  
 
  
 
    /* Wait Until the Voltage Regulator is ready */
 
    while((PWR->CSR & PWR_CSR_VOSF) != RESET)
 
    {
 
    }
 
      
 
    /* HCLK = SYSCLK /1*/
 
    RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;
 
  
 
    /* PCLK2 = HCLK /1*/
 
    RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;
 
    
 
    /* PCLK1 = HCLK /1*/
 
    RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV1;
 
    
 
    /*  PLL configuration */
 
    RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLMUL |
 
                                        RCC_CFGR_PLLDIV));
 
    RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSI | RCC_CFGR_PLLMUL4 | RCC_CFGR_PLLDIV2);
 
 
    /* Enable PLL */
 
    RCC->CR |= RCC_CR_PLLON;
 
 
    /* Wait till PLL is ready */
 
    while((RCC->CR & RCC_CR_PLLRDY) == 0)
 
    {
 
    }
 
        
 
    /* Select PLL as system clock source */
 
    RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
 
    RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;
 
 
    /* Wait till PLL is used as system clock source */
 
    while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)RCC_CFGR_SWS_PLL)
 
    {
 
    }
 
  }
 
  else
 
  {
 
    /* If HSI fails to start-up, the application will have wrong clock
 
       configuration. User can add here some code to deal with this error */
 
  }
 
}
 
 
/**
 
  * @}
 
  */
 
 
/**
 
  * @}
 
  */
 
 
/**
 
  * @}
 
  */
 
 
/******************* (C) COPYRIGHT 2013 STMicroelectronics *****END OF FILE****/
0 comments (0 inline, 0 general)