STM32H743ZG 使用FMC 驱动 SRAM

STM32H743ZG 使用FMC 驱动 SRAM,使用16bit数据,使用IS62WV102416GBLL
先初始化时钟
在这里插入图片描述

在这里插入图片描述
然后初始化FMC在这里插入图片描述
因为片子的NEW1脚没接到SRam上,所以使用两个IO来控制CS1和CS2
在这里插入图片描述
然后编写代码

#define SRAM_CS1(x)     ((x) ? HAL_GPIO_WritePin(SRAM_CS1_GPIO_Port, SRAM_CS1_Pin,GPIO_PIN_SET): HAL_GPIO_WritePin(SRAM_CS1_GPIO_Port, SRAM_CS1_Pin,GPIO_PIN_RESET))
#define SRAM_CS2(x)     ((x) ? HAL_GPIO_WritePin(SRAM_CS2_GPIO_Port, SRAM_CS2_Pin,GPIO_PIN_SET): HAL_GPIO_WritePin(SRAM_CS2_GPIO_Port, SRAM_CS2_Pin,GPIO_PIN_RESET))

#define Bank1_SRAM3_ADDR    ((uint32_t)0x60000000)	

uint32_t i =0;
uint16_t BuffW[1024] = {0};
uint16_t BuffR[1024] = {0};


void drv_dly_10ns(uint32_t delay_time)
{
    uint32_t a = 0;

    while (delay_time--)
    {
        a++;
        a++;
        a++;    
    }
}


//在指定地址(WriteAddr+Bank1_SRAM3_ADDR)开始,连续写入n个字节.
//pBuffer:字节指针
//WriteAddr:要写入的地址
//n:要写入的字节数
void FSMC_SRAM_WriteBuffer16(uint16_t *pBuffer,uint32_t WriteAddr,uint32_t n)
{
    SRAM_CS1(0);
    drv_dly_10ns(4);
	for(;n!=0;n--)
	{
		*(volatile uint16_t*)(Bank1_SRAM3_ADDR+WriteAddr)=*pBuffer;
		WriteAddr+=2;
		pBuffer++;
	}
drv_dly_10ns(1);
    SRAM_CS1(1);
}

//在指定地址((WriteAddr+Bank1_SRAM3_ADDR))开始,连续读出n个字节.
//pBuffer:字节指针
//ReadAddr:要读出的起始地址
//n:要写入的字节数
void FSMC_SRAM_ReadBuffer16(uint16_t *pBuffer,uint32_t ReadAddr,uint32_t n)
{
    SRAM_CS1(0); 
    drv_dly_10ns(4);    
	for(;n!=0;n--)
	{
		*pBuffer++=*(volatile uint16_t*)(Bank1_SRAM3_ADDR+ReadAddr);
		ReadAddr+=2;
	}
    drv_dly_10ns(1);
    SRAM_CS1(1);
}

    for(i=0;i<1024;i++)
    {
       BuffW[i]=i; 
    }
    
    FSMC_SRAM_WriteBuffer16(BuffW,0,1024);
  
    FSMC_SRAM_ReadBuffer16(BuffR,0 ,1024); 

然后看看写入和读出的是不是一样,如果不一样可能是地址和数据的时间设置小了
Timing.AddressSetupTime = 6;
Timing.AddressHoldTime = 0;
Timing.DataSetupTime = 5;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值