打印
[STM32F1]

hSTM32F1XX 的FSMC同步模式成组读写功能如何实现?

[复制链接]
1494|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
djtloveic|  楼主 | 2014-6-9 18:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32F1XX FSMC的同步模式中说的是只发一次地址信号,数据传输通过CLK完成,假如要一次读/写10个数据如何来实现?我试过连续读10次,可每次都会发地址信号的,是我的读取方法不对吗?哪位朋友用过同步模式,给指点一下,谢谢。
我的读写方法:
#define BANK1_SRAM1_ADDR        ((u32)0x60000000)
写:*(u16 *)(BANK1_SRAM1_ADDR + w_addr*2) = da;
读:return(*(vu16 *)(BANK1_SRAM1_ADDR + r_addr*2));
沙发
香水城| | 2014-6-9 21:43 | 只看该作者
Burst同步模式配置正确了么?

BURSTEN@FSMC_BCRx = 1

使用特权

评论回复
板凳
djtloveic|  楼主 | 2014-6-10 08:54 | 只看该作者
香水城 发表于 2014-6-9 21:43
Burst同步模式配置正确了么?

BURSTEN@FSMC_BCRx = 1

谢谢香版,附上我的配置,麻烦帮忙看看
void FSMCConfig(void)
{
/*----------------------- SRAM Bank 1 ----------------------------------------*/
        memset((unsigned char *)&p, 0, sizeof(FSMC_NORSRAMTimingInitTypeDef));
          memset((unsigned char *)&FSMC_NORSRAMInitStructure, 0, sizeof(FSMC_NORSRAMInitTypeDef));
        p.FSMC_BusTurnAroundDuration = 1;       //总线恢复时间
        p.FSMC_CLKDivision = 1;                        //时钟分频因子       
        p.FSMC_DataLatency = 0;                        //数据产生时间

        FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;                //BANK1 NORSRAM1
        FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Enable;        //地址数据总线复用
        FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM;//FSMC_MemoryType_NOR;
        FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
        FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Enable;
        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_Enable;
        FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;
        FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;

        FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);  

        /* BANK 1 (of NOR/SRAM Bank 1~4) is enabled */
        FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);
     
}

使用特权

评论回复
地板
djtloveic|  楼主 | 2014-6-10 09:00 | 只看该作者
读写函数:
void WriteByte(uchar w_addr,uchar da)
{
        *(u16 *)(BANK1_SRAM1_ADDR + w_addr*2) = da;
}

uchar ReadByte(uchar r_addr)
{
        return(*(vu16 *)(BANK1_SRAM1_ADDR + r_addr*2));
}

void WriteNbyte(uchar ws_addr,u8* w_buf,uint len)
{
        for(;len!=0;len--)
        {
                *(u16 *)(BANK1_SRAM1_ADDR + ws_addr) = *w_buf++;
                ws_addr++;
        }
}

void ReadNbyte(uchar rs_addr,u8*r_buf,uint len)
{
        for(;len!=0;len--)
        {
                *r_buf++ = *(vu16 *)(BANK1_SRAM1_ADDR + rs_addr);
                rs_addr++;
        }       
}

使用特权

评论回复
5
djtloveic|  楼主 | 2014-6-11 17:24 | 只看该作者
自顶一下,希望用过FSMC同步模式的朋友给指点一下,谢谢

使用特权

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

本版积分规则

18

主题

113

帖子

0

粉丝