使用SPI fbtft显示终端(ILI9341)

使用平台:正点原子STM32MP157开发板

内核版本:

 

1.在menuconfig中开启SPI

>Device Drive >SPI support 

<*> STMicroelectronics STM32 SPI controller

2.选择对应的驱动,使能ILI9341驱动

> Device Drivers > Staging drivers > Support for small TFT LCD display modules

3.使能fbdev设备

> Device Drivers > Graphics support > Direct Rendering Manager (XFree86 4.1.0 and higher DRI support)

4.保存,make all -j32 编译
5.修改设备树:

在stm32mp15-pinctrl.dtsi文件中添加片选引脚

 继续添加

参看fbtft的源码:

在fbtft.core.c中

向SPI1写入节点

&spi1 {
        /delete-property/dmas;
        /delete-property/dma-names;
		pinctrl-names = "default", "sleep";
		pinctrl-0 = <&spi1_pins_a>;
		pinctrl-1 = <&spi1_sleep_pins_a>;
		cs-gpios = <&gpioz 3 GPIO_ACTIVE_LOW>;
		status = "okay";
	

 	spilcd: lcd@0{
		compatible = "ilitek,ili9341";
		reg = <0>;
		fps = <60>;
		spi-max-frequency = <32000000>;
		rotate  = <90>;
		buswidth = <8>;
        dc-gpios = <&gpiof 10 GPIO_ACTIVE_HIGH>;
		reset-gpios = <&gpiof 8 GPIO_ACTIVE_HIGH>;
        led-gpios= <&gpiof 7 GPIO_ACTIVE_HIGH>;
		backlight = &backlight;
	};
};

 backlight 节点设置:

删除不用的DMA信息(stm32mp15-pinctrl.dtsi 727行)

向timers1节点下添加:

&timers1{
	//delete dma
	status = "okay";
	pwm1:pwm{
			status = "okay";
			pinctrl-names="default","sleep";
			pinctrl-0 = <&pwm1_pins_a>;
			pinctrl-1 = <&pwm1_sleep_pins_a>;
			#pwm-cells = <2>;	
		};

};

在根文件添加节点:

backlight:backlight {
		compatible = "pwm-backlight";
		pwms = <&pwm1 2 5000000>;
		brightness-levels = <0 4 8 16 32 64 128 255>;
		default-brightness-level = <4>;
		power-supply = <&v3v3>;
		status = "okay";
	};

backlight 使用的是TIM1的通道2,也就是引脚PA10继续修改文件stm32mp157-pinctrl.dtsi

如果需要更换背光引脚需要修改的地方有

1.backlight节点下的 pwms 属性

2.向timers1节点下补充的pwm1节点下的pinctrl-0与pinctrl-1

如果引脚实在不够用就把BLK引脚接VDD也行

6.编译DTB进内核

登录终端查询SPI打印信息

dmesg | grep "spi"

7.查看/dev 下的fb设备

ls /dev/fb*

 可以看见有fb0设备

输入命令: cat /dev/urandom > /dve/fb0

cat /dev/urandom > /dev/fb0

就能看见屏幕花屏

8.修改bootarges将tty1设置为终端显示:

bootargs=console=tty1 console=ttySTM0,115200 

 

 将tty1设置为终端显示

重启运行

9.调试出现的问题

# dmesg | grep "spi"
stm32mp157-pinctrl soc:pin-controller-z@54004000: pin PZ3 already requested by 44004000.spi; cannot claim for GPIOZ:403
spi_stm32 44004000.spi: can't get CS gpio 403
spi_stm32: probe of 44004000.spi failed with error -22

 1、反复修改设备树未果,还是申请GPIO失败

在pinmux.c文件中找到:

估计时引脚复用检查时出现问题,

在pinctrl-stm32.c中将strict 修改为false,他表示是否启用严格模式。

如果设置为true,则在设置引脚复用功能时会进行严格的检查和验证。

2、终端显示不全,只显示最后一行,可能是logo显示影响到了,需要关闭logo显示

3、RESET 引脚设置了无法控制(reset-gpios = <&gpiof 8 GPIO_ACTIVE_HIGH>)ili9341是低电平复位

在 fbtft-core.c 的 fbtft_reset 函数中修改

参考:求助:全志V3S 荔枝派zero点不亮SPI屏幕 / 全志 SOC / WhyCan Forum(哇酷开发者社区)

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱吃瓜的亚瑟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值