STM32
直播中

jefljel

8年用户 1043经验值
擅长:20762
私信 关注
[问答]

如何利用STM32F407去驱动外部SRAM呢

如何利用STM32F407去驱动外部SRAM呢?怎样去检查SRAM内容是否正确呢?

回帖(1)

李秀华

2021-12-1 09:07:32
需要驱动的SRAM型号为IS61LV25616AL,性价比比51216的高很多


  • 配置Cubemx





    这几个时序比较关键,可以按照手册来计算,我用下来这几个数值比较合适。
  • 然后就没有然后了,生成代码就可以用了。。。
  • 检查SRAM内容是否正确


uint8_t bsp_TestExtSRAM(void)
{
        uint32_t i;
        uint32_t *pSRAM;
        uint8_t *pBytes;
        uint32_t err;
        const uint8_t ByteBuf[4] = {0x55, 0xA5, 0x5A, 0xAA};
       
        /* 写SRAM */
        pSRAM = (uint32_t *)EXT_SRAM_ADDR;
        for (i = 0; i < EXT_SRAM_SIZE / 4; i++)
        {
                *pSRAM++ = i;
        }
       
        /* 读SRAM */
        err = 0;
        pSRAM = (uint32_t *)EXT_SRAM_ADDR;
        for (i = 0; i < EXT_SRAM_SIZE / 4; i++)
        {
                if (*pSRAM++ != i)
                {
                        err++;
                }
        }
        printf("SDRAM check round 1 error = %dn", err);
        if (err > 0)
        {
                return (4 * err);
        }


        #if 1
        /* 对SRAM 的数据求反并写入 */
        pSRAM = (uint32_t *)EXT_SRAM_ADDR;
        for (i = 0; i < EXT_SRAM_SIZE/4; i++)
        {
                *pSRAM = ~*pSRAM;
                pSRAM++;
        }


        /* 再次比较SRAM的数据 */
        err = 0;
        pSRAM = (uint32_t *)EXT_SRAM_ADDR;
        for (i = 0; i         {
                if (*pSRAM++ != (~i))
                {
                        err++;
                }
        }


        printf("SDRAM check round 2 error = %dn", err);
        if (err>0)
        {
        return (4 * err);
        }
        #endif


        /* 测试按字节方式访问, 目的是验证 FSMC_NBL0 、 FSMC_NBL1 口线 */
        pBytes = (uint8_t *)EXT_SRAM_ADDR;
        for (i = 0; i < sizeof(ByteBuf); i++)
        {
                *pBytes++ = ByteBuf;
        }


        /* 比较SRAM的数据 */
        err = 0;
        pBytes = (uint8_t *)EXT_SRAM_ADDR;
        for (i = 0; i < sizeof(ByteBuf); i++)
        {
                if (*pBytes++ != ByteBuf)
                {
                        err++;
                }
        }
        printf("SDRAM check round 3 error = %dn", err);
        if (err > 0)
        {
                return err;
        }
        return 0;
}


函数返回值是错误的个数,正常应该返回0
ENJOY!
举报

更多回帖

×
20
完善资料,
赚取积分