我想通过原子的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;

}

}

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

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