RV1106点亮1.44寸SPI接口tftlcd

         最近入手了一块微雪的幸狐RV1106微型Linux开发板,具体型号为Luckfox Pico Max,这是一款集成ARM Cortex-A7/RISC-V MCU/NPU/ISP等处理器。

        根据微雪官网的wiki入门指导测试了一下,功能一切正常,感觉很nice,这款板子真的是麻雀虽小五脏俱全呀。

        正好手头上有一块SPI接口的1.44寸tftlcd,分辨率是128*128的,驱动器IC是ST7735。微雪官方的指导文档里有一个控制器IC为ST7789的1.3寸LCD,所以我想应该可以参考这部分将我的1.44寸LCD驱动起来。

        开发板及LCD如下图:

        引脚连接如下:        

LCD     RV1106
VCC ---  39(VSYS)
GND ---  38(GND)
LED ---  17(GPIO2_B0_D)
CLK ---  14(GPIO1_C1_D)
SDI ---  15(GPIO1_C2_D)
RS  ---  11(GPIO2_B1_D)
RST ---  16(GPIO1_C3_D)
CS  ---  12(GPIO1_C0_D)        

        参考微雪的参考文档修改了设备树、配置文件开启了相关驱动支持。如下:

设备树:rv1106g-luckfox-pico-pro-max.dts

/ {
	model = "Luckfox Pico Max";
	compatible = "rockchip,rv1103g-38x38-ipc-v10", "rockchip,rv1106";

	/*LCD_BL*/
	gpio2pb0:gpio2pb0 {
		compatible = "regulator-fixed";
		pinctrl-names = "default";
		pinctrl-0 = <&gpio2_pb0>;
		regulator-name = "gpio2_pb0";
		regulator-always-on;
	};

	/*LCD_DC*/
    gpio2pb1:gpio2pb1 {
		compatible = "regulator-fixed";
		pinctrl-names = "default";
		pinctrl-0 = <&gpio2_pb1>;
		regulator-name = "gpio2_pb1";
		regulator-always-on;
	};

	/*LCD_RES*/
    gpio1pc3:gpio1pc3 {
        compatible = "regulator-fixed";
        pinctrl-names = "default";
        pinctrl-0 = <&gpio1_pc3>;
        regulator-name = "gpio1_pc3";
        regulator-always-on;
    };
};

/**********GPIO**********/
&pinctrl {

	/*LCD_BL*/
	gpio2-pb0 {
		gpio2_pb0:gpio2-pb0 {
			rockchip,pins =	<2 RK_PB0 RK_FUNC_GPIO &pcfg_pull_none>;
		};
	};

	/*LCD_DC*/
    gpio2-pb1 {
		gpio2_pb1:gpio2-pb1 {
			rockchip,pins =	<2 RK_PB1 RK_FUNC_GPIO &pcfg_pull_none>;
		};
	};

	/*LCD_RES*/
    gpio1-pc3 {
        gpio1_pc3:gpio1-pc3 {
            rockchip,pins = <1 RK_PC3 RK_FUNC_GPIO &pcfg_pull_none>;
        };
    };
};

&spi0 {
	status = "okay";
	pinctrl-names = "default";
	pinctrl-0 = <&spi0m0_cs0 &spi0m0_pins>;			

	st7735r@0{						
		status = "okay";
		compatible = "sitronix,st7735r"; 
		reg = <0>;			
		spi-max-frequency = <48000000>;			
		fps = <30>;
		buswidth = <8>;
		debug = <0x7>;
		led-gpios = <&gpio2 RK_PB0 GPIO_ACTIVE_LOW>;//BL
		dc = <&gpio2 RK_PB1 GPIO_ACTIVE_HIGH>;		//DC
		reset = <&gpio1 RK_PC3 GPIO_ACTIVE_LOW>;	//RES
	};
};

&pinctrl {
    spi0 {
        /omit-if-no-ref/
        spi0m0_pins: spi0m0-pins {
            rockchip,pins =
                /* spi0_clk_m0 */
                <1 RK_PC1 4 &pcfg_pull_none>,
                /* spie_miso_m0 */
                // <1 RK_PC3 6 &pcfg_pull_none>,
                /* spi_mosi_m0 */
                <1 RK_PC2 6 &pcfg_pull_none>;
        };
    };
};

配置文件:luckfox_rv1106_linux_defconfig

在末尾添加如下


CONFIG_FB_TFT_ST7735R=y
CONFIG_SPI_MASTER=y
CONFIG_FB=y

           重新编译kernel后下载至开发板中,启动开发板后/dev里生成了fb0设备,如下:

