OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 1652|回复: 0

求助STM32F103SPI通信遇到的问题!!!!!!

[复制链接]

15

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2023-3-20
在线时间
26 小时
发表于 2023-8-16 09:35:20 | 显示全部楼层 |阅读模式
10金钱
使用STM32F103的SPI2在对一个芯片进行写操作时,没有将MISO线与从机相连,但是在通信的过程中通过示波器观察32板子MISO线会有波形抖动出现,按理来说如果MISO线不和主机连接,是不应该会出现波形的,同时在对从机进行写操作时,观察从机的MISO线发现写操作时从机MISO线的波形是正确的,但是将主机和从机的MISO线连接之后,在写操作过程中主机接收到MISO线上的数据会出现错误,可是经过验证从机的MISO线传输时正确的,但是却受到了主机这边的影响导致主机接收到的数据出现错误,有没有大佬知道这个问题如何解决?下面时我设计的对芯片将进行的写操纵的过程,通过按键来控制写,第一次写的时候传回了的数据没问题,但是第二次写的时候,最后传回来的而两个数据就会出现问题了。
/********************************
写操作
入口参数:
regadd:寄存器地址
regdata:写入寄存器内的数据
*********************************/
void write_slave(u8 regadd , u8 regdata)
{
        u8 dat1=0,dat2=0,dat3=0;
        u8 num1=0,num2=0,num3=0;
        u8 adders;
        u8 crc_write;
        u8 crc_check;
        u32 crc_dat=0;
        u32 crc_dat_buf=0;       
        char wcdata[10];
        char wcnume[10];

                adders=(regadd<<2)+0x02;
                dat1=0,dat2=0,dat3=0;
                num1=0,num2=0,num3=0;
                crc_dat_buf=adders;
                crc_dat|=crc_dat_buf<<8;
                crc_dat_buf=regdata;
                crc_dat|=crc_dat_buf;
                crc_write=crc_cul(crc_dat);
                CS_6008 =0;
                dat1=SPI2_ReadWriteByte(adders);
                dat2=SPI2_ReadWriteByte(regdata);
                dat3=SPI2_ReadWriteByte(crc_write);
                num1 =SPI2_ReadWriteByte(adders);
                num2=SPI2_ReadWriteByte(regdata);
                num3=SPI2_ReadWriteByte(crc_write);
                CS_6008 =1;
                crc_dat=0;
                crc_dat_buf=num1;
                crc_dat|=crc_dat_buf<<16;
                crc_dat_buf=num2;
                crc_dat|=crc_dat_buf<<8;
                crc_dat_buf=num3;
                crc_dat|=crc_dat_buf;
                crc_check=crc_cul(crc_dat);
                sprintf(wcdata,"%02X%02X%02X",dat1,dat2,dat3);
                sprintf(wcnume,"%02X%02X%02X",num1,num2,num3);
                LCD_Fill(42, 16, 78, 28, WHITE);
                LCD_Fill(142, 16, 178, 28, WHITE);
                LCD_ShowString_char(42,16,200,12,12,wcdata);
                LCD_ShowString_char(142,16,200,12,12,wcnume);
                if((crc_check!=0)|(num3==0xaa))
                {
                        LCD_Fill(0, 300,90 , 312, WHITE);               
                        LCD_ShowString(0, 300, 200, 12, 12, "write_crc_error");
                }
                 else if(crc_check==0)
                {
                        LCD_Fill(0, 300,90 , 312, WHITE);               
                        LCD_ShowString(0, 300, 200, 12, 12, "write_crc_right");
                }

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 01:55

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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