前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >STM32 HDI-CEC(工程详解)

STM32 HDI-CEC(工程详解)

作者头像
云深无际
发布2022-06-15 15:23:12
8010
发布2022-06-15 15:23:12
举报
文章被收录于专栏:云深之无迹

书接上文,是对官方项目的解读,有点长,没看完。

一般下载的官方文件有一个这样的文件夹,这个是官方的评估板的API。

作用

EVAL就是评估的意思

common是通用驱动的意思,每个包里面都有

就写一个最早的日志

其实还有各种各样的板子

16年的电路板

事实上这个板子还更早。。。

发现一个以前的开发工具

它产生的工作文件

库的封装

Libraries/CMSIS:与片内寄存器相关,有代表性的如下:

代码语言:javascript
复制
stm32f10x.h                 外设头文件
system_stm32f10x.h          STM32时钟配置
core_cm3.h                  内核寄存器映射

Libraries/STM32F10x_StdPeriph_Driver:与外设相关,有代表性的如下:

代码语言:javascript
复制
|-misc.h                外设对内核中的NVIC 的访问
|-stm32f10x_adc.h       ADC(模数转换)库函数
|-stm32f10x_bkp.h       bkp()
|-stm32f10x_can.h       can(CAN总线)
|-stm32f10x_cec.h       cec
|-stm32f10x_crc.h       crc
|-stm32f10x_dac.h       dac(数模转换)
|-stm32f10x_dbgmcu.h    dbgmcu
|-stm32f10x_dma.h       dma(DMA)直接存储器访问
|-stm32f10x_exti.h      exti    外部中断事件控制器
|-stm32f10x_flash.h     flash
|-stm32f10x_fsmc.h      fsmc
|-stm32f10x_gpio.h      GPIO(引脚口)
|-stm32f10x_i2c.h       IIC(IIC总线)
|-stm32f10x_iwdg.h      iwdg(独立看门狗)
|-stm32f10x_pwr.h       pwr(睡眠模式)
|-stm32f10x_rcc.h       rcc
|-stm32f10x_rtc.h       rtc(实时时钟)
|-stm32f10x_sdio.h      sdio
|-stm32f10x_spi.h       spi(SPI总线)
|-stm32f10x_tim.h       TIM(滴答时钟)
|-stm32f10x_usart.h     USART(串口通信)
|-stm32f10x_wwdg.h      wwdg(窗口看门狗)

src:一些启动项目,比较重要的有:

代码语言:javascript
复制
main.c    主函数
startup_stm32f10x_hd.s  启动文件
stm32f10x_conf.h    包含所有的 .h 文件
stm32f1xx_it.c          与中断向量有关
system_stm32f10x.c      上面介绍过了相关的 .h 与 系统时钟相关

这个地方是LCD 的接口定义

再把我们的应用手册看一次

避免这种ESD,使用了一个专用的芯片

这是作用

就是这样的

HDMI又使用了一个电源IC

提供5V的电压

我们的主角真好看

CEC分外的好看

这个接口的定义是定义再主板上面的

HDMI CEC IIC的引脚

分的很细,CEC的控制,以及CEC源设备的控制IIC

可以看到是链接到了,固件库的位置上面,仔细地读源码,可以对设计理解的很深入。

但是有的引脚是这样的,我不太理解

在应用之前会进行参数的校验

GPIO_Pin_n可以理解为某端口脚在整个端口的位置。比方某GPIO口的第6管脚位置编码GPIO_Pin_6 被定义为 ((uint16_t)0x0040) ,在对相应GPIO管脚做基本属性配置时会用到,如配置输入输出模式、模拟输入模式的选择等。

而GPIO_PinSourceN一般是在对某GPIO口相应pin脚的复用功能进行选择配置才会用到。它是根据端口各脚位的位置按顺序从0开始依次递增编号,可以理解为该管脚在该端口的序号。比方某GPIO口的第6号复用功能脚的序号GPIO_PinSource6 被定义为 ((uint8_t)0x06) 。

搞不懂了。。。

出现了这个会被转换成下面的样子:

这是它的意思。

挂在AHB上,AHB的基地址在:

这里

最终在这里

最终在CMSIS的定义文件里面了,这也复习了一下库的封装。

继续看库里面的东西:

CEC的根地址是从0x00开始的,如果想配置的时候,就改这个地方。

DDC通路,大致是个IIC接口,读取上游器件的EDID或者E-EDID数据;

就是沟通显示器的样子

和IIC的区别

协议的定义

是否打开自动读取的功能

终止功能的原因

CEC的功能,62个~

HPD热拔插的检测功能,装在一个宏里面

作用是这样的

参数是先知道主的GPIO位置,接着往下排布

置位的函数,给了一个基地址,一个位置。

后面就是函数的签名。

函数可能会返回的错误类型、

这个是CEC结构的一个封装

对一些宏的保护,写了这个

一些要使用的变量

DDC是读取哪个显示器的信息

CEC的信息结构体长这样

cec读取到的位置,就是这里面的一个

还有128位的EDID,我代码就传到Github了,大家自己看

三个函数的签名。

下面就啰里啰唆的东西了。

初始化CEC的功能

引脚的模式

速度

上拉还是下拉

末尾会有这个

对参数进行校验

对一个引脚可以配置的选项都打包在这里

CEC的初始化

如果上面又这个宏打开的话就设置新的时钟。

自己看,可以看桥接的APB来

设置函数

是否使能

APB1时钟

都会做参数的校验

重启和时钟控制

CEC在APB上,开启,以及把引脚的时钟打开。

CEC使用的引脚

后面GPIO是初始化

关闭也简单

CEC也和IO的初始化一样

下篇继续,读不动了。

热拔插的检测引脚,一对

最后是实际的CEC接口

这是设备的种类

代码语言:javascript
复制
https://wenku.baidu.com/view/541672decbd376eeaeaad1f34693daef5ef71317.html
代码语言:javascript
复制
————————————————
版权声明:本文为CSDN博主「time_train」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/time_trip/article/details/118786437
代码语言:javascript
复制
https://item.szlcsc.com/10394.html#pdf-view
代码语言:javascript
复制
https://www.st.com/zh/microcontrollers-microprocessors/stm32f051r8.html#st_circuit-diagram_sec-nav-tab
代码语言:javascript
复制
https://www.st.com/en/evaluation-tools/stm320518-eval.html
代码语言:javascript
复制
https://www.st.com/en/evaluation-tools/stm32-eval-boards.html#cad-resources
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云深之无迹 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档