使用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");
}
|