onechinafish 发表于 2026-1-8 00:43:08

stc32g144k246与ai8051u 串口同步spi通讯几秒就自动停止接收不到了!是什么回事?

硬件连接:




32g144 为mcu1-----ai8052为mcu2

mcu1串口1串口发送数据,然后通过spi复用传到mcu2,mcu2再串口1发送到电脑PC

结果:只有PC端自动发送开启后,打开单片机电源,开机前2秒左右,mcu1是能通过PC通过spi发到mcu2,传给PC过了几秒后就不行了





mcu1 ,mcu的spi是例程里的,都是40M,配为spi2串口模式

mcu1-spi2 初始


void usart2_spi_init(void)
{

    S2SPI_S0 = 1;                     //切换S2SPI到p7.4 p7.5 p7.6p7.7
    S2SPI_S1 = 1;
    S2CON = 0x10;                     //使能接收,必须设置为串口模式0

   
    USART2CR1 = 0x10;                   //使能USART2的SPI模式
//USART2CR1 |= 0x40;                  //DORD=1
    USART2CR1 &= ~0x40;               //DORD=0
//    USART2CR1 |= 0x04;                  //从机模式
USART2CR1 &= ~0x04;               //主机模式
    USART2CR1 |= 0x00;                  //CPOL=0, CPHA=0
//USART2CR1 |= 0x01;                  //CPOL=0, CPHA=1
//USART2CR1 |= 0x02 ;               //CPOL=1, CPHA=0
//USART2CR1 |= 0x03;                  //CPOL=1, CPHA=1
//USART2CR4 = 0x00;                   //SPI速度为SYSCLK/4
//USART2CR4 = 0x01;                   //SPI速度为SYSCLK/8
    USART2CR4 = 0x02;                   //SPI速度为SYSCLK/16
//USART2CR4 = 0x03;                   //SPI速度为SYSCLK/2
    USART2CR1 |= 0x08;                  //使能SPI功能

    ES2 = 1;
               
    B_TX2_Busy = 0;
    TX2_Cnt = 0; //初始化配对使用有记忆存放,提取了数据要清空要同步=0
    RX2_Cnt = 0;       
                               
}









mcu2spi初始

void usart2_spi_init(void)
{

    S2SPI_S0 = 0;                     //切换S2SPI到p4.3 p4.2 p4.1 p4.0
    S2SPI_S1 = 1;
    S2CON = 0x10;                     //使能接收,必须设置为串口模式0

    USART2CR1 = 0x10;                   //使能USART2的SPI模式
//USART2CR1 |= 0x40;                  //DORD=1
    USART2CR1 &= ~0x40;               //DORD=0
    USART2CR1 |= 0x04;                  //从机模式
//USART2CR1 &= ~0x04;               //主机模式
    USART2CR1 |= 0x00;                  //CPOL=0, CPHA=0
//USART2CR1 |= 0x01;                  //CPOL=0, CPHA=1
//USART2CR1 |= 0x02 ;               //CPOL=1, CPHA=0
//USART2CR1 |= 0x03;                  //CPOL=1, CPHA=1
//USART2CR4 = 0x00;                   //SPI速度为SYSCLK/4
//USART2CR4 = 0x01;                   //SPI速度为SYSCLK/8
    USART2CR4 = 0x02;                   //SPI速度为SYSCLK/16
//USART2CR4 = 0x03;                   //SPI速度为SYSCLK/2
    USART2CR1 |= 0x08;                  //使能SPI功能
    ES2 = 1;
}




/*************************************************
//函 数 名:        Usart1Config(void)
//功    能:        PC到串口1,串口1到spi串口2 发送
//输入参数:        无
//返 回 值:        无
*************************************************/
void Usart2DoData(void)
{
        #ifdef EN_SPI_SPI
             S2SS = 0;
      if((TX2_Cnt != RX1_Cnt) && (!B_TX2_Busy))   //收到数据, 发送空闲
      {
            S2BUF = RX1_Buffer;
                                          //SBUF = RX1_Buffer;
            B_TX2_Busy = 1;
            if(++TX2_Cnt >= UART1_BUF_LENGTH)   {TX2_Cnt = 0;S2SS = 1; };//
      }
#endif

}






为什么开机前几秒可以,后来就死机了?

页: [1]
查看完整版本: stc32g144k246与ai8051u 串口同步spi通讯几秒就自动停止接收不到了!是什么回事?