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

关于STC32G SPI通信问题。

[复制链接]

该用户从未签到

8

主题

10

回帖

68

积分

注册会员

积分
68
发表于 2023-10-7 22:26:43 | 显示全部楼层 |阅读模式
初始化:
void Init_SPI()                     
{
                //P_SW1=0x04;                                 
                SPI_S1=0;SPI_S0=1;       //将 SPI 调整到 SS P22  MOSI P23  MISO P24  SCLK P25
                SPDAT = 0;
                SPSTAT=0xc0;             //SPDAT.7和SPDAT.6写11,可以将中断标志清零。注意是写1才清零
                SPCTL = 0xd0;            //  SSIG 1 开启主机模式 SPEN 1 SPI使能  DORD 0 先发最高位   MSTR 1 主机模式、SPI输入时钟/4
}



uchar SPI_SendByte(uchar SPI_SendData)
{
        SPDAT= SPI_SendData;     // 将数据 写入
        while(!SPIF);                    //等待写入完成
        SPIF = 1;                        //清除中断标志,和写冲突标志,注意是对应位写1才能清零                         
        return  SPDAT;                 //返回得到的数据
}


uint SPI_Flash_ReadID(void)
{
        uint Temp = 0;          
        SPI_FLASH_CS=0;                                    
        SPI_SendByte(0x90);//发送读取ID命令            
        SPI_SendByte(0x00); //前8位
        SPI_SendByte(0x00);//中8位
        SPI_SendByte(0x00); //后8位
        Temp|=SPI_SendByte(0xFF)<<8;  

        Temp|=SPI_SendByte(0xFF);         
        SPI_FLASH_CS=1;
}
以上是一个SPI命令,24位地址发送。遇到的问题是,通过示波器观察,只收到了16位地址。而同样的程序,在STC8A8K64SA12上是对的。就是消失了一个SPI_SendByte(0x00);







WeChat_20231007222309.mp4

4.86 MB, 下载次数: 8

示波器视频,读取的是CS和单片机SPI数据输出。

回复 送花

使用道具 举报

该用户从未签到

8

主题

10

回帖

68

积分

注册会员

积分
68
 楼主| 发表于 2023-10-8 09:00:45 | 显示全部楼层
经过尝试,发现如下情况:
        SPI_SendByte(0x90);//发送读取ID命令            
        SPI_SendByte(0x01);
        SPI_SendByte(0x02);
        SPI_SendByte(0x07);
        SPI_SendByte(0x04);

        SPI_SendByte(0x90);//发送读取ID命令            
        SPI_SendByte(0x02);
        SPI_SendByte(0x08);
        SPI_SendByte(0x05);
        SPI_SendByte(0x03);

对比到的PROHEX差异如下(共计2行差异):
:107BC300CA79C2A27490120046740112004674026C
:107BC300CA79C2A274901200467402120046740865

:107BD3001200467407120046740412004674FF1222
:107BD3001200467405120046740312004674FF1225
但是,但是,如果把函数修改为:
        SPI_SendByte(0x90);//发送读取ID命令            
        SPI_SendByte(0x00);
        SPI_SendByte(0x00);
        SPI_SendByte(0x00);
        SPI_SendByte(0x00);
编译的文件再和1274的文件相比较,差异行出现了1576行,已经无法核对编译时这个位置出了什么问题。
即,结论是SPI_SendByte(0x00); 连续发送编译的文件有问题,但找不到问题所在。
回复 支持 反对 送花

使用道具 举报

该用户从未签到

552

主题

9496

回帖

1万

积分

管理员

积分
14067
发表于 2023-10-8 14:41:25 | 显示全部楼层
回复 支持 反对 送花

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-18 18:54 , Processed in 0.060424 second(s), 40 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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