这说明设备已经添加成功了。

        通过cat /dev/urandom > /dev/fb0测试一下花屏功能,发现屏幕没有任何反应,仔细检查发现屏幕背光并没有点亮,万用表测量背光控制引脚电平为0v。这里我怀疑就是背光的问题,所以将LCD的背光控制引脚直接连接至3.3V引脚上,屏幕出现了花屏。又通过cat /dev/zero  > /dev/fb0测试一下清屏功能也是正常,这就说明触摸屏的驱动应该是没有问题了,现在需要解决的是背光引脚控制电平的问题了。

        想到之前使用其他linux板子驱动RGB触摸屏时都有一个backlight背光驱动的,我想应该也可以参考那个修改一下设备树来实现背光引脚的驱动。所以在kernel代码里全局搜索backlight,发现了好多相关的设备树配置方式,所以参考它们修改了一下rv1106g-luckfox-pico-pro-max.dts,如下:

/ {
	model = "Luckfox Pico Max";
	compatible = "rockchip,rv1103g-38x38-ipc-v10", "rockchip,rv1106";

	/*LCD_BL*/
	// gpio2pb0:gpio2pb0 {
	// 	compatible = "regulator-fixed";
	// 	pinctrl-names = "default";
	// 	pinctrl-0 = <&gpio2_pb0>;
	// 	regulator-name = "gpio2_pb0";
	// 	regulator-always-on;
	// };

	backlight:backlight{		
		compatible = "gpio-backlight";
		pinctrl-names = "default";
		pinctrl-0 = <&gpio2_pb0>;
		gpios = <&gpio2 RK_PB0 GPIO_ACTIVE_HIGH>;
		default-on;
	};

	/*LCD_DC*/
    gpio2pb1:gpio2pb1 {
		compatible = "regulator-fixed";
		pinctrl-names = "default";
		pinctrl-0 = <&gpio2_pb1>;
		regulator-name = "gpio2_pb1";
		regulator-always-on;
	};

	/*LCD_RES*/
    gpio1pc3:gpio1pc3 {
        compatible = "regulator-fixed";
        pinctrl-names = "default";
        pinctrl-0 = <&gpio1_pc3>;
        regulator-name = "gpio1_pc3";
        regulator-always-on;
    };
};

/**********GPIO**********/
&pinctrl {

	/*LCD_BL*/
	gpio2-pb0 {
		gpio2_pb0:gpio2-pb0 {
			rockchip,pins =	<2 RK_PB0 RK_FUNC_GPIO &pcfg_pull_none>;
		};
	};

	/*LCD_DC*/
    gpio2-pb1 {
		gpio2_pb1:gpio2-pb1 {
			rockchip,pins =	<2 RK_PB1 RK_FUNC_GPIO &pcfg_pull_none>;
		};
	};

	/*LCD_RES*/
    gpio1-pc3 {
        gpio1_pc3:gpio1-pc3 {
            rockchip,pins = <1 RK_PC3 RK_FUNC_GPIO &pcfg_pull_none>;
        };
    };
};

&spi0 {
	status = "okay";
	pinctrl-names = "default";
	pinctrl-0 = <&spi0m0_cs0 &spi0m0_pins>;		

	st7735r@0{						
		status = "okay";
		compatible = "sitronix,st7735r"; 
		reg = <0>;			
		spi-max-frequency = <48000000>;			
		fps = <30>;
		buswidth = <8>;
		debug = <0x7>;
		led-gpios ; // = <&gpio2 RK_PB0 GPIO_ACTIVE_HIGH>;//BL
		dc = <&gpio2 RK_PB1 GPIO_ACTIVE_HIGH>;		//DC
		reset = <&gpio1 RK_PC3 GPIO_ACTIVE_LOW>;	//RES
		backlight = &backlight;
	};
};

&pinctrl {
    spi0 {
        /omit-if-no-ref/
        spi0m0_pins: spi0m0-pins {
            rockchip,pins =
                /* spi0_clk_m0 */
                <1 RK_PC1 4 &pcfg_pull_none>,
                /* spie_miso_m0 */
                // <1 RK_PC3 6 &pcfg_pull_none>,
                /* spi_mosi_m0 */
                <1 RK_PC2 6 &pcfg_pull_none>;
        };
    };
};

        再次重新编译kernel后下载至开发板后测试,发现还是和之前一样的情况,但是/sys/class/里已经又backlight文件了,说明backlight驱动是添加成功了,那问题应该是出现引脚控制上了,全局搜索gpio-backlight,发现这个在gpio_backlight.c文件里出现了,但是这个文件并没有被编译。

        好了,出现这个问题的原因应该是找到,那就启用这个gpio_backlight的功能吧,在配置文件luckfox_rv1106_linux_defconfig末尾处添加


CONFIG_BACKLIGHT_GPIO=y

        再次编译kernel后下载进开发板,发现LCD可以正常点亮,测试花屏和清屏功能都正常。到此我手上的1.44寸LCD驱动是调试完成了。可以通过如下命令控制背光打开和关闭。

