stm32qspi内存映射_各位大神 请教一下,stm32f767使用QSPI实现内存映射的问题

博主在尝试使用STM32F767探索版通过QSPI进行内存映射功能调试,参照官方教程进行修改,但遇到数据读取不正确的问题。代码中展示了初始化配置、内存映射启用和数据读取的流程。当读取W25Q256时,数据未按预期显示,博主寻求帮助解决内存映射的错误。
摘要由CSDN通过智能技术生成

我想通过原子的stm32f767的探索版,调试spi的内存映射功能,参照769的官方历程修改的,但是出来的数据一直不正确,这个是映射配置的代码

往w25q256里写的代码算是原子的历程,

变量的初始化

const u8 TEXT_Buffer[]={"Apollo STM32F7 QSPI TEST"};

#define SIZE sizeof(TEXT_Buffer)

__IO uint8_t buf[100],*p

while(1)

{

if(key==KEY2_PRES)//KEY0按下,读取字符串并显示

{

LCD_Fill(0,170,239,319,WHITE);//清除半屏

LCD_ShowString(30,170,200,16,16,"OSPI Start Read QSPI.... ");

Memory_Mapped_Enable(4);

x=0;

memset(datatemp,0,sizeof(TEXT_Buffer));

while(1)

{

if(*qspi_addr==0)

{

break;

}

datatemp[x++] = *qspi_addr++;

printf("datatemp :%c",datatemp[x]);

printf("        *qspi_addr:%4d",*qspi_addr);

printf("                    qspi_addr:%x\r\n",qspi_addr);

}

printf("x = %d",x);

LCD_ShowString(30,170,200,16,16,"The qspi Data Readed Is:   ");        //提示传送完成

LCD_ShowString(30,230,200,16,16,datatemp);                                        //显示读到的字符串

}

}

//使能内存映射.

u8 Memory_Mapped_Enable(u32 dummyCycles)

{

QSPI_CommandTypeDef      s_command;              //命令结构体

QSPI_MemoryMappedTypeDef s_mem_mapped_cfg;       //内存映射 配置结构体

/* Configure the command for the read instruction */

s_command.InstructionMode   = QSPI_INSTRUCTION_1_LINE;                //指令模式   单线传输数据

s_command.Instruction       = Fast_Read_Quad;                                  //指令      具体的指令

s_command.AddressMode       = QSPI_ADDRESS_4_LINES;                          //地址模式    四线传输

s_command.Address           = 0;

s_command.AddressSize       = QSPI_ADDRESS_24_BITS;                    //地址长度      24位地址

s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE;                    //交替字节    无交替字节

s_command.AlternateBytes                 = 0x00;

//s_command.AlternateBytesSize = QSPI_ALTERNATE_BYTES_8_BITS;

s_command.DataMode          = QSPI_DATA_4_LINES;                                        //数据模式

//QSPI_DATA_1_LINE

s_command.NbData            = 1;   //每次读的字节数

s_command.DummyCycles       = dummyCycles;        //设置空指令周期数

s_command.DdrMode           = QSPI_DDR_MODE_DISABLE;              //关闭DDR模式

s_command.DdrHoldHalfCycle  = QSPI_DDR_HHC_ANALOG_DELAY;           //ddr模式下 数据输出延迟

s_command.SIOOMode          = QSPI_SIOO_INST_EVERY_CMD;            //每次都发送指令

//传输的数据个数

/* Configure the memory mapped mode */

s_mem_mapped_cfg.TimeOutActivation = QSPI_TIMEOUT_COUNTER_DISABLE;

s_mem_mapped_cfg.TimeOutPeriod     = 0;

if (HAL_QSPI_MemoryMapped(&QSPI_Handler, &s_command, &s_mem_mapped_cfg) != HAL_OK)

{

printf("HAL_QSPI_MemoryMapped Fail \r\n ");

return 1;

}

else

{

printf("HAL_QSPI_MemoryMapped Sucess \r\n ");

return 0;

}

}

恳求哪位大神帮我看看 是哪里出现错了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值