你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 3086|回复: 1

stm32f103ze 外挂nor flash 只能存储器第一个字符

[复制链接]

1

主题

7

回帖

0

蝴蝶豆

新手上路

最后登录
2018-5-22
发表于 2010-11-26 09:35:57 | 显示全部楼层 |阅读模式
我用的是stm32f103ze这款单片机,外挂一块S29AL008D70TAI02 flash,使用NOR_Status FSMC_NOR_WriteBuffer(u16 *pBuffer, u32 WriteAddr, u32 NumHalfwordToWrite)这个函数偶尔会写不进去(只能写进第一个字符),我调试的时候发现
NOR_Status FSMC_NOR_WriteBuffer(u16 *pBuffer, u32 WriteAddr, u32 NumHalfwordToWrite)
{
    NOR_Status status = NOR_ONGOING;
    do
    {
        /* Transfer data to the memory */
        status = FSMC_NOR_WriteHalfWord(WriteAddr, *pBuffer++);
        WriteAddr = WriteAddr + 2;
        NumHalfwordToWrite--;
    }
    while((status == NOR_SUCCESS) && (NumHalfwordToWrite != 0));
    return (status);
}
写进去第一个字符就返回了一个 NOR_ERROR
所以后面的字符都写不进去了。
下面的函数是我的同事改的
NOR_Status FSMC_NOR_GetStatus(u32 Timeout)
{
    u16 val1 = 0x00, val2 = 0x00;
    NOR_Status status = NOR_ONGOING;
    //u32 timeout = Timeout;
    /*
    // Poll on NOR memory Ready/Busy signal ------------------------------------
    while((GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_6) != RESET) && (timeout > 0))
    {
      timeout--;
    }
    timeout = Timeout;
    while((GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_6) == RESET) && (timeout > 0))
    {
      timeout--;
    }
    */
    // Get the NOR memory operation status -------------------------------------
    while((Timeout != 0x00) && (status != NOR_SUCCESS))
    {
        Timeout--;
        //Read DQ6 and DQ5  //Read DQ6 and DQ2
        val1 = *(vu16 *)(Bank1_NOR2_ADDR);
        val2 = *(vu16 *)(Bank1_NOR2_ADDR);
        // If DQ6 did not toggle between the two reads then return NOR_Success
        if((val1 & 0x0040) == (val2 & 0x0040))
        {
            return NOR_SUCCESS;
        }
        //if((val1 & 0x0020) != 0x0020)
        if((val1 & 0x0004) != 0x0004)
        {
            status = NOR_ONGOING;
        }
        val1 = *(vu16 *)(Bank1_NOR2_ADDR);
        val2 = *(vu16 *)(Bank1_NOR2_ADDR);
        if((val1 & 0x0040) == (val2 & 0x0040))
        {
            return NOR_SUCCESS;
        }
@        //else if((val1 & 0x0020) == 0x0020)
        else if((val1 & 0x0004) == 0x0004)
      {
            return NOR_ERROR;
        }
    }
    if(Timeout == 0x00)
    {
        status = NOR_TIMEOUT;
    }
    // Return the operation status
    return (status);
}
我想请教一下这一块@是不是有问题,
我把@   else if((val1 & 0x0020) == 0x0020)
        //else if((val1 & 0x0004) == 0x0004)
改成这样就正常了,但是让我担心的这个函数的其他的几个变量可能是有关联的,我怕影响产品的稳定性,我想请教一下这个函数该怎么改,非常感谢
回复

使用道具 举报

1

主题

7

回帖

0

蝴蝶豆

新手上路

最后登录
2018-5-22
 楼主| 发表于 2010-11-26 09:37:30 | 显示全部楼层

RE:stm32f103ze 外挂nor flash 只能存储器第一个字符

我在线等急,盼望有人回复
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
13245底部标题123相同标题
12底部标题123相同标题
33333底部标题123相同序号
3435底部标题-无链接
关注我们
st-img 微信公众号
st-img 手机版