STM32外扩RAM做变量定义与内部RAM做堆栈的设置
说明:当STM32上运行UC/OSII和UC/GUI时,STM32内部自带的RAM可能不够用,这就需要STM32的外扩RAM功能,内部RAM作为中断服务程序的堆栈使用,而外部RAM 作为存放临时变量的地方和UC/OSII的任务切换用堆栈,具体配置如下:
1.修改启动代码
我使用的开发板外扩了512K字节的RAM,分配的地址为BANK1的第3个区,即起始地址为0x68000000,大小为0x80000
启动代码如下:
;******************** (C) COPYRIGHT 2009 STMicroelectronics ********************
;* File Name          : startup_stm32f10x_hd.s
;* Author            : MCD Application Team
;* Version : V3.1.0
;
* Date              : 06/19/2009
;* Description : STM32F10x High Density Devices vector table for RVMDK
;* toolchain.
;*                      This module performs:
;* - Set the initial SP
;*                      - Set the initial PC == Reset_Handler
;*                      - Set the vector table entries with the exceptions ISR address
;*                      - Configure external SRAM mounted on STM3210E-EV AL board
;*                        to be used as data memory (optional, to be enabled by user)
;* - Branches to __main in the C library (which eventually
;*                        calls main()).
;
* After Reset the CortexM3 processor is in Thread mode,
;*                      priority is Privileged, and the Stack is set to Main.
;* <<< Use Configuration Wizard in Context Menu >>>
;****************************************************************************** *
; THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
; WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SA VE TIME.
; AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
; INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
; CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
;
INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
;****************************************************************************** *
; If you need to use external SRAM mounted on STM3210E-EV AL board as data memory,
; change the following define value to '1' (or choose ENABLE in Configuration Wizard window) ;//  <o>  External SRAM Configuration <0=> DISABLE <1=> ENABLE
DATA_IN_ExtSRAM  EQU    1
; Amount of memory (in bytes) allocated for Stack
; Tailor this value to your application needs
;// <h> Stack Configuration
;// <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
;// </h>
Stack_Size      EQU    0x00000400
AREA    STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem        SPACE  Stack_Size
;__initial_sp
; If you need to use external SRAM mounted on STM3210E-EV AL board as data memory
; and internal SRAM for Stack, uncomment the following line and comment the line above
__initial_sp EQU 0x20000000 + Stack_Size ; "Use MicroLIB" must be checked in
; the Project->Options->Target window
; Amount of memory (in bytes) allocated for Heap
; Tailor this value to your application needs
;// <h> Heap Configuration
;//  <o>  Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
;
// </h>
Heap_Size        EQU    0x00000400
AREA HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem        SPACE  Heap_Size
__heap_limit
THUMB
PRESERVE8
; Vector Table Mapped to Address 0 at Reset
AREA    RESET, DATA, READONLY
EXPORT __Vectors
EXPORT __Vectors_End
EXPORT __Vectors_Size
__Vectors DCD __initial_sp ; Top of Stack
DCD Reset_Handler ; Reset Handler
DCD NMI_Handler ; NMI Handler
DCD HardFault_Handler ; Hard Fault Handler
DCD MemManage_Handler ; MPU Fault Handler
DCD BusFault_Handler ; Bus Fault Handler
DCD UsageFault_Handler ; Usage Fault Handler
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD SVC_Handler ; SVCall Handler
DCD    DebugMon_Handler          ; Debug Monitor Handler
DCD 0 ; Reserved
DCD PendSV_Handler ; PendSV Handler
DCD SysTick_Handler ; SysTick Handler
; External Interrupts
DCD WWDG_IRQHandler ; Window Watchdog
DCD PVD_IRQHandler ; PVD through EXTI Line detect
DCD TAMPER_IRQHandler ; Tamper
DCD RTC_IRQHandler ; RTC
DCD FLASH_IRQHandler ; Flash
DCD RCC_IRQHandler ; RCC
DCD EXTI0_IRQHandler ; EXTI Line 0
DCD EXTI1_IRQHandler ; EXTI Line 1
DCD EXTI2_IRQHandler ; EXTI Line 2
DCD EXTI3_IRQHandler ; EXTI Line 3
DCD EXTI4_IRQHandler ; EXTI Line 4
DCD    DMA1_Channel1_IRQHandler  ; DMA1 Channel 1
DCD    DMA1_Channel2_IRQHandler  ; DMA1 Channel 2
DCD    DMA1_Channel3_IRQHandler  ; DMA1 Channel 3
DCD    DMA1_Channel4_IRQHandler  ; DMA1 Channel 4
DCD    DMA1_Channel5_IRQHandler  ; DMA1 Channel 5
DCD    DMA1_Channel6_IRQHandler  ; DMA1 Channel 6
DCD    DMA1_Channel7_IRQHandler  ; DMA1 Channel 7
DCD ADC1_2_IRQHandler ; ADC1 & ADC2
DCD    USB_HP_CAN1_TX_IRQHandler  ; USB High Priority or CAN1 TX
DCD USB_LP_CAN1_RX0_IRQHandler ; USB Low Priority or CAN1 RX0
DCD CAN1_RX1_IRQHandler ; CAN1 RX1
DCD CAN1_SCE_IRQHandler ; CAN1 SCE
DCD EXTI9_5_IRQHandler ; EXTI Line 9..5
DCD TIM1_BRK_IRQHandler ; TIM1 Break
DCD TIM1_UP_IRQHandler ; TIM1 Update
DCD    TIM1_TRG_COM_IRQHandler  ; TIM1 Trigger and Commutation
DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare
DCD TIM2_IRQHandler ; TIM2
DCD TIM3_IRQHandler ; TIM3
DCD TIM4_IRQHandler ; TIM4
DCD I2C1_EV_IRQHandler ; I2C1 Event
DCD I2C1_ER_IRQHandler ; I2C1 Error
DCD I2C2_EV_IRQHandler ; I2C2 Event
DCD I2C2_ER_IRQHandler ; I2C2 Error
DCD SPI1_IRQHandler ; SPI1
DCD SPI2_IRQHandler ; SPI2
DCD USART1_IRQHandler ; USART1
DCD USART2_IRQHandler ; USART2
DCD USART3_IRQHandler ; USART3
DCD EXTI15_10_IRQHandler ; EXTI Line 15..10
DCD RTCAlarm_IRQHandler ; RTC Alarm through EXTI Line
DCD USBWakeUp_IRQHandler ; USB Wakeup from suspend
DCD TIM8_BRK_IRQHandler ; TIM8 Break
DCD TIM8_UP_IRQHandler ; TIM8 Update
DCD    TIM8_TRG_COM_IRQHandler  ; TIM8 Trigger and Commutation
DCD TIM8_CC_IRQHandler ; TIM8 Capture Compare
DCD ADC3_IRQHandler ; ADC3
DCD FSMC_IRQHandler ; FSMC
DCD SDIO_IRQHandler ; SDIO
DCD TIM5_IRQHandler ; TIM5
DCD SPI3_IRQHandler ; SPI3
DCD UART4_IRQHandler ; UART4
DCD UART5_IRQHandler ; UART5
DCD TIM6_IRQHandler ; TIM6
DCD TIM7_IRQHandler ; TIM7
DCD    DMA2_Channel1_IRQHandler  ; DMA2 Channel1
DCD    DMA2_Channel2_IRQHandler  ; DMA2 Channel2
DCD    DMA2_Channel3_IRQHandler  ; DMA2 Channel3
DCD    DMA2_Channel4_5_IRQHandler ; DMA2 Channel4 & Channel5 __Vectors_End
__Vectors_Size EQU __Vectors_End - __Vectors
AREA    |.text|, CODE, READONLY
; Reset handler routine
Reset_Handler    PROC
EXPORT Reset_Handler
IF DATA_IN_ExtSRAM == 1
; FSMC Bank1 NOR/SRAM3 is used for the STM3210E-EV AL, if another Bank is ; required, then adjust the Register Addresses
; Enable FSMC clock
LDR R0,= 0x00000114
LDR R1,= 0x40021014
STR R0,[R1]
; Enable GPIOD, GPIOE, GPIOF and GPIOG clocks
eval是做什么的LDR R0,= 0x000001E0
LDR R1,= 0x40021018
STR R0,[R1]
; SRAM Data lines, NOE and NWE configuration
; SRAM Address lines configuration
; NOE and NWE configuration
; NE3 configuration
; NBL0, NBL1 configuration
LDR R0,= 0x44BB44BB
LDR R1,= 0x40011400
STR R0,[R1]
LDR R0,= 0xBBBBBBBB
LDR R1,= 0x40011404
STR R0,[R1]
LDR R0,= 0xB44444BB
LDR R1,= 0x40011800
STR R0,[R1]
LDR R0,= 0xBBBBBBBB
LDR R1,= 0x40011804
STR R0,[R1]
LDR R0,= 0x44BBBBBB

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。