您的位置:首页 > 其它

在使用STM32的FSMC的一些体会。。

2014-08-18 23:06 357 查看
刚开始接触感觉似乎很难,真的是云里雾里。但是看了百度百科FMSC介绍以及芯嵌stm32入门视频《基于stm32的FSMC控制LCD的理解》视频终于对FMSC有自己的理解。虽然还有些细节还没有完全吃透,但是学东西就是需要在摸索中前进,停下来就是浪费时间。然后马上拿起板子,下载SRAM的例程运行。好正常运行。下面我们来看看相关的代码吧。

/*神舟SRAM读写程序相关定义*/
#define BUFFER_SIZE        0x400              /*定义读写BUFFER大小*/
#define WRITE_READ_ADDR    0x8000             /*定义SRAM读写的地址*/
ErrorStatus HSEStartUpStatus;
u16 TxBuffer[BUFFER_SIZE];
u16 RxBuffer[BUFFER_SIZE];
u32 WriteReadStatus = 0, Index = 0;
u8 count=0;
u16 i = 0;
int main(void)
{
Printf_Init();
/*配置与SRAM连接的FSMC BANK1 NOR/SRAM3*/
SRAM_Init();//SRAM初始化
/*将写SRAM的数据BUFFER填充为从0x1234开始的连续递增的一串数据 */
Fill_Buffer(TxBuffer, BUFFER_SIZE, 0x1234);
/*将数据写入到SRAM中。WRITE_READ_ADDR:写入的起始地址*/
SRAM_WriteBuffer(TxBuffer, WRITE_READ_ADDR, BUFFER_SIZE);
/*从SRAM中读回刚写入的数据。WRITE_READ_ADDR:读出数据的起始地址*/
SRAM_ReadBuffer(RxBuffer, WRITE_READ_ADDR, BUFFER_SIZE);
/*判断读回的数据与写入的数据是否一致*/
for (Index = 0x00; ((Index < BUFFER_SIZE) && (WriteReadStatus == 0)); Index++)
{
if (RxBuffer[Index] != TxBuffer[Index])
{
WriteReadStatus = Index + 1;
}
}
printf("\n\r SRAM读写访问程序运行结果: ");
if (WriteReadStatus == 0)
{
printf("\n\r SRAM读写访问成功\n\r");
}
else
{
printf("\n\r SRAM读写访问失败\n\r");
}
while (1)
{
}
}


void SRAM_Init(void)初始化函数的相关配置参数的解释大家可以移步到stm32 FSMC的函数解释,里面写得非常清楚相关配置参数分别对应什么意思。

这里有几个参数需要注意下:

1.#define Bank1_SRAM3_ADDR ((uint32_t)0x68000000) //这个是对应我们选择的bank1的子bank3的地址开始。说明一下bankX分别对应的地址是:

第一块:6000 0000h--63ff ffffh

第二块:6400 0000h--67ff ffffh
第二块:6800 0000h--6bff ffffh
第三块:6c00 0000h--6fff ffffh,而我们初始化FSMC的时候,FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM3;所以定义了这个地址#define Bank1_SRAM3_ADDR ((uint32_t)0x68000000) ,是bank1的子bank3的起始地址。
2.#define BUFFER_SIZE 0x400 /*定义读写BUFFER大小*/

这个是我们自己定义存储空间的大小,这个可以根据自己所存储的数据量适当改变。

3.#define WRITE_READ_ADDR 0x8000 /*定义SRAM读写的地址*/

这个是我们基于读写0x68000000这个地址的偏移地址,数据就是从0x68000000+ 0x8000 这个地址开始存储。这个也可以修改,就要看自己划分的数据空间来定了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: