jianxuan5527 发表于 2019-7-3 10:28:55

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

我想通过原子的stm32f767的探索版,调试spi的内存映射功能,参照769的官方历程修改的,但是出来的数据一直不正确,这个是映射配置的代码
往w25q256里写的代码算是原子的历程,
变量的初始化
const u8 TEXT_Buffer[]={"Apollo STM32F7 QSPI TEST"};
#define SIZE sizeof(TEXT_Buffer)
__IO uint8_t buf,*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 = *qspi_addr++;                              
                              printf("datatemp :%c",datatemp);
                              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;
}

}

恳求哪位大神帮我看看 是哪里出现错了
页: [1]
查看完整版本: 各位大神 请教一下,stm32f767使用QSPI实现内存映射的问题