#include <stdio.h>
#include <wiringPi.h>
#define SPI_CLK 11 // GPIO17
#define SPI_MISO 9 // GPIO18
#define SPI_MOSI 10 // GPIO19
#define SPI_CS 8 // GPIO20
void spi_init(void)
{
wiringPiSetup();
pinMode(SPI_CLK, OUTPUT);
pinMode(SPI_MISO, INPUT);
pinMode(SPI_MOSI, OUTPUT);
pinMode(SPI_CS, OUTPUT);
}
void spi_write(unsigned char data)
{
int i;
digitalWrite(SPI_CS, LOW);
for(i=7; i>=0; i--) {
digitalWrite(SPI_CLK, LOW);
if(data & (1<<i))
digitalWrite(SPI_MOSI, HIGH);
else
digitalWrite(SPI_MOSI, LOW);
digitalWrite(SPI_CLK, HIGH);
}
digitalWrite(SPI_CS, HIGH);
}
unsigned char spi_read(void)
{
unsigned char data = 0;
int i;
digitalWrite(SPI_CS, LOW);
for(i=7; i>=0; i--) {
digitalWrite(SPI_CLK, HIGH);
if(digitalRead(SPI_MISO))
data |= (1<<i);
digitalWrite(SPI_CLK, LOW);
}
digitalWrite(SPI_CS, HIGH);
return data;
}
int main(void)
{
spi_init();
// 发送数据
spi_write(0x55);
// 读取数据
unsigned char data = spi_read();
printf("Received data: %#x\n", data);
return 0;
}
GPIO上模拟SPI通信
最新推荐文章于 2024-05-13 01:30:00 发布