完善资料让更多小伙伴认识你,还能领取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)时,相关寄存器就会异常 如果将接收DummyCycles配置成2时,则可以正常接收数据,但是时序会异常导致接收数据不正确。 |
|
相关推荐
1个回答
|
|
可能的原因有以下几点:
1. QSPI外设初始化配置错误:检查是否正确配置了QSPI的时钟频率、时钟极性、数据线位序等参数。 2. QSPI外设控制器配置错误:检查是否正确配置了QSPI控制器的时钟分频、时钟相位、数据位宽等参数。 3. QSPI读取命令设置错误:检查是否正确设置了QSPI的读取命令,包括操作代码、地址位数、数据位数等参数。 4. QSPI片选信号控制错误:确保CS引脚(片选信号)正确控制,并在读取数据之前将其拉低。 解决方法: 1. 检查QSPI的初始化配置是否正确,确保时钟频率、时钟极性和数据线位序等参数设置正确。 2. 检查QSPI控制器的配置是否正确,包括时钟分频、时钟相位和数据位宽等参数设置正确。 3. 检查读取命令的设置是否正确,确保正确设置了操作代码、地址位数和数据位数等参数。 4. 检查片选信号的控制是否正确,确保在读取数据之前,将CS引脚拉低。 5. 确认外部器件与QSPI接口的连接是否正确,包括引脚连接和电源连接等。 6. 在读取数据之前,确保外部器件已经正常发送数据,并检查通信时序是否正确。 7. 可以使用示波器或逻辑分析仪等工具检查QSPI接口的信号波形,确保时钟、数据、片选等信号的波形正确。 如果问题仍然存在,可以尝试使用其他方法进行QSPI的读取操作,或者查阅相关文档和参考资料以获取更多关于QSPI的配置和使用方法的信息。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1641 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1562 浏览 1 评论
990 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
691 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1610 浏览 2 评论
1869浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
655浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
525浏览 3评论
541浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
514浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-26 16:34 , Processed in 1.191925 second(s), Total 82, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号