496803443 发表于 2025-1-16 11:44:44

QSPI的第3组切换(P4.7/P2^5/P2^6/P2^7/P4^6/P4^5)失败

#define QSPI_SW   0

#if (QSPI_SW == 2)
    sbit    CS          =   P4^0;
    sbit    SDI_IO0   =   P4^1;
    sbit    SDO_IO1   =   P4^2;
    sbit    SCK         =   P4^3;
    sbit    WP_IO2      =   P5^2;
    sbit    HLD_IO3   =   P5^3;
#endif
#if (QSPI_SW == 1)
    sbit    CS          =   P1^4;
    sbit    SDI_IO0   =   P1^5;
    sbit    SDO_IO1   =   P1^6;
    sbit    SCK         =   P1^7;
    sbit    WP_IO2      =   P1^3;
    sbit    HLD_IO3   =   P1^2;
#endif

#if (QSPI_SW == 0)
                sbit    CS          =   P4^7;
    sbit    SDI_IO0   =   P2^5;
    sbit    SDO_IO1   =   P2^6;
    sbit    SCK         =   P2^7;
    sbit    WP_IO2      =   P4^6;
    sbit    HLD_IO3   =   P4^5;

#endif
void QSPI_Init()
{
#if (QSPI_SW == 2)
    P4M0 |= 0x09;                   //设置CS,SCK为强推挽模式
    P4M1 &= ~0x09;
    P4SR &= ~0x0f;                  //设置所有的QSPI口为快速模式
    P5SR &= ~0x0c;
    P4PU |= 0x0f;                   //使能所有的QSPI口的内部10K上拉电阻
    P5PU |= 0x0c;
    P4BP &= ~0x06;                  //使能QSPI的IO0~IO3数据硬件自动设置端口模式
    P5BP &= ~0x0c;
    P_SW4 = (P_SW4 & ~0x03) | 0x01; //使用QSPI的第2组切换(P4.0/P4.1/P4.2/P4.3/P5.2/P5.3)
#endif

#if (QSPI_SW == 1)
    P1M0 |= 0x90;               //设置CS,SCK为强推挽模式
    P1M1 &= ~0x90;
    P1SR &= ~0xfc;            //设置所有的QSPI口为快速模式
    P1PU |= 0xfc;               //使能所有的QSPI口的内部10K上拉电阻
    P1BP &= ~0x6c;            //使能QSPI的IO0~IO3数据硬件自动设置端口模式
    P_SW4 &= ~0x03;             //使用QSPI的第1组切换(PP1.2/P1.3/P1.4/P1.5/P1.6/P1.7)
#endif
       
#if (QSPI_SW == 0)
    P4M0 |= 0x80; P4M1 &= ~0x80; //设置CS,SCK为强推挽模式P4^7;强推挽//P2^7;强推挽
    P2M0 |= 0x80; P2M1 &= ~0x80;
                P4SR &= ~0xe0;               //设置所有的QSPI口为快速模式
    P2SR &= ~0xe0;
                P2PU |= 0xe0;                //使能所有的QSPI口的内部10K上拉电阻
    P4PU |= 0xe0;
    P2BP &= ~0x60;            //使能QSPI的IO0~IO3数据硬件自动设置端口模式
    P4BP &= ~0x60;            
    P_SW4 = (P_SW4 & ~0x03) | 0x10;            //使用QSPI的第3组切换(P4.7/P2^5/P2^6/P2^7/P4^6/P4^5)
#endif

程序部分没有改动,只是在功能脚切换部分做了以上修改。但是在串行FLYSH编程器中无法运行。如果把#define QSPI_SW   0   切换到 #define QSPI_SW   1就一切正常。是哪里出了问题吗?

496803443 发表于 2025-1-16 11:50:52

FLASH 我用的是GD25Q80,
页: [1]
查看完整版本: QSPI的第3组切换(P4.7/P2^5/P2^6/P2^7/P4^6/P4^5)失败