pepperking 发表于 2024-2-27 16:28:32

有没有串口2的SPI模式使用方法或者教程?

模仿数据手册里的例程进行了如下配置,无论是输出还是输入,MOSI、MISO和SCLK都没有信号
是不是漏配置了什么?







void usart2_spi_init()
{
    P4_MODE_IO_PU(GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_3);
    P5_MODE_IO_PU(GPIO_Pin_4);
   
   
    // 00 S2SS P1.2/P5.4 S2MOSI P1.3S2ISO P1.4 S2SCLK P1.5
    // 01 S2SS P2.2      S2MOSI P2.3S2ISO P2.4 S2SCLK P2.5
    // 10 S2SS P5.4      S2MOSI P4.0S2ISO P4.1 S2SCLK P4.3 (启用)
    // 11 S2SS P7.4      S2MOSI P7.5S2ISO P7.6 S2SCLK P7.7
    S2SPI_S0 = 0; //低位   
    S2SPI_S1 = 1; //高位
   

   
   
    S2CON = 0x10;//使能串口2接收,且调整串口模式为模式0(必须)
   
   
    USART2CR1 = 0x10;    //使能SPI模式
   
   
//    USART2CR1 |= 0x40;   //1: LSB0: MSB
    USART2CR1 &= ~0x40;    //1: LSB0: MSB
      
   
//    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速度为SYSCLOCK/4
//    USART2CR4 = 0x01;//SPI速度为SYSCLOCK/8
//    USART2CR4 = 0x02;//SPI速度为SYSCLOCK/16
//    USART2CR4 = 0x03;//SPI速度为SYSCLOCK/2


    USART2CR1 |= 0x08;//使能SPI2
   
   
   
    ES2 = 1;//串口2中断允许位
   
}


void spi2_isr() interrupt UART2_VECTOR
{
    if(S2TI)
    {
      S2TI = 0;
      spi2_flag.spi2_Tbusy = 0;
    }
    if(S2RI)
    {
      S2RI = 0;
      S2BUF = spi2_Rbuffer;
      spi2_flag.spi2_Rbusy = 0;
    }
   
   
}


void spi2_write_byte(u8 dat)
{
    SPI_CS_0;
    S2BUF = dat;
    spi2_flag.spi2_Tbusy = 1;
    while(spi2_flag.spi2_Tbusy);
    SPI_CS_1;
}

void spi2_read_byte()
{
    spi2_flag.spi2_Rbusy = 1;
    S2BUF = 0xFF;   
    while(spi2_flag.spi2_Rbusy);   
}




电子DIY小家 发表于 2024-2-27 16:50:28

看下官网的视频教程,视频里有讲解哦~

乘风飞扬 发表于 2024-2-27 17:59:45

可以参考STC32G实验箱例程包:78-USART1复用SPI与USART2复用SPI相互通信例程
论坛下载地址:
https://www.stcaimcu.com/plugin.php?id=mdown:index#/~cateid=5&key=
页: [1]
查看完整版本: 有没有串口2的SPI模式使用方法或者教程?