# 关闭
echo 0 > /sys/class/backlight/backlight/brightness
# 打开
echo 1 > /sys/class/backlight/backlight/brightness

        测试

  • 18
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要使用STM32F103RCT6驱动1.44TFT LCD显示屏,首先需要了解TFT LCD显示屏的基本工作原理和通信接口。 TFT LCD显示屏由控制器和显示面板组成,控制器负责将图像数据发送到显示面板,并控制显示面板的驱动方式。STM32F103RCT6是一款32位ARM Cortex-M3核心的微控制器,具有丰富的外设和较高的处理能力,适合用于驱动TFT LCD显示屏。 接下来需要确定TFT LCD显示屏的通信接口是什么,常见的通信接口SPI、I2C和8080并行接口等。对于1.44TFT LCD显示屏,通常采用SPI接口进行通信。 在进行硬件连接之前,需要查看TFT LCD显示屏的规格书和STM32F103RC6的数据手册来了解各个引脚的功能和连接方式。通常,SPI接口需要如下连接:使用STM32F103RCT6的SPI主机模式,分别连接STM32F103RCT6的SPI主机的SCK、MISO、MOSI管脚(对应SPI1或SPI2)与TFT LCD显示屏的SCK、SDO、SDI管脚,还需要连接片选管脚,以及连接显示屏的复位管脚和片选管脚以及电源供应和地。 在软件方面,需要先配置STM32F103RCT6的SPI外设,并设置通信速率、数据位长度等参数。然后,编写驱动程序,通过SPI与TFT LCD显示屏进行数据通信,将显示数据发送到TFT LCD显示屏,以实现图像显示的功能。 总的来说,驱动1.44TFT LCD显示屏需要进行硬件设置和软件编程。通过了解TFT LCD显示屏的通信接口和STM32F103RCT6的外设特性,并编写相应的驱动程序,就可以实现TFT LCD显示屏的驱动及图像显示功能。 ### 回答2: 要驱动1.44TFTLCD显示屏,首先要使用STM32F103RCT6开发板与显示屏进行连接。我们可以通过GPIO口实现数据线与显示屏相连,而控制线则通过专门的引脚连接。 接下来需要编写相关的驱动代码来控制显示屏。我们可以使用HAL库提供的函数,来设置GPIO口的输出模式,以及数据传输相关的操作。利用SPI或者I2C通信协议,我们可以通过发送命令和数据来控制显示屏的显示内容。 在驱动代码中,我们需要先初始化SPI或者I2C通信,并配置相应的参数,比如时钟频率、传输模式等。 接着,我们需要编写命令和数据的发送函数,通过SPI或I2C发送相关指令给显示屏。比如,我们可以通过发送命令来设置显示区域、背光亮度等参数。 最后,我们可以编写显示函数来实现在显示屏上显示图像或者文字。通过发送数据来更新显示内容,并且可以设置不同的显示模式,如图形显示、字符显示等。 需要注意的是,针对不同的显示屏型号,具体的驱动代码可能会有所不同。因此,在编写驱动代码时,需要结合显示屏的数据手册来编写相应的控制指令和函数。 以上是关于如何驱动1.44TFTLCD显示屏的大致步骤。在实际应用中,还需要对具体的硬件结构和功能要求进行详细调试和开发。 ### 回答3: STM32F103RCT6是一款ARM Cortex-M3内核的微控制器,可以用于控制各种外设和驱动显示屏。在驱动1.44TFT LCD显示屏时,我们需要按照以下步骤进行设置和编程: 1. 连接硬件:首先,将STM32F103RCT6与1.44TFT LCD显示屏连接起来。根据显示屏和微控制器的规格书或引脚配置表,将引脚正确连接。 2. 配置GPIO引脚:在STM32F103RCT6的寄存器中,通过设置GPIO引脚的模式和速度,将其配置为输出模式。将对应的引脚配置为控制显示屏的D/C引脚(用于选择数据/指令)、CS引脚(用于片选)、以及时钟引脚和数据引脚等。 3. 编写驱动程序:使用C语言或其他适合的编程语言,编写代码来控制和驱动1.44TFT LCD显示屏。根据显示屏的数据手册和命令集,实现显示屏的初始化、清屏、写入像素数据等功能。 4. 设置显示屏参数:根据需要,设置显示屏的相关参数,例如屏幕分辨率、颜色模式、显示方向等。这些参数需要根据具体的显示屏型号来设置。 5. 显示数据:通过驱动程序发送像素数据,将需要显示的图像或文本等内容写入显示屏。 6. 刷新显示:根据需要,定时刷新显示屏内容,以保持实时更新的效果。 通过以上步骤,我们可以实现STM32F103RCT6对1.44TFT LCD显示屏的驱动。需要根据具体的硬件和显示屏型号进行适配和调试,确保驱动程序的正确性和稳定性。同时,根据项目的需求和复杂度,可能需要更详细的代码和配置设置。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值