树莓派spi从机模式_树莓派之SPI显示屏

8c7f74c708b012c776a065485bde9ddb.png
显示屏的驱动代码一般商家会提供一个Demo,你需要了解的时屏的驱动芯片,以及片选信号有效电平、字符传输方式(从低至高,还是从高至低)。当然也可通过分析Demo了解该信息。

跳线

以下是我做试验时,树莓派和LCD连线:

/*LCD SPI0接口
*	GND     电源地
*	VCC     3.3v电源
*	D0      wPi14(SCLK)	/Label:LCD_D0
*	D1      wPi12(MOSI)	/Label:LCD_D1
*	RES     wPi21		/Label:LCD_RES
*	DC      wPi22		/Label:LCD_DC
*	CS      wPi10(CE0) 	/Label:LCD_CS
*	BLK     wPi24 		/Label:LCD_BLK	背光控制
*	MISO    NC    不接
*/

SPI输出参数设置

我试验用的LCD,片选信号为低电平有效,字符传输方式为从高到低(MSB)。
static int SPI_FD;
static const char *device = "/dev/spidev0.0";
static uint32_t mode = 0;
static uint8_t bits = 8;
static uint32_t speed = 500000;	//500KHz

......

void LCD_Writ_Bus(uint8_t *dat,uint16_t size)
{
	write(SPI_FD, dat, size);
}

......

int main()
{
	mode = SPI_MODE_0 | SPI_LOOP;
	wiringPiSetup();
	pinMode(21,OUTPUT);
	pinMode(22,OUTPUT);
	pinMode(24,OUTPUT);
	SPI_FD = open(device, O_WRONLY);
	if(SPI_FD < 0)
		printf("open SPI Err!rn");
	ioctl(SPI_FD, SPI_IOC_WR_MODE, &mode);
	ioctl(SPI_FD, SPI_IOC_WR_BITS_PER_WORD, &bits);
	ioctl(SPI_FD, SPI_IOC_WR_MAX_SPEED_HZ, &speed);
	printf("Ready!rn");
	LCD_Init();
	LCD_Area_Clear(0,0,200,200,BLUE);
	Draw_Circle(200,100,20,RED);
	LCD_ShowString(200,20,"Hello,World!",WHITE);
	LCD_ShowPicture(0,0,200,200);
	close(SPI_FD);
}

编译和执行

因wiringPi在初始化时需要root权限,可将应用程序归属root:root,并设置s位,其他用户均可执行。
sudo gcc -o lcd lcd.c -lwiringPi

sudo chmod u+s lcd

./lcd

[1]

参考

  1. ^树莓派之SPI编程 https://zhuanlan.zhihu.com/p/256140781
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值