找回密码
 立即注册
查看: 123|回复: 0

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

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2026-01-08 00:43:08
已绑定手机

7

主题

4

回帖

63

积分

注册会员

积分
63
发表于 2026-1-8 00:43:08 | 显示全部楼层 |阅读模式
硬件连接:

f61187fd-1964-4756-a595-d2eeb8e9933d.png


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

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

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

11.png 22.png



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

mcu1-spi2 初始


void usart2_spi_init(void)
{

    S2SPI_S0 = 1;                       //切换S2SPI到p7.4 p7.5 p7.6  p7.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;       
                               
}









mcu2  spi初始

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[TX2_Cnt];
                                          //SBUF = RX1_Buffer[TX2_Cnt];
            B_TX2_Busy = 1;
            if(++TX2_Cnt >= UART1_BUF_LENGTH)   {TX2_Cnt = 0;S2SS = 1; };//
        }
  #endif

}






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

回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-3-23 23:09 , Processed in 0.100924 second(s), 46 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表