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

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

[复制链接]
xuxianyin5490 提问时间:2010-11-26 09:35 /
我用的是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 发布时间:2010-11-26 09:35

举报

1个回答
xuxianyin5490 回答时间:2010-11-26 09:37:30

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

我在线等急,盼望有人回复

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版