在使用STM32的FSMC的一些体会。。
2014-08-18 23:06
357 查看
刚开始接触感觉似乎很难,真的是云里雾里。但是看了百度百科FMSC介绍以及芯嵌stm32入门视频《基于stm32的FSMC控制LCD的理解》视频终于对FMSC有自己的理解。虽然还有些细节还没有完全吃透,但是学东西就是需要在摸索中前进,停下来就是浪费时间。然后马上拿起板子,下载SRAM的例程运行。好正常运行。下面我们来看看相关的代码吧。
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 这个地址开始存储。这个也可以修改,就要看自己划分的数据空间来定了。
/*神舟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 这个地址开始存储。这个也可以修改,就要看自己划分的数据空间来定了。
相关文章推荐
- 使用XML记录数据的一些体会
- 使用日历控件的一些体会(downmoon)
- STM32 FSMC的使用小细节。
- 使用Vega的一些体会
- stm32使用MDK开发中的一些常见问题
- ASP.net下使用static变量的一些体会
- Neo4j使用时的一些体会
- 谈谈我自己 使用金山卫士的一些体会
- 使用金山卫士的一些体会
- STM32使用FSMC控制sram例程
- 使用日历控件的一些体会(downmoon)
- 关于ASP.NET中使用MasterPage和PageBase页面基类的一些体会
- 关于ASP.NET中使用MasterPage和PageBase页面基类的一些体会
- 实际使用NoSQL——MongoDB的一些体会
- 对RDLC for VS2010使用过程中的一些使用体会
- Resharper使用体会及一些资料
- c# 使用ChartDirector绘图的一些个人体会
- ----------------搜狗云输入法使用的一些体会--------------
- oracle全文索引的创建和使用,以及一些体会
- STM32使用FSMC控制NAND flash 例程