博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【STM32+FPGA+FSMC】31,FSMC熟练掌握;KEIL5生成bin文件;SDRAM的使用;IAP检验码 2019年04月10日
阅读量:3890 次
发布时间:2019-05-23

本文共 2047 字,大约阅读时间需要 6 分钟。

1,quartus的编译文件不能带中文,altera自带PLL,RAM的IP核

1-1,PLL参数:inputClk=25M,outC0=100M

1-2,RAM:1-PORT参数:input data[15:0],address[7:0],output_q[15:0]

1-3,STM32显示的原理图是DB0-15,AB16-23.所以FSMC既可以选择复用模式,也可以选择线独立模式

STM32 的IO口对应关系

1-4,FMC 灵活的的存储控制器,用于驱动SRAM,NOR FLASH,NAND FLASH,SDRAM。

STM32的配置选择MUXED NOR FLASH, FMC_NORSRAM_BANK1;此时FPGA==NOR FLASH

1-5,店家例程竟然给了配置模式
    

1-6,关于地址的使用,为了增加寻址空间,可以对数据线进行复用。

在icore4中,可以实现最大寻址空间为8+16=24,

即2^24的寻址空间

转自 

STM32的FSMC支持数据与地址线复用或非复用两种模式

非复用模式:16位数据线及26位地址线分开始用。推荐在144脚及以上的STM32产品上使用该模式。

复用模式:低16位数据/地址线复用。在该模式下,推荐使用地址锁存器以区分数据与地址。

若不使用锁存器:当NADV为低时,ADx(x=0…15)上出现地址信号Ax,当NADV变高时,ADx上出现数据信号Dx。

若使用锁存器:可同时在ADx上得到Ax和Dx。

FSMC中未使用的数据线或地址线可配置为GPIO

对于16位宽度的外部存储器,FSMC将在内部使用HADDR[25:1]产生外部存储器的地址FSMC_A[24:0]。因此,实际的访问地址为右移一位之后的地址。

//由于内部AHB总线的地址HADDR与FSMC总线地址存在一定的映射关系。在进行地址读写操作时,HADDR[0]并没有用到,相当于地址右移了1位#define fpga_write(offset,data)	*((volatile unsigned short int *)(0x60000000 + (offset << 1))) = data   //uint32 data  #define fpga_read(offset)	*((volatile unsigned short int *)(0x60000000 + (offset << 1)))

经过大量测试,当发送地址超过28位时,会导致单片机卡死

1-7:写命令到指定地址;指定地址不能超过25位;

单个地址的储存数据是低16位的,高16位丢弃,不会被写入到上一个或者下一个地址里面

case 0x11:  //写命令到指定地址;指定地址不能超过28位;单个地址的储存数据是低16位的,高16位丢弃,不会被写入到上一个或者下一个地址里面{uint32_t addr,cmd;addr=(UART_Rx_Buff[1]<<24)|(UART_Rx_Buff[2]<<16)|(UART_Rx_Buff[3]<<8)|UART_Rx_Buff[4];cmd=(UART_Rx_Buff[5]<<24)|(UART_Rx_Buff[6]<<16)|(UART_Rx_Buff[7]<<8)|UART_Rx_Buff[8];//此处的高16位无效fpga_write(addr,cmd);HAL_Delay(10);cmd=fpga_read(addr);printf("写入的数据=%d\r\n",cmd);break;	}

当addr&0xFE 00 00 00 !=0X0000 0000的时候卡死,即发生地址的高于或等于26位不能为1

0x 01 FF FFFF 单片机可以读取写入

0x 02 00 0000 单片机不能读取写入

2,

1-8,复用模式

 

2,KEIL5生成bin文件

使用相对地址,非常棒

D:\Keil_v5\ARM\ARMCC\bin\fromelf.exe --bin --output=@L.bin !L

$K\ARM\ARMCC\bin\fromelf.exe --bin --output=@L.bin !L 

 

3,IAP检验码的说明

多组测试说明 当IROM1:0X1020 0000 时候,UART_Rx_Buff[7]==0x10;UART_Rx_Buff[6]==0x20;

所以检校栈顶地址 if(UART_Rx_Buff[7]==0x08)

4,NORFLASH目前看和PSRAM没有太大区别。

那么作为数据采集系统可以这样传输数据了,

FPGA作为NOR FLASH,进行数据采集,然后将数据以特定的顺序保存在NOR FLASH里面,比如占据0--N个数据地址。

STM32 通过实时读取NOR FLASH的数据来显示。

STM32发送控制命令给FPGA,可以写入命令到N+1,FPGA实时对地址为N+1的命令进行解析

 

 

转载地址:http://havhn.baihongyu.com/

你可能感兴趣的文章
C语言简单实现日志功能的的题目
查看>>
C 实现的 日志模块
查看>>
C语言实现简单的分级别写日志程序
查看>>
深入理解HTTP Session
查看>>
理解TCP中的三次握手
查看>>
linux session 浅谈
查看>>
Session
查看>>
Emacs 中文学习手册-1
查看>>
Emacs学习笔记(1):初学者的学习计划
查看>>
Emacs学习笔记(13):在Emacs中打开pdf
查看>>
Emacs学习笔记(14):在Emacs中使用git
查看>>
Emacs for vim Users---from http://www.crazyshell.org/blog/
查看>>
静态库和动态库链接那些事--http://www.crazyshell.org/blog/?p=50
查看>>
使用samba实现linux,windows间文件共享
查看>>
多线程调试必杀技 - GDB的non-stop模式
查看>>
一年成为Emacs高手(像神一样使用编辑器) .--http://blog.csdn.net/redguardtoo/article/details/7222501
查看>>
GNU make 指南
查看>>
配置 vim
查看>>
CentOS6.3 minimal SSH中文显示
查看>>
centos 安装emacs24
查看>>