使用平台:正点原子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(哇酷开发者社区)