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

来源:互联网 发布:两台mac屏幕共享 编辑:程序博客网 时间:2024/06/13 09:23

刚开始接触感觉似乎很难,真的是云里雾里。但是看了百度百科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 这个地址开始存储。这个也可以修改,就要看自己划分的数据空间来定了。



0 0
原创粉丝点击