树莓派spi通信
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
树莓派spi通信
一:spi通信的主要函数
1,int wiringPiSPI(int channel,int speed); 选择一个spi通道(通道0和通道1)进行初始化,设置spi的传输速度(5*1000*100-32*1000*1000),执行失败返回-1
2,int wiringPiSPIDataRW(int channel,unsigned char *data,int len);
该函数执行一个同时读写的操作,通过选定的SPI总线。
在data中的数据发送出去的时候,data中同时接收从总线中接收到的数据。
3,int wiringPiSPISetupMode(int channel,int speed,int mode); //增加了可以设置SPI的通信模式
给定一个spi总线,将缓冲区的数据写到
二:实验现象
本实验主要是将spi的MISO和MOSI通过短接线短接起来检测数据是否传输正常:
当将数据线短接时:有数据产生,反之没有数据。
二:实验步骤
1,sudo raspi-config弹出系统配置对话框,使能spi,重新启动树莓派,内核加载成功
2,编写测试程序
(1),初始化wiringPI库;wiringPISetup函数
(2),初始化SPI总线;wiringPiSPiSetup函数
(3),从总线中读写数据;wiringPiSPIDataRW函数
#include <wiringPi.h>
#include <stdio.h>
#include <stdlib.h>
#include <wiringPiSPI.h>
//spi使用前的准备返回spi的文件描述符
int initSPI()
{
int spiFd; //spi的文件描述符
//初始化所用到的IO引脚
//初始化SPI通道0,并设置为最大速度32000000
spiFd=wiringPiSPISetup(0,500000);
if(spiFd==-1)
{
printf("init spi failed!\n");
}
}
int main()
{
char Data[10]={1,2,3,4,5,6,7,8,9,10}; //定义读写的数据,在该数据被写入的时候,同时也从总线中读出数据
int i=0;
//初始化wiringPI的库函数
if(wiringPiSetup()<0)
{
printf("init wiringPi error\n");
}
initSPI(); //spi的初始化
while(1)
{
wiringPiSPIDataRW(0,Data,7); //向总线中写入&个数据
printf("read spi data is:\n"); //读出总线的数据
//打印读出的数据,如果将MISO和MOSI短接:打印出 0 1 2 3 4 5 6 7 8 9 10 其中后三个是数组的本身内容接收到了数据
//如果将MISO和MOSI断开:打印出 0 0 0 0 0 0 0 0 8 9 10 没有接收到数据
for(i=0;i<10;i++)
{
printf("%d\n",Data[i]);
}
printf("\n");
delay(1000);
}
return 0;
}
实验现象
spi的MISO和MOSI短接
spi的MISO和MOSI断开
注:需要在Qt的.pro文件中添加:LIBS +=-lwiringPi 才可以正常编译。