打印

测试STM32F101VC中,fsmc地址/数据复用问题

[复制链接]
6688|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mytempid|  楼主 | 2008-9-22 10:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请教各位同学:
uart5初始化代码如下:
    // Enable USART2, USART3, USART4, USART5 clocks
    RCC_APB1PeriphClockCmd (RCC_APB1Periph_USART2 |
                    RCC_APB1Periph_USART3 |
            RCC_APB1Periph_UART4 |                         RCC_APB1Periph_UART5,
            ENABLE);

// Configure UART5 Tx (PC.12) as alternate function push-pull
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_Init (GPIOC, &GPIO_InitStructure);
        // Configure UART5 Rx (PD.02) as input floating
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
        GPIO_Init (GPIOD, &GPIO_InitStructure);
        // Configure UART5 mode
        USART_Init (UART5, &USART_InitStructure);
        USART_ClockInit (UART5, &USART_ClockInitStruct);
        // Enable the UART5
        USART_Cmd (UART5, ENABLE);

目前在uart5串口上输出数据不正确,即输出后测量pin80没有波形。
usart1~usart3和uart4测试正常,初始化代码是类似的。

另,STM32f101VC的低16位地址是和数据线复用的,目前读写控制线波形正常,高8位地址输出正常,但NADV信号一直维持高电平不变,是否下面的代码有错:
 // Enable DMA and FSMC clocks
 RCC_AHBPeriphClockCmd (RCC_AHBPeriph_DMA1 | 
                        RCC_AHBPeriph_DMA2 |           
                        RCC_AHBPeriph_FSMC, 
                        ENABLE);

    // NADV configuration
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;        // NADV
    GPIO_Init (GPIOB, &GPIO_InitStructure);

    //-- FSMC 时序配置 ------------------------------------------------------
    FSMC_ReadWriteTimingStruct.FSMC_AddressSetupTime = 15;
    FSMC_ReadWriteTimingStruct.FSMC_AddressHoldTime = 15;
    FSMC_ReadWriteTimingStruct.FSMC_DataSetupTime = 15;
    FSMC_ReadWriteTimingStruct.FSMC_BusTurnAroundDuration = 15;
    FSMC_ReadWriteTimingStruct.FSMC_CLKDivision = 15;
    FSMC_ReadWriteTimingStruct.FSMC_DataLatency = 15;
    FSMC_ReadWriteTimingStruct.FSMC_AccessMode = FSMC_AccessMode_B;

    FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;
    FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Enable;
    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_AsyncWait = FSMC_AsyncWait_Disable;
    FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
    FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &FSMC_ReadWriteTimingStruct;
    FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &FSMC_ReadWriteTimingStruct;

    FSMC_NORSRAMInit (&FSMC_NORSRAMInitStructure); 

    // Enable FSMC Bank1_SRAM Bank
    FSMC_NORSRAMCmd (FSMC_Bank1_NORSRAM1, ENABLE);  


沙发
zyjmlz| | 2008-9-23 12:57 | 只看该作者

关注

使用特权

评论回复
板凳
mytempid|  楼主 | 2008-9-23 14:12 | 只看该作者

谢谢 ST_ARM ,uart5我稍后测试。

FSMC问题答复:
我把MemoryType改为NOR,如下:
FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_NOR;

此时NADV信号正常,低16位地址输出正常。
为什么FSMC_MemoryType_SRAM不行呢?我的外设是SRAM。

另外发现问题:100pin的STM32F101VC的FSMC接口实际输出的地址线A23-A0是理论值的右移1位。例如我要求写端口0x60ff0010,实际驱动输出的地址线是0x607f8008。是否是FSMC端口16bit宽度的原因?

请问各位同学有无出现这个现象?

使用特权

评论回复
地板
mytempid|  楼主 | 2008-9-23 14:34 | 只看该作者

抱歉:)

uart5正常,程序没有问题,tx输出外挂的MAX202坏了,把输出信号挂死了,一直是‘1’电平,tx只能在‘1’上面驱动出一些小毛刺,
所以一开始没注意,惭愧

使用特权

评论回复
5
香水城| | 2008-9-23 15:18 | 只看该作者

FSMC端口宽度可以设置的

使用特权

