历史上的今天
今天是:2025年03月17日(星期一)
2020年03月17日 | 在使用STM32的FSMC的一些体会。。
2020-03-17 来源:eefocus
刚开始接触感觉似乎很难,真的是云里雾里。但是看了百度百科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("nr SRAM读写访问程序运行结果: ");
if (WriteReadStatus == 0)
{
printf("nr SRAM读写访问成功nr");
}
else
{
printf("nr SRAM读写访问失败nr");
}
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 这个地址开始存储。这个也可以修改,就要看自己划分的数据空间来定了。
史海拾趣
|
近几年来,高清已经成为众多安防厂家追求的趋势,金融、交通等领域需求的增加也为安防高清日渐上升的地位奠定了基础。那么,究竟是什么原因促进了安防高清的快速发展?是不是所有的安防厂商都可以发展高清产品?百万高清在发展的过程中又遇到了哪些困 ...… 查看全部问答> |
|
1。两片ddr2芯片共用地址,公用cas等信号,可以把两片16bit的ddr2芯片当做一片32bit的ddr2芯片使用 2。调用两个ip core 3。使用同一个IP核,可以节约逻辑资源;使用同一IP核时,可以采用字扩张或位扩展的方式;如果你选用的是Xilinx的芯片,可以 ...… 查看全部问答> |
|
搜索了老帖,但是我却还没解决,在这里在寻求一下,想知道这个一般是什么情况引起的。 我是用uboot下载nk.nb0到30200000运行,没有通过EBOOT,不知道是否是不是这个原因。 在KernelFindMemory函数中, RETAILMSG(1, ...… 查看全部问答> |
|
我移植了UCOS II+UCGUI 3.90A到STM32F103ZE上,并用如下方法建立了一个定时器,结果定时器仅响应一次,请问是什么原因啊? GUI_TIMER_HANDLE g_TimeTimer=NULL; g_TimeTimer=GUI_TIMER_Create((GUI_TIMER_CALLBACK *)RefreshTime,1000,0,0) ...… 查看全部问答> |




