stm32跑ucos-ii 2.86,外扩了sram,驱动正常了,但分散加载文件里只要把外部的sram想用起来,程度就死掉,无法运行,请问有人遇到改问题吗?怎么搞?
以下是我的手动分配的分散加载文件,把 RW_RAM1 0x60000000 0x00010000 ; RW data SRAM
{
; app.o (+ZI +RW)
.ANY (+RW +ZI)
}
增加进来就是使用外部sram吧,但是只要这样程序根本无法运行,不用sram,即没有以上这段程序则正常。
以下是完整的scatter
; Filename : STM32_Flash.scat
;******************************************************************************
LR_IROM1 0x08002000 0x0007e000 ;; Load region
{
ER_IROM1 0x08002000 0x08020000
{
vectors.o (VECT, +First)
init.o (INIT)
* (+RO)
}
RW_IRAM1 0x20000000 0x0000C500 ;20K
{
;* (+RW,+ZI)
.ANY (+RW +ZI)
}
RW_RAM1 0x60000000 0x00010000 ; RW data SRAM
{
; app.o (+ZI +RW)
.ANY (+RW +ZI)
}
;; The following declarations select the "two region model" ;
;; A default __user_initial_stackheap() will be used ;
ARM_LIB_HEAP 0x2000C500 EMPTY 0x00002000 {} ; 8K
ARM_LIB_STACK 0x2000FE00 EMPTY -0x00001000 {} ; 8K
}
与客户联系,问题解决。
ucos运行前,先初始化FSMC总线
可以结贴。
没错了,昨晚整了半天,搞定了,就是在启动文件里进入main前进行fsmc总线的正确初始化配置,然后修改scatter就可以了。
楼主,能不能留个联系方式或您加我QQ:66614955?我也遇到了这个问题,想请教,
我初始化了FSMC的,在vector.s这个文件里面,我贴出来吧
; Enable FSMC clock
LDR R0,= 0x00000114
LDR R1,= 0x40021014
STR R0,[R1]
; Enable GPIOD, GPIOE, GPIOF and GPIOG clocks
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
LDR R1,= 0x40011C00
STR R0,[R1]
LDR R0,= 0xBBBB4444
LDR R1,= 0x40011C04
STR R0,[R1]
LDR R0,= 0x44BBBBBB
LDR R1,= 0x40012000
STR R0,[R1]
LDR R0,= 0x44444B44
LDR R1,= 0x40012004
STR R0,[R1]
; FSMC Configuration
; Enable FSMC Bank1_SRAM Bank
LDR R0,= 0x00001011
LDR R1,= 0xA0000010
STR R0,[R1]
LDR R0,= 0x00000100
LDR R1,= 0xA0000014
STR R0,[R1]
我的分散加载文件是这样的:
LR_IROM1 0x08000000 0x00020000 ;; Load region
{
ER_IROM1 0x08000000 0x08020000
{
vectors.o (VECT, +First)
init.o (INIT)
* (+RO)
}
RW_RAM1 0x68000000 0x00080000 { ; RW data
.ANY (+RW +ZI)
}
RW_IRAM1 0x20000000 0x0000C000 {
.ANY (+RW +ZI)
} ;; The following declarations select the "two region model" ;
;; A default __user_initial_stackheap() will be used ;
ARM_LIB_HEAP 0x68070000 EMPTY 0x00000200 {}
ARM_LIB_STACK 0x68080000 EMPTY -0x00000200 {}
}
但是为什么我的一跑就死呢?我用的是ucos2.86,如果我不跑外部的sram就可以正常工作
vector.s里的这个初始化文件一定要测试,先测试下确保是否驱动正常。如果驱动都不正常,肯定会死。
QQ:57031680