评论回复
6
mytempid|  楼主 | 2008-9-23 16:06 | 只看该作者

香主,

 FSMC端口宽度是可以设置的,
我想了解的是FSMC的地址线为何与程序中设定相差1bit

使用特权

评论回复
7
香水城| | 2008-9-23 16:28 | 只看该作者

因为你把FSMC端口宽度设置为16

使用特权

评论回复
8
mytempid|  楼主 | 2008-9-23 20:35 | 只看该作者

多谢两位版主

FSMC memory_type设置为SRAM时无法驱动出NADV问题,还请两位版主确认一下,是ST设计就是如此,还是其它问题。

使用特权

评论回复
9
香水城| | 2008-9-23 21:22 | 只看该作者

如果选择SRAM表示你使用的是非总线复用模式,片选应该是NEx

非总线复用模式没有NADV信号,请参考STM32技术参考手册(第5版)的364页中的表70。

请仔细描述你使用的是什么存储器,是否使用STM32的地址/数据总线复用模式。

使用特权

评论回复
10
mytempid|  楼主 | 2008-9-24 08:34 | 只看该作者

香主,

我使用的是16bit宽的SRAM,FSMC已经设置为地址/数据总线复用模式。

目前的现象是memorytype设置为SRAM时复用模式不正常,memorytype设置为NOR后复用模式正常。此时读写外部SRAM全部正常。

从字面上看memorytype为NOR应该是针对NORFLASH,memorytype为SRAM是针对SRAM。我的理解是复用模式应该是在NOR和SRAM类型下都可以的,但实际不是。

使用特权

评论回复
11
香水城| | 2008-9-24 09:49 | 只看该作者

请把FSMC初始化部分的程序贴出来,还有你的线路图

否则很难搞清楚你的配置,也就无法讨论。

使用特权

评论回复
12
mytempid|  楼主 | 2008-9-24 10:08 | 只看该作者

1楼有FSMC的初始化代码

使用特权

评论回复
13
lut1lut| | 2008-9-24 17:07 | 只看该作者

我来回答你地址移位的问题

配置成16位宽度后,FSMC内部的地址作了处理,使得逻辑上的A1输出到外部引脚A0;逻辑上的A2输出到外部引脚的A1,以此类推。而逻辑上的A0根本就不出现了。因为既然配置成16位宽度,所以A0都是0,不变咯。ST的stm32,str9都是这样的。

另外建议楼主修改你帖子的题目,现在已经严重偏题了。

使用特权

评论回复
14
mytempid|  楼主 | 2008-9-25 17:46 | 只看该作者

to lut1lut

修改题目了
thanks

使用特权

评论回复
15
香水城| | 2008-9-25 18:16 | 只看该作者

回11楼:FSMC设置为地址/数据总线复用模式时应使用NOR类型

请看STM32技术参考手册(第5版)的384页表88,这是复用模式下寄存器的设置,它要求存储器类型MTYP只能是NOR。

使用特权

评论回复
16
lut1lut| | 2008-9-26 11:27 | 只看该作者

100pin的还是可以接sram,

但是类型要配置成NOR了?

使用特权

评论回复
17
mytempid|  楼主 | 2008-9-27 08:18 | 只看该作者

是的

目前我的测试是这样的

使用特权

评论回复
18
yulitao| | 2008-9-27 09:28 | 只看该作者

FSMC 地址和数据复用

请看STM32技术参考手册(第5版)的392页最下面

Bit 1 MUXEN: Address/data multiplexing enable bit.
   When this bit is set, the address and data values are multiplexed on the databus, valid only with NOR Flash memory:
   0: Address/Data nonmultiplexed
   1: Address/Data multiplexed on databus (default after reset)

使用特权

评论回复
19
Swd21ic| | 2008-9-28 23:14 | 只看该作者

re

FSMC只有16bit的数据总线..

比如RAM不够用..我要外扩SRAM的话..那么我有一部分变量的访问不是很慢了吗..
32位的数据话应该要寻址2次才能ok吧.. 
9261就有d0-d31..可以接2片..组成32bit..

最近在评估STM32.主要在FSMc这块..

使用特权

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

本版积分规则

28

主题

388

帖子

1

粉丝