普中开源电子分享网

 找回密码
 立即注册
搜索
查看: 3221|回复: 1

STM32F103ZET6(PZ6806L) 外扩SRAM问题

[复制链接]

1

主题

2

帖子

15

积分

新手上路

Rank: 1

积分
15
发表于 2020-3-7 14:16:47 | 显示全部楼层 |阅读模式
1金钱
本人准备用attribute at指令于外部sram初始地址0x68000000定义一个u32类型的a[300]数组,并且将0-299这300个数赋值到a数组中,同时每隔一秒显示到R61509VNLCD上,但是烧写之后数字无法显示。后来我尝试将数组大小减少至a[200],便能正常显示,但是外部SRAM不是有1M吗,为什么才300个4字节的数据就无法显示呢?或者说是不是我attribute指令使用的不正确,希望大神们能帮帮我。
以下是我main函数部分代码:
u32 a[300]  __attribute__((at(0X68000000)));

//外部内存测试(最大支持1M字节内存测试)     
void ExSRAM_Cap_Test(u16 x,u16 y)
{
    u8 writeData = 0xf0, readData;
u16 cap=0;
    u32 addr;

addr = 1024; //从1KB位置开始算起

LCD_ShowString(x,y,239,y+16,16,"ExSRAM Cap:   0KB");

while(1)
{
  FSMC_SRAM_WriteBuffer(&writeData, addr, 1);
  FSMC_SRAM_ReadBuffer(&readData,addr,1);
  
  /* 查看读取到的数据是否跟写入数据一样 */
        if(readData == writeData)
        {
            cap++;
            addr += 1024;//每隔1KB写一个数字????
            readData = 0;
            if(addr > 1024 * 1024) //SRAM容量最大为1MB
            {
                break;
            }   
        }
        else
        {
            break;
        }     
}
LCD_ShowxNum(x+11*8,y,cap,4,16,0);//显示内存容量
printf("SRAM容量为:%dKB\r\n",cap);
}
int main()
{
u8 i=0;
u8 key;
// u8 read_buf[TEXT_LEN];

SysTick_Init(72);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  //中断优先级分组 分2组
LED_Init();
USART1_Init(9600);
TFTLCD_Init();   //LCD初始化
KEY_Init();
FSMC_SRAM_Init();

FRONT_COLOR=BLACK;
LCD_ShowString(10,10,tftlcd_data.width,tftlcd_data.height,16,"PRECHIN STM32F1");
LCD_ShowString(10,30,tftlcd_data.width,tftlcd_data.height,16,"www.prechin.net");
LCD_ShowString(10,50,tftlcd_data.width,tftlcd_data.height,16,"ExSRAM Test");
LCD_ShowString(10,70,tftlcd_data.width,tftlcd_data.height,16,"K_UP:Write   K_DOWN:Read");

FRONT_COLOR=RED;
ExSRAM_Cap_Test(10,110);
// LCD_ShowString(10,130,tftlcd_data.width,tftlcd_data.height,16,"Write:");
// LCD_ShowString(10,150,tftlcd_data.width,tftlcd_data.height,16,"Read :");
for(i=0;i<300;i++)
{
    a[i]=i;
}
while(1)
{
  key=KEY_Scan(0);
  if(key==KEY_UP)
  {
   for(i=0;i<300;i++)
   {
      LCD_ShowxNum(30,290,a[i],6,16,0);
      delay_ms(1000);
   }
  }
  else
   delay_ms(10);
// while(1)
// {
//  key=KEY_Scan(0);
//  if(key==KEY_UP)
//  {
//   FSMC_SRAM_WriteBuffer(text_buf,0,TEXT_LEN);
////   printf("写入的数据是:%s\r\n",text_buf);
//   LCD_ShowString(10+6*8,130,tftlcd_data.width,tftlcd_data.height,16,(u8 *)text_buf);
//  }
//  if(key==KEY_DOWN)
//  {
//   FSMC_SRAM_ReadBuffer(read_buf,0,TEXT_LEN);
////   printf("读取的数据是:%s\r\n",read_buf);
//   LCD_ShowString(10+6*8,150,tftlcd_data.width,tftlcd_data.height,16,read_buf);
//  }
  
  i++;
  if(i%20==0)
  {
   led1=!led1;
  }
  delay_ms(10);
   
}

}


我知道答案 本帖寻求最佳答案回答被采纳后将获得系统奖励10 金钱 , 目前已有1人回答

回复

使用道具 举报

1

主题

2

帖子

15

积分

新手上路

Rank: 1

积分
15
 楼主| 发表于 2020-3-7 14:18:55 | 显示全部楼层
有没有人告诉我当我需要定义一些大数组时应该怎么正确定义?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|普中开源电子分享网 粤ICP备16123577号-2

GMT+8, 2024-4-23 22:55 , Processed in 0.105739 second(s), 30 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表