
如何使STM32成功输出HDMI信号?
硬件准备
1、选择支持HDMI输出的开发板:由于STM32本身没有HDMI接口,需要使用具有HDMI接口的开发板,如华清远见FSMP1A开发板,该开发板集成了HDMI接口。

2、连接显示器:将开发板的HDMI接口通过HDMI线连接到显示器的HDMI输入接口。
软件配置
1、修改设备树文件:
设置I2C2的pinmux:在stm32mp15pinctrl.dtsi
中找到I2C2的配置,根据实际使用的引脚进行配置,
&i2c2 { pinctrlnames = "default", "sleep"; pinctrl0 = <&i2c2_pins_a>; pinctrl1 = <&i2c2_pins_sleep_a>; status = "okay"; };
添加HDMI的电源节点:在设备树的根节点下添加1.2V电压节点,供Sii9022A芯片使用,如下所示:
v1v2_hdmi: regulatorfixed { compatible = "regulatorfixed"; regname = "v1v2_hdmi"; regulatorminmicrovolt = <1200000>; regulatormaxmicrovolt = <1200000>; regulatoralwayson = <true>; regulatorbooton = <true>; status = "okay"; };
在i2c2节点追加HDMI子节点:用于接收LTDC数据,如下所示:
&i2c2 { pinctrlnames = "default", "sleep"; pinctrl0 = <&i2c2_pins_a>; pinctrl1 = <&i2c2_pins_sleep_a>; hdmitransmitter@39 { compatible = "sil,sii9022"; reg = <0x39>; iovccsupply = <&v3v3>; cvcc12supply = <&v1v2_hdmi>; resetgpios = <&gpioa 13 GPIO_ACTIVE_LOW>; interrupts = <14 IRQ_TYPE_EDGE_FALLING>; interruptparent = <&gpioa>; #sounddaicells = <0>; status = "okay"; ports { #addresscells = <1>; #sizecells = <0>; port@0 { reg = <0>; sii9022_in: endpoint { remoteendpoint = <<dc_ep_0_out>; }; }; }; }; };
2、使能内核自带的sii902x驱动:ST提供的linux内核已经集成了sii902x驱动,并且已经使能,在Linux的menuconfig中可以找到相应的配置选项,确保该驱动已使能。
3、修改ltdc节点,输出到HDMI子节点:在设备树文件中找到ltdc节点,修改其配置,使其输出到之前添加的HDMI子节点,并屏蔽之前的rgb面板节点,如下所示:
<dc { pinctrlnames = "default", "sleep"; pinctrl0 = <<dc_pins_b>; pinctrl1 = <<dc_pins_sleep_b>; status = "okay"; port { #aggressivecells = <1>; #sizecells = <0>; ltdc_ep_0_out@0 { reg = <0>; sii9022_in: endpoint { remoteendpoint = <&i2c2_hdmi>; }; }; }; };
4、编译设备树:执行make dtbs
命令编译设备树,生成可烧写的设备树镜像文件stm32mp157datk.dtb
。

5、烧写设备树和程序:将编译好的设备树镜像文件烧写到开发板的存储介质中,然后下载相应的程序到开发板上,以实现HDMI输出功能。
文章版权及转载声明
作者:豆面本文地址:https://www.jerry.net.cn/articals/21083.html发布于 2025-01-24 04:53:21
文章转载或复制请以超链接形式并注明出处杰瑞科技发展有限公司