找回密码
 立即注册
查看: 150|回复: 2

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

[复制链接]
  • TA的每日心情
    开心
    2024-3-15 09:33
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    6

    主题

    6

    回帖

    102

    积分

    注册会员

    积分
    102
    发表于 2024-2-27 16:28:32 | 显示全部楼层 |阅读模式
    模仿数据手册里的例程进行了如下配置,无论是输出还是输入,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.3  S2ISO P1.4 S2SCLK P1.5
        // 01 S2SS P2.2      S2MOSI P2.3  S2ISO P2.4 S2SCLK P2.5
        // 10 S2SS P5.4      S2MOSI P4.0  S2ISO P4.1 S2SCLK P4.3 (启用)
        // 11 S2SS P7.4      S2MOSI P7.5  S2ISO P7.6 S2SCLK P7.7
        S2SPI_S0 = 0; //低位   
        S2SPI_S1 = 1; //高位
       

       
       
        S2CON = 0x10;//使能串口2接收,且调整串口模式为模式0(必须)
       
       
        USART2CR1 = 0x10;    //使能SPI模式
       
       
    //    USART2CR1 |= 0x40;   //1: LSB  0: MSB
        USART2CR1 &= ~0x40;    //1: LSB  0: 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_count.Rcount1++];
            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);   
    }




    回复 送花

    使用道具 举报

  • TA的每日心情
    开心
    10 小时前
  • 签到天数: 101 天

    [LV.6]常住居民II

    41

    主题

    1016

    回帖

    6971

    积分

    荣誉版主

    冲哥视频教程和各种开源资料QQ交流群884047237,可群

    积分
    6971
    QQ
    发表于 2024-2-27 16:50:28 | 显示全部楼层
    看下官网的视频教程,视频里有讲解哦~
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    9 小时前
  • 签到天数: 143 天

    [LV.7]常住居民III

    27

    主题

    1343

    回帖

    4187

    积分

    论坛元老

    积分
    4187
    发表于 2024-2-27 17:59:45 | 显示全部楼层
    可以参考STC32G实验箱例程包:78-USART1复用SPI与USART2复用SPI相互通信例程
    论坛下载地址:
    https://www.stcaimcu.com/plugin. ... /~cateid=5&key=
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-17 18:55 , Processed in 0.058022 second(s), 38 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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