stc32hhh 发表于 2023-12-27 13:41:50

spi通讯失败

芯片选用是stc32g12k128,我使用SPI驱动74hc165和hc595,74hc165是读取按键键值,595是输出到LED数码管,muc做主机,硬件是没有问题的,用示波器看过波形,但软件配置不知道哪有问题,而且SPSTAT状态寄存器无法写入值(实例也一样),还有就是在全速运行下寄存器的值不能实时变化(包括变量,寄存器,keil的periodic window updata也勾上了),正常来说我按键按下muc就能收到165发送过来的按键信息,现在就是什么都没有,有没有大佬能看看哪有问题void        GPIO_config(void)
{
        P0_MODE_IO_PU(GPIO_Pin_5);
        P0_MODE_IO_PU(GPIO_Pin_6);
        P0_MODE_IO_PU(GPIO_Pin_2);
        P0_MODE_IO_PU(GPIO_Pin_3);
       
        P5_MODE_IO_PU(GPIO_Pin_3);
       
        P2_MODE_IO_PU(GPIO_Pin_1);
        P2_MODE_IO_PU(GPIO_Pin_2);
        P2_MODE_IO_PU(GPIO_Pin_3);
        P2_MODE_IO_PU(GPIO_Pin_4);
        P2_MODE_IO_PU(GPIO_Pin_5);
//        P2_MODE_IN_HIZ(GPIO_Pin_3);
//        P2_MODE_OUT_PP(GPIO_Pin_2);
//        P2_MODE_OUT_PP(GPIO_Pin_4);
//        P2_MODE_OUT_PP(GPIO_Pin_5);
       
        P3_MODE_IO_PU(GPIO_Pin_3);
        P3_MODE_IO_PU(GPIO_Pin_4);
       
        P1_MODE_IO_PU(GPIO_Pin_1);
        P1_MODE_IO_PU(GPIO_Pin_0);
        P1_MODE_IO_PU(GPIO_Pin_4);
}

void        SPI_config(void)
{
        SPI_InitTypeDef                SPI_InitStructure;
        SPI_InitStructure.SPI_Enable    = ENABLE;                                                //SPI启动    ENABLE, DISABLE
        SPI_InitStructure.SPI_SSIG      = DISABLE;                                                //片选位   ENABLE, DISABLE
        SPI_InitStructure.SPI_FirstBit= SPI_MSB;                                        //移位方向   SPI_MSB, SPI_LSB
        SPI_InitStructure.SPI_Mode      = SPI_Mode_Master;                //主从选择   SPI_Mode_Master, SPI_Mode_Slave
        SPI_InitStructure.SPI_CPOL      = SPI_CPOL_Low;                        //时钟极性   SPI_CPOL_High,   SPI_CPOL_Low
        SPI_InitStructure.SPI_CPHA      = SPI_CPHA_2Edge;                //时钟相位   SPI_CPHA_1Edge,SPI_CPHA_2Edge
        SPI_InitStructure.SPI_Speed   = SPI_Speed_4;                        //SPI速度    SPI_Speed_4, SPI_Speed_16, SPI_Speed_64, SPI_Speed_128
        SPI_Init(&SPI_InitStructure);
        NVIC_SPI_Init(DISABLE,Priority_0);                //中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3
       
        SPI_SW(SPI_P22_P23_P24_P25);        //SPI_P54_P13_P14_P15,SPI_P22_P23_P24_P25,SPI_P54_P40_P41_P43,SPI_P35_P34_P33_P32
        //SPI_SS_2 = 1;

        SPSTAT = 0xc0;
        SPI_ClearFlag();   //清除 SPIF和WCOL 标志
        //SPR0 = 0;
        //SPR1 = 0;
        HSPllClkConfig(MCLKSEL_HIRC,PLL_96M,123);    //系统时钟选择,PLL时钟选择,时钟分频系数
        HSSPI_Enable();
}

void main(void)
{
        WTST = 0;                //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
        EAXSFR();                //扩展SFR(XFR)访问使能
        CKCON = 0;      //提高访问XRAM速度
       
        EA = 1;
        GPIO_config();
        SPI_config();
        //Timer_config();
        //UART_config();
        //RS485_EN = 0;
        //RS485();
        //WDT_CONTR = 0x24;//使能看门狗 溢出时间约为0.5s
        P05 = 1;
       
        m_LoopFlag = 2;

        while (1)
        {
                //WDT_CONTR = 0x34;//清除看门狗,否则系统复位
<blockquote>RCK = 0;

嵌入式之路 发表于 2023-12-27 14:13:36

你用个逻辑分析仪抓一下

stc32hhh 发表于 2023-12-27 14:19:51

嵌入式之路 发表于 2023-12-27 14:13
你用个逻辑分析仪抓一下

我用示波器看过,波形是正常的
页: [1]
查看完整版本: spi通讯失败