OpenEdv-开源电子网

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

SPI通信所遇到的问题求解答

[复制链接]

2

主题

5

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2016-3-2
在线时间
4 小时
发表于 2016-3-2 10:10:22 | 显示全部楼层 |阅读模式
1金钱
将两个STM32通过SPI的方式连接起来,用的都是SPI2,一个当主,一个当从
已经实现了单个字节的收发,可是当我想发送数组的时候,产生了一个严重问题,就是从机接收到的数据跟主机发送的数据不匹配
比如我主机发送0x01,0xff,0x01,然后我从机接收到的是0x08,0x0f,0xf8,上电复位之后接收到的数据可能又是另外三个,后来总结了一下规律,发现我发送的数据波形跟接收到的数据波形,收尾相接都是0000 0001 1111 1111 0000 0001,所以现在不知道该怎么解决这个问题
我发送跟接收函数如下:使能是B12
void SPI2_Send(uint8_t data){
            GPIO_ResetBits(GPIOB, GPIO_Pin_12);
        SPI2->DR = data; // write data to be transmitted to the SPI data register
        while( !(SPI2->SR & SPI_I2S_FLAG_TXE) );
GPIO_SetBits(GPIOB, GPIO_Pin_12);        
}

uint8_t SPI2_Receive(void){
        while( !(SPI2->SR & SPI_I2S_FLAG_RXNE) ); // wait until receive complete
        while( SPI2->SR & SPI_I2S_FLAG_BSY ); // wait until SPI is not busy anymore
        return SPI2->DR; // return received data from SPI data register
        
}

主机主函数片段如下:
        while(1)
           {
                for(i = 0;i<3;i++)
                {
                        SPI2_Send(Rereg);
                }
        }

其中Rereg[3] = {0x01,0xff,0x01};
从机主函数片段如下:
        while(1)
           {                        
                for(i=0;i < 3;i++)
                {
                        Rereg = SPI2_Receive();
                        a=        Rereg;
                }
           a[0]=        Rereg[0];
                a[1]=        Rereg[1];
                a[2]=        Rereg[2];
        }

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

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11554
金钱
11554
注册时间
2014-4-1
在线时间
1317 小时
发表于 2016-3-2 11:03:08 | 显示全部楼层
单个字节收发,对不对?


回复

使用道具 举报

2

主题

5

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2016-3-2
在线时间
4 小时
 楼主| 发表于 2016-3-2 11:32:37 | 显示全部楼层
xuande 发表于 2016-3-2 11:03
单个字节收发,对不对?

单个字节收发一开始也是不对的,不过是因为没有加使能,加了使能之后就解决问题了
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11554
金钱
11554
注册时间
2014-4-1
在线时间
1317 小时
发表于 2016-3-2 11:44:15 | 显示全部楼层

单字节对,硬件和SPI配置应当没问题。

两次发送之间加延时试试。


回复

使用道具 举报

2

主题

5

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2016-3-2
在线时间
4 小时
 楼主| 发表于 2016-3-2 15:23:39 | 显示全部楼层
xuande 发表于 2016-3-2 11:44
单字节对,硬件和SPI配置应当没问题。

两次发送之间加延时试试。

加了延时了,但是现在的问题是,我发送0x01,0x02,0x03,0x04,0x05,从机接收是对的,然后从机再将这数组返回,发现主机接收到的是0x04,0x05,0x01,0x02,0x03
回复

使用道具 举报

5

主题

74

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
329
金钱
329
注册时间
2015-9-11
在线时间
46 小时
发表于 2016-3-27 20:50:49 | 显示全部楼层
能否给一下你的单字节发送程序.
迫于生计
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-19 16:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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