打印

STM32的FSMC频率一般能到多少?我测了下怎么只有2MHZ多点呢

[复制链接]
13935|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
alien2006|  楼主 | 2009-4-17 08:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用以下代码做初始化
void LCD_FSMCConfig(void)
{
    FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
    FSMC_NORSRAMTimingInitTypeDef  p;
    /* FSMC_Bank1_NORSRAM1 timing configuration */
    p.FSMC_AddressSetupTime = 0;
    p.FSMC_AddressHoldTime = 0;
    p.FSMC_DataSetupTime = 1;
    p.FSMC_BusTurnAroundDuration = 0;
    p.FSMC_CLKDivision = 0;
    p.FSMC_DataLatency = 0;
    p.FSMC_AccessMode = FSMC_AccessMode_B;
    
    /* FSMC_Bank1_NORSRAM4 configured as follows:
    - Data/Address MUX = Disable
    - Memory Type = SRAM
    - Data Width = 16bit
    - Write Operation = Enable
    - Extended Mode = Disable
    - Asynchronous Wait = Disable */
    FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;
    FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
    FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM;
    FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
    FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
    FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
    FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
    FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
    FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
    FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
    FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
    FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
    FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;
    FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;
    
    FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);  
    
    /* Enable FSMC_Bank1_NORSRAM1 */
    FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);
}
定义一个操作地址
#define FSMC        (*(u16*)((u32)0x60000000))

然后在主程序中
while(1)
{
   FSMC =0xFFFF;
   FSMC = 0x0000;
}
    再用示波器观察D0~D15端口上的波形,观测都周期大约是0.4微秒左右,也就是最高3MHZ的速度。比想象的要低得多得多啊,本来以为72MHZ主频下FSMC最高时钟是36MHZ,再加上一些等待周期什么的怎么着也不会太低吧,这里的p.FSMC_DataSetupTime = 1;其他的都是设置成了0,为什么速度还是这么低呢。这样折算起来操作外部SRAM的时候带宽也就最高6MB/S啊,实在是可怜的很。
   疏忽了,从0XFFFF 到0X00,实际是一个波形周期对应的是2个FSMC操作,就是实际一个FSMC操作周期是0.2微秒,5MHZ左右,不过也是比想象的慢很多
沙发
香水城| | 2009-4-17 08:45 | 只看该作者

请把波形贴出来,我们照图分析一下问题在哪里

请至少显示2~3个周期。

使用特权

评论回复
板凳
ijk| | 2009-4-17 10:44 | 只看该作者

FSMC频率

  FSMC频率 以前我大概测量过,记得也是几兆。

使用特权

评论回复
地板
alien2006|  楼主 | 2009-4-17 15:38 | 只看该作者

谢谢版主

    自己条件所限只有一台双踪20MHZ的破模拟示波器,身边也没相机,没法拍下来。数据口的波形就是普通的方波,占空比50%左右
    刚刚又根据FWLIB V3.0中EXAMPLESFSMCSRAM中的例子编译一下,只是MAIN中加入上面那个WHILE循环,再仔细测了下波形,一个周期确实是0.4微秒,也就是说按照这个例程的设置操作外部SRAM一个周期是0.2uS不到点,这样折算起来16BIT的时候也就只有6MHZ*2BYTE=12MB的带宽。
    例程中FSMC_DataSetupTime = 2我改成了1也是这样速度,1是最高了,设置成0就完全一条直线了。
    也许是对STM32太喜欢的期望值也太高了,这个FSMC的速度还是稍稍有点不够刺激了,呵呵

使用特权

评论回复
5
252177861| | 2009-4-28 22:22 | 只看该作者

FSMC这么慢?

期待更多的实际可靠的数据

使用特权

评论回复
6
myee01| | 2009-4-29 11:22 | 只看该作者

FSMC-FPGA

STM32F101VC,103VC,以数据地址复用方式读写FPGA,测试成功。不过RCC好像是36MHZ,没有测量频率。

使用特权

评论回复
7
252177861| | 2009-4-29 12:54 | 只看该作者

楼主的主频是多少??72M吗?

我在ST 的宣传文档中找到这样一段:
https://bbs.21ic.com/upfiles/img/20094/2009429125153920.jpg

使用特权

评论回复
8
magic_yang| | 2009-9-17 15:17 | 只看该作者
就是 怎么改上面的参数 都是2.57M 总线的速度再也提高不了了 为什么

使用特权

评论回复
9
不爱说话| | 2009-9-18 09:56 | 只看该作者
呵呵,从这方面看STM32访问片外设备的速度和我的STC51单片机差不多,我的是3M左右(MCU频率33M,最快11时钟周期访问一次片外数据总线,33/11=3MHz).

使用特权

评论回复
10
IJK| | 2009-9-18 11:46 | 只看该作者
印象里STM32的 FSMC速度是5~10M之间

使用特权

评论回复
11
magic_yang| | 2009-9-18 15:52 | 只看该作者
怎么没人回答 香主你出来说句话

使用特权

评论回复
12
香水城| | 2009-9-18 16:02 | 只看该作者
怎么没人回答 香主你出来说句话
magic_yang 发表于 2009-9-18 15:52


呵呵,让我说什么?我在2楼希望看到波形,再给出分析,但我还没有看到波形;:P

使用特权

评论回复
13
magic_yang| | 2009-9-18 16:15 | 只看该作者

风格

本帖最后由 magic_yang 于 2009-9-18 16:17 编辑

谁有那么高档的设备 还有你可以自己测试一下  看看我门说的对不  简直就是连自己动手都懒的动  什么叫敬业 和专业  你不想干 就直接告诉大家  别站着茅坑不拉屎

使用特权

评论回复
14
香水城| | 2009-9-18 16:24 | 只看该作者
谁有那么高档的设备 还有你可以自己测试一下  看看我门说的对不  简直就是连自己动手都懒的动  什么叫敬业 和专业  你不想干 就直接告诉大家  别站着茅坑不拉屎 ...
magic_yang 发表于 2009-9-18 16:15


普通的示波器就可以,并不需要什么高档的设备?

如果你没有示波器就说没有嘛,我本来是想通过波形指出它与程序配置的关系,从而分析出为什么速度比较慢。

看样子楼上只是想得"鱼",不要"渔",那么我只有一句话:大家说的都对,我没有什么说的。

使用特权

评论回复
15
magic_yang| | 2009-9-21 16:15 | 只看该作者
对你个毛  打太极的本领挺高  脸皮够厚的

使用特权

评论回复
16
香水城| | 2009-9-21 16:47 | 只看该作者
对你个毛  打太极的本领挺高  脸皮够厚的
magic_yang 发表于 2009-9-21 16:15


这是什么意思?这里是技术论坛,请你不要出言不逊!

使用特权

评论回复
17
ZRL700424| | 2009-9-21 17:20 | 只看该作者
“对你个**** ”
LZ这句搞笑~.哈哈!

netjob 发表于 2009-9-21 17:03


好像不是楼猪耶,难道是马甲?

使用特权

评论回复
18
香水城| | 2009-9-21 17:46 | 只看该作者
FSMC的速度最快也就是3~8MHz左右,楼主只得到2MHz可能是各项延迟参数配置的问题,也有可能是操作语句的问题,这些都需要在调试时,通过查看具体的寄存器和反汇编指令才能断定是否有问题。当然查看FSMC输出的波形,可以非常直观地判断出各项参数的配置情况,也可以看到操作语句的执行情况,从而反过来推断程序是否存在问题。

但不管怎样,楼主的测量结果基本正确,经过一些微调也许能再提高一些。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

136

帖子

6

粉丝