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

QSPI仅读取外设数据,程序运行异常

[复制链接]
wenz136 提问时间:2023-6-3 14:20 / 未解决
QSPI仅接收数据异常

芯片信号:STM32H743II

测试Demo如下:

void QSpiDemo(void){

uint8_t aucBuf[2];

MX_QUADSPI_Init();    /* QSPI初始化 */

aucBuf[0] = 4 << 1;

aucBuf[1] = 0;

QSPI_WriteRegEx(aucBuf, 2);  /* 发送2字节数据 */


QSPI_ReadRegEx(aucBuf, 2);  /* 接收2字节数据 */

}

uint8_t QSPI_WriteRegEx(uint8_t *_pBuf, uint16_t _usWriteSize)
{
QSPI_CommandTypeDef sCommand = {0};
/* 基本配置 */
sCommand.DummyCycles = 0;                                   /* 不需要空周期 */
sCommand.InstructionMode   = QSPI_INSTRUCTION_NONE;         /* No instruction */
sCommand.AddressMode = QSPI_ADDRESS_NONE;                   /* No address ;QSPI_ADDRESS_1_LINE */
sCommand.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE;     /* 无交替字节 */
sCommand.DataMode    = QSPI_DATA_1_LINE;                    /* 1线数据方式 */
sCommand.NbData      = _usWriteSize;                        /* 写数据大小 */

sCommand.DdrMode           = QSPI_DDR_MODE_DISABLE;         /* 不支持DDR */
sCommand.DdrHoldHalfCycle  = QSPI_DDR_HHC_ANALOG_DELAY;     /* DDR模式,数据输出延迟 */
sCommand.SIOOMode          = QSPI_SIOO_INST_EVERY_CMD;      /* 仅发送一次命令 */

if(HAL_QSPI_Command(&hqspi, &sCommand, 5000) != HAL_OK)
{
return 0;
}
if(HAL_QSPI_Transmit(&hqspi, _pBuf, 5000) != HAL_OK)
{
return 0;
}
return 1;
}

uint8_t QSPI_ReadRegEx(uint8_t *_pBuf, uint16_t _usReadSize)
{
QSPI_CommandTypeDef sCommand = {0};

sCommand.DummyCycles = 0;                                /* 不需要空周期 */
sCommand.InstructionMode   = QSPI_INSTRUCTION_NONE;      /* No instruction */
sCommand.AddressMode =  QSPI_ADDRESS_NONE;               /* No address ;QSPI_ADDRESS_1_LINE */
sCommand.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE;  /* 无交替字节 */
sCommand.DataMode    = QSPI_DATA_1_LINE;                 /* 1线数据方式 */
sCommand.NbData      = _usReadSize;                      /* 写数据大小 */

sCommand.DdrMode           = QSPI_DDR_MODE_DISABLE;      /* 不支持DDR */
sCommand.DdrHoldHalfCycle  = QSPI_DDR_HHC_ANALOG_DELAY;  /* DDR模式,数据输出延迟 */
sCommand.SIOOMode          = QSPI_SIOO_INST_EVERY_CMD;   /* 仅发送一次命令 */

if(HAL_QSPI_Command(&hqspi, &sCommand, 5000) != HAL_OK)
{
return 0;
}
if(HAL_QSPI_Receive(&hqspi, _pBuf, 5000) != HAL_OK)
{
return 0;
}
return 1;
}

读取数据时,每次执行到HAL_QSPI_Receive函数MODIFY_REG(hqspi->Instance->CCR, QUADSPI_CCR_FMODE, QSPI_FUNCTIONAL_MODE_INDIRECT_READ)时,相关寄存器就会异常

![image.png](data/attachment/forum/202306/03/141340mrdpireg8cai6ppx.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")

如果将接收DummyCycles配置成2时,则可以正常接收数据,但是时序会异常导致接收数据不正确。

![image.png](data/attachment/forum/202306/03/141643xiivuyvdk0ii4vy4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")

运行异常截图

运行异常截图

修改点截图

修改点截图
收藏 评论1 发布时间:2023-6-3 14:20

举报

1个回答
xmshao 回答时间:2023-6-5 14:31:24
建议你参考下STM32H7系列Cube库里的相关例程,参考下他人的配置。